On 19/10/2016 03:28, Tom Hood wrote:

It's unclear if there really is an interop issue. The application will launch with 7u55 if I don't set the ORBSingletonClass property, although that isn't how visibroker 5.2.1 was intended to run, so not setting it worries me.

Our application does call ORB.init(args,props) once at startup and use that instance throughout the code we have written.

However, visibroker calls ORB.init() all over the idl generated code and the vb jar itself.

The javap of the vb jar does show some downcasts to its com.inprise.vbroker.orb.ORBSingleton implementation in a few classes, but I haven't tracked down if that code could execute in our application or if the object it tries to downcast originated from ORB.init(). The simple test of a basic launch and performing some activities within the application seem to work. Sadly we don't have any automated tests that exercise our use of CORBA (java client to/from c++ server).

The idea of mixing ORB implementations worries me, even if only for the singleton ORB. I'm new to CORBA and the client side of our application and still a newbie to java as I've been primarily working on our c++ server.

Do the reasons for the JDK change to ORB.init() apply in our use case? There's only one application/context and ORB vendor implementation running in the jvm in production. Do you think approach #1 might be a reasonably safe workaround without the risk of hidden interop issues?

I can't tell from this thread if you have tried with JDK 9 or not (you've mentioned 7u55 a few times).

I ask because in JDK 9 then the java.corba module is not resolved by default. If your application starts there then it suggests to me that Visibroker may be carrying its own copy of the org.omg.** (and RMI-IIOP) classes, in which case the JDK ORB (even singleton ORB) is not in the picture. Or maybe you've got past this and your JNLP contains:
  <j2se version="9+"" java-vm-args="--add-modules=java.corba">

which is the equivalent to the --add-modules command line option.

Another comment is that if there is code calling the no-arg ORB.init and blinding casting the return to com.inprise.vbroker.orb.ORBSingleton then it will never work in the scenario where the system-wide singleton ORB has been initialized by before Visibroker is used. I completely agree that it would be unusual to mix different ORB implementations in the same VM but the API has always allowed for that.

On approach #1 then one thing to be aware of is that the application class loader is not an instance of URLClassLoader in JDK 9. That is an implementation change that is known to trip up code that has been hacking into it.

-Alan

Reply via email to