This is an automated email from the ASF dual-hosted git repository. jgallimore pushed a commit to branch tomee-1.7.x in repository https://gitbox.apache.org/repos/asf/tomee.git
commit 58dfb991826cdbbe10e727bd2968b92c417f0e25 Author: rmannibucau <[email protected]> AuthorDate: Mon May 1 21:31:37 2017 +0200 extracting corba rmi types in an utility class for now --- .../org/apache/openejb/config/RemoteServer.java | 3 +- .../java/org/apache/openejb/client/EJBRequest.java | 64 +-------------------- .../org/apache/openejb/client/corba/Corbas.java | 67 ++++++++++++++++++++++ 3 files changed, 72 insertions(+), 62 deletions(-) diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java b/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java index 50c0fa9..4ae0806 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java @@ -295,7 +295,8 @@ public class RemoteServer { if (!addedArgs.containsKey("-Djava.io.tmpdir")) { argsList.add("-Djava.io.tmpdir=" + temp.getAbsolutePath()); } - if (!addedArgs.containsKey("-Djava.endorsed.dirs")) { + if ((javaVersion.startsWith("1.7") || javaVersion.startsWith("1.8")) && // java 9 dropped endorsed folder + !addedArgs.containsKey("-Djava.endorsed.dirs") && endorsed.exists()) { argsList.add("-Djava.endorsed.dirs=" + endorsed.getAbsolutePath()); } if (!addedArgs.containsKey("-Dcatalina.base")) { 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 e26c7e9..bcc9a5b 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 @@ -16,20 +16,14 @@ */ package org.apache.openejb.client; +import org.apache.openejb.client.corba.Corbas; import org.apache.openejb.client.serializer.EJBDSerializer; import org.apache.openejb.client.serializer.SerializationWrapper; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.rmi.CORBA.Stub; -import javax.rmi.CORBA.Tie; -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; public class EJBRequest implements ClusterableRequest { @@ -556,22 +550,7 @@ public class EJBRequest implements ClusterableRequest { throw new IOException("Unkown primitive type: " + clazz); } } else { - if (obj instanceof PortableRemoteObject && obj instanceof Remote) { - final Tie tie = javax.rmi.CORBA.Util.getTie((Remote) obj); - if (tie == null) { - throw new IOException("Unable to serialize PortableRemoteObject; object has not been exported: " + obj); - } - 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); - } + obj = Corbas.toStub(obj); out.write(OBJECT); out.writeObject(clazz); out.writeObject(obj); @@ -583,31 +562,6 @@ public class EJBRequest implements ClusterableRequest { static final Object[] noArgsO = new Object[0]; /** - * Obtain an ORB instance for this request to activate remote - * arguments and return results. - * - * @return An ORB instance. - * @throws java.io.IOException On error - */ - protected Object getORB() throws IOException { - // first ORB request? Check our various sources - if (orb == null) { - try { - final Context initialContext = new InitialContext(); - orb = initialContext.lookup("java:comp/ORB"); - } catch (final Throwable e) { - try { - // any orb will do if we can't get a context one. - 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"); - } - } - } - return orb; - } - - /** * Changes to this method must observe the optional {@link #metaData} version */ protected void readMethodParameters(final ObjectInput in) throws IOException, ClassNotFoundException { @@ -671,19 +625,7 @@ public class EJBRequest implements ClusterableRequest { case OBJECT: clazz = (Class) in.readObject(); - obj = in.readObject(); - if (obj instanceof Stub) { - final Stub stub = (Stub) obj; - 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()); - } - } + obj = Corbas.connect(in.readObject()); break; default: throw new IOException("Unkown data type: " + type); diff --git a/server/openejb-client/src/main/java/org/apache/openejb/client/corba/Corbas.java b/server/openejb-client/src/main/java/org/apache/openejb/client/corba/Corbas.java new file mode 100644 index 0000000..2d765e3 --- /dev/null +++ b/server/openejb-client/src/main/java/org/apache/openejb/client/corba/Corbas.java @@ -0,0 +1,67 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * 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 + * <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. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.openejb.client.corba; + +import org.omg.CORBA.ORB; + +import javax.naming.InitialContext; +import javax.rmi.CORBA.Stub; +import javax.rmi.CORBA.Tie; +import javax.rmi.PortableRemoteObject; +import java.io.IOException; +import java.rmi.Remote; + +public class Corbas { + private Corbas() { + // no-op + } + + public static Object toStub(final Object obj) throws IOException { + if (obj instanceof PortableRemoteObject && obj instanceof Remote) { + final Tie tie = javax.rmi.CORBA.Util.getTie((Remote) obj); + if (tie == null) { + throw new IOException("Unable to serialize PortableRemoteObject; object has not been exported: " + obj); + } + final ORB orb = getORB(); + tie.orb(orb); + return PortableRemoteObject.toStub((Remote) obj); + } + return obj; + } + + private static ORB getORB() throws IOException { // note: we can cache it if needed but needs to be contextual + try { + return ORB.class.cast(new InitialContext().lookup("java:comp/ORB")); + } catch (final Throwable e) { + try { + // any orb will do if we can't get a context one. + return ORB.init(); + } catch (final Throwable ex) { + throw new IOException("Unable to connect PortableRemoteObject stub to an ORB, no ORB bound to java:comp/ORB"); + } + } + } + + public static Object connect(final Object obj) throws IOException { + if (obj instanceof Stub) { + final Stub stub = (Stub) obj; + final ORB orb = getORB(); + stub.connect(orb); + } + return obj; + } +}
