You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2017/05/01 18:04:46 UTC
tomee git commit: avoid to make corba mandatory and avoid to fail if
ClassHelper cant be overriden in cxf since we have the ClassUnwrapper now
Repository: tomee
Updated Branches:
refs/heads/master c714f50af -> 4cf62c6b9
avoid to make corba mandatory and avoid to fail if ClassHelper cant be overriden in cxf since we have the ClassUnwrapper now
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/4cf62c6b
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/4cf62c6b
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/4cf62c6b
Branch: refs/heads/master
Commit: 4cf62c6b9da37506197463013041fc8582a98716
Parents: c714f50
Author: rmannibucau <rm...@apache.org>
Authored: Mon May 1 20:04:36 2017 +0200
Committer: rmannibucau <rm...@apache.org>
Committed: Mon May 1 20:04:36 2017 +0200
----------------------------------------------------------------------
.../assembler/classic/JndiEncBuilder.java | 32 +++++-----
.../org/apache/openejb/client/EJBRequest.java | 62 ++++++++++++--------
.../org/apache/openejb/client/JNDIContext.java | 11 +++-
.../apache/openejb/server/cxf/rs/CxfHacks.java | 10 +++-
4 files changed, 72 insertions(+), 43 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tomee/blob/4cf62c6b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
index ac37574..53bcac8 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
@@ -23,6 +23,7 @@ import org.apache.openejb.OpenEJBException;
import org.apache.openejb.SystemException;
import org.apache.openejb.core.CoreUserTransaction;
import org.apache.openejb.core.JndiFactory;
+import org.apache.openejb.core.ParentClassLoaderFinder;
import org.apache.openejb.core.TransactionSynchronizationRegistryWrapper;
import org.apache.openejb.core.ivm.naming.ClassReference;
import org.apache.openejb.core.ivm.naming.CrossClassLoaderJndiReference;
@@ -51,20 +52,7 @@ import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.container.InjectableBeanManager;
-import org.omg.CORBA.ORB;
-import java.io.Serializable;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.TreeMap;
-import java.util.concurrent.Callable;
import javax.annotation.ManagedBean;
import javax.ejb.EJBContext;
import javax.ejb.TimerService;
@@ -94,6 +82,18 @@ import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Providers;
import javax.xml.ws.Service;
import javax.xml.ws.WebServiceContext;
+import java.io.Serializable;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.TreeMap;
+import java.util.concurrent.Callable;
/**
* TODO: This class is essentially an over glorified sym-linker. The names we were linking to are no longer guaranteed to be what we assume them to be. We need to come up with a
@@ -554,7 +554,11 @@ public class JndiEncBuilder {
// bind TransactionSynchronizationRegistry
bindings.put("comp/TransactionSynchronizationRegistry", new TransactionSynchronizationRegistryWrapper());
- bindings.put("comp/ORB", new SystemComponentReference(ORB.class));
+ try {
+ bindings.put("comp/ORB", new SystemComponentReference(ParentClassLoaderFinder.Helper.get().loadClass("org.omg.CORBA.ORB")));
+ } catch (final NoClassDefFoundError | ClassNotFoundException e) {
+ // no corba, who does recall what it is today anyway :D
+ }
bindings.put("comp/HandleDelegate", new SystemComponentReference(HandleDelegate.class));
// bind bean validation objects
http://git-wip-us.apache.org/repos/asf/tomee/blob/4cf62c6b/server/openejb-client/src/main/java/org/apache/openejb/client/EJBRequest.java
----------------------------------------------------------------------
diff --git a/server/openejb-client/src/main/java/org/apache/openejb/client/EJBRequest.java b/server/openejb-client/src/main/java/org/apache/openejb/client/EJBRequest.java
index 4bd698c..1d70b6b 100644
--- a/server/openejb-client/src/main/java/org/apache/openejb/client/EJBRequest.java
+++ b/server/openejb-client/src/main/java/org/apache/openejb/client/EJBRequest.java
@@ -5,9 +5,9 @@
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -18,7 +18,6 @@ package org.apache.openejb.client;
import org.apache.openejb.client.serializer.EJBDSerializer;
import org.apache.openejb.client.serializer.SerializationWrapper;
-import org.omg.CORBA.ORB;
import javax.naming.Context;
import javax.naming.InitialContext;
@@ -28,6 +27,7 @@ import javax.rmi.PortableRemoteObject;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.rmi.Remote;
import java.util.Arrays;
@@ -312,7 +312,7 @@ public class EJBRequest implements ClusterableRequest {
private static final long serialVersionUID = -5364100745236348268L;
private transient volatile String toString = null;
private transient EJBMetaDataImpl ejb;
- private transient ORB orb;
+ private transient Object orb;
private transient Method methodInstance;
private transient Class interfaceClass;
private transient String methodName;
@@ -561,8 +561,15 @@ public class EJBRequest implements ClusterableRequest {
if (tie == null) {
throw new IOException("Unable to serialize PortableRemoteObject; object has not been exported: " + obj);
}
- final ORB orb = getORB();
- tie.orb(orb);
+ final Object orb = getORB();
+ try {
+ tie.getClass().getMethod("orb", Thread.currentThread().getContextClassLoader().loadClass("org.omg.CORBA.ORB"))
+ .invoke(tie, orb);
+ } catch (final ClassNotFoundException | IllegalAccessException | NoSuchMethodException e) {
+ throw new IllegalStateException("No CORBA available", e);
+ } catch (final InvocationTargetException e) {
+ throw new IllegalStateException("No CORBA available", e.getCause());
+ }
obj = PortableRemoteObject.toStub((Remote) obj);
}
out.write(OBJECT);
@@ -582,17 +589,17 @@ public class EJBRequest implements ClusterableRequest {
* @return An ORB instance.
* @throws java.io.IOException On error
*/
- protected ORB getORB() throws IOException {
+ protected Object getORB() throws IOException {
// first ORB request? Check our various sources
if (orb == null) {
try {
final Context initialContext = new InitialContext();
- orb = (ORB) initialContext.lookup("java:comp/ORB");
+ orb = initialContext.lookup("java:comp/ORB");
} catch (Throwable e) {
try {
// any orb will do if we can't get a context one.
- orb = ORB.init();
- } catch (Throwable ex) {
+ orb = Thread.currentThread().getContextClassLoader().loadClass("org.omg.CORBA.ORB").getMethod("init").invoke(null);
+ } catch (final Throwable ex) {
throw new IOException("Unable to connect PortableRemoteObject stub to an ORB, no ORB bound to java:comp/ORB");
}
}
@@ -667,8 +674,15 @@ public class EJBRequest implements ClusterableRequest {
obj = in.readObject();
if (obj instanceof Stub) {
final Stub stub = (Stub) obj;
- final ORB orb = getORB();
- stub.connect(orb);
+ final Object orb = getORB();
+ try {
+ stub.getClass().getMethod("connect", Thread.currentThread().getContextClassLoader().loadClass("org.omg.CORBA.ORB"))
+ .invoke(stub, orb);
+ } catch (final ClassNotFoundException | IllegalAccessException | NoSuchMethodException e) {
+ throw new IllegalStateException("No CORBA available", e);
+ } catch (final InvocationTargetException e) {
+ throw new IllegalStateException("No CORBA available", e.getCause());
+ }
}
break;
default:
@@ -697,17 +711,17 @@ public class EJBRequest implements ClusterableRequest {
public String toString() {
if (null == toString) {
toString = "Body{" +
- "ejb=" + ejb +
- ", orb=" + orb +
- ", methodInstance=" + methodInstance +
- ", interfaceClass=" + interfaceClass +
- ", methodName='" + methodName + '\'' +
- ", methodParamTypes=" + (methodParamTypes == null ? null : Arrays.asList(methodParamTypes)) +
- ", methodParameters=" + (methodParameters == null ? null : Arrays.asList(methodParameters)) +
- ", primaryKey=" + primaryKey +
- ", requestId='" + requestId + '\'' +
- ", version=" + version +
- '}';
+ "ejb=" + ejb +
+ ", orb=" + orb +
+ ", methodInstance=" + methodInstance +
+ ", interfaceClass=" + interfaceClass +
+ ", methodName='" + methodName + '\'' +
+ ", methodParamTypes=" + (methodParamTypes == null ? null : Arrays.asList(methodParamTypes)) +
+ ", methodParameters=" + (methodParameters == null ? null : Arrays.asList(methodParameters)) +
+ ", primaryKey=" + primaryKey +
+ ", requestId='" + requestId + '\'' +
+ ", version=" + version +
+ '}';
}
return toString;
http://git-wip-us.apache.org/repos/asf/tomee/blob/4cf62c6b/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java
----------------------------------------------------------------------
diff --git a/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java b/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java
index 1124eb9..dddb478 100644
--- a/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java
+++ b/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java
@@ -18,7 +18,6 @@ package org.apache.openejb.client;
import org.apache.openejb.client.event.RemoteInitialContextCreated;
import org.apache.openejb.client.serializer.EJBDSerializer;
-import org.omg.CORBA.ORB;
import javax.naming.AuthenticationException;
import javax.naming.Binding;
@@ -592,8 +591,14 @@ public class JNDIContext implements InitialContextFactory, Context {
}
}
- private ORB getDefaultOrb() {
- return ORB.init();
+ private Object getDefaultOrb() {
+ try {
+ return Thread.currentThread().getContextClassLoader().loadClass("org.omg.CORBA.ORB").getMethod("init").invoke(null);
+ } catch (final ClassNotFoundException | IllegalAccessException | NoSuchMethodException e) {
+ throw new IllegalStateException("No CORBA available", e);
+ } catch (final InvocationTargetException e) {
+ throw new IllegalStateException("No CORBA available", e.getCause());
+ }
}
@Override
http://git-wip-us.apache.org/repos/asf/tomee/blob/4cf62c6b/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfHacks.java
----------------------------------------------------------------------
diff --git a/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfHacks.java b/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfHacks.java
index 0780e84..054c402 100644
--- a/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfHacks.java
+++ b/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfHacks.java
@@ -18,7 +18,8 @@ package org.apache.openejb.server.cxf.rs;
import org.apache.cxf.common.util.ClassHelper;
import org.apache.openejb.loader.SystemInstance;
-import org.apache.openejb.server.cxf.transport.util.CxfUtil;
+import org.apache.openejb.util.LogCategory;
+import org.apache.openejb.util.Logger;
import org.apache.openejb.util.reflection.Reflections;
public final class CxfHacks {
@@ -26,7 +27,12 @@ public final class CxfHacks {
if (!Boolean.parseBoolean(SystemInstance.get().getProperty("openejb.cxf.ClassHelper.patch", "true"))) {
return;
}
- Reflections.set(ClassHelper.class, null, "HELPER", new OpenEJBClassHelper());
+ try {
+ Reflections.set(ClassHelper.class, null, "HELPER", new OpenEJBClassHelper());
+ } catch (final Throwable throwable) {
+ // no more a big deal normally since CXF uses our ClassUnwrapper
+ Logger.getInstance(LogCategory.CXF, CxfHacks.class).info("Can't set OpenEJBClassHelper.");
+ }
}
private CxfHacks() {