glassfish icon indicating copy to clipboard operation
glassfish copied to clipboard

Remote clients cannot discover glassfish 5.1 EJBs due to spurious java.io.NotSerializableException

Open Blavo opened this issue 5 years ago • 20 comments

Environment Details

Glassfish 5.1.0 (default-private) Java version "1.8.0_161" Mac OS Catalina 10.15.2 Java DB

Problem Description

Remote clients cannot discover glassfish EJBs because they cannot list the 'java:global' naming context due to a spurious java.io.NotSerializableException.

What fails is the naming context list() operation. This is the facility used to discover remotely-invocable services, such as EJBs, on a remote server. These services are listed under a well-known context ('java:global'). In my case I am looking for remotely-invocable EJBs on a remote server. The remote (Glassfish) server binds these under a sub-context of java:global where the sub context is remote-server-dependent and generally unknown to the caller. So I have to list the java:global context to discover that sub-context. (The sub-context is usually the deployment name of the application containing the EJBs. Multiple such applications would result in multiple sub-contexts of 'java:global'.)

My attempt to list the java:global context gives the same java.io.OptionalDataException described in #17220 or a more specific java.io.NotSerializableException naming class org.glassfish.kernel.javaee.MEJBNamingObjectProxy.

The call signature for list() is 'NamingEnumeration<NameClassPair> list(String name) throws NamingException'. All elements of the signature, recursively, are serializable. So a correct response to the list() call is incapable of giving a CORBA error due to serialisation problems. So definitely something wrong with the implementation of list() in glassfish.

Part of the original response to #17220 is that the cause may be that the sub-context being listed contains JNDI entries that aren't serializable. Such entries are allowed (though pointless - see below). In fact it doesn't matter whether the elements of the sub-context are serializable or not because only their class names are being returned in a list() call. Serialisability doesn't come into play until the result of a list() call is used to make a lookup() call to obtain an instance of the bound class type.

The actual cause of the list() problem appears to be that the 'mejb' sub-context of 'java:global' contains a binding to a non-serializable class (org.glassfish.kernel.javaee.MEJBNamingObjectProxy) and that, for reasons best known to the implementor, the implementation of list() in glassfish attempts to lookup() that entry, gets a CORBA exception because the bound class is not serializable, and returns the CORBA error to the caller as the list() result. Two problems here. There is no need to lookup() anything to provide the correct result to the list() call. So the CORBA error is spurious. Second the 'mejb' sub-context shouldn't contain any bound entries that aren't serialisable. My understanding is that 'java:global' is a well-known naming context under which JEE containers list their remotely-invocable services. There is no point listing a non-serialisable entry in the 'java:global' naming context because it can never be remotely invoked because the bound object won't reach the intending invoker because it is not serializable.

I've run my list() locally on the server hosting the target EJBs. The results of such a local list() call aren't put through a Stream so whatever is returned doesn't need to be serializable, and the call returns correctly. From this I can see that the 'java:global' context contains just two entries, both sub-contexts: 'APILoaderServer' (sub context for the server's EJBs) and 'mejb' (presumably for m-beans). This is the result that the remote call above should have obtained.

So the expected behaviour is the return of an enumeration of two NameClassPairs, each referencing (by class name) a sub-context.

The observed behaviour is either a java.io.OptionalDataException or a java.io.NotSerializableException naming class org.glassfish.kernel.javaee.MEJBNamingObjectProxy.

The problem is easily reproducible (in fact unavoidable) when running the list() of 'java:global' against the target server.

Stack trace:

javax.naming.CommunicationException: Communication exception for SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=127.0.0.1, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is java.rmi.MarshalException: CORBA BAD_PARAM 1398079494 Maybe; nested exception is: java.io.NotSerializableException: WARNING: 00100006: Class org.glassfish.kernel.javaee.MEJBNamingObjectProxy is not Serializable] at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:513) at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438) at com.sun.enterprise.naming.impl.SerialContext.list(SerialContext.java:786) at javax.naming.InitialContext.list(InitialContext.java:461) at javax.naming.InitialContext.list(InitialContext.java:461) at q.LoMAppS.LoMAppSRunner.run(LoMAppSRunner.java:292) at q.LoMAppS.LoMAppS.main(LoMAppS.java:574) Caused by: java.rmi.MarshalException: CORBA BAD_PARAM 1398079494 Maybe; nested exception is: java.io.NotSerializableException: WARNING: 00100006: Class org.glassfish.kernel.javaee.MEJBNamingObjectProxy is not Serializable at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.mapSystemException(Util.java:300) at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.wrapException(Util.java:695) at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:257) at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:150) at com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenStubBase.invoke(CodegenStubBase.java:226) at com.sun.enterprise.naming.impl._SerialContextProvider_DynamicStub.lookup(com/sun/enterprise/naming/impl/_SerialContextProvider_DynamicStub.java) at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:478) ... 6 more Caused by: java.io.NotSerializableException: WARNING: 00100006: Class org.glassfish.kernel.javaee.MEJBNamingObjectProxy is not Serializable at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.mapSystemException(Util.java:292) ... 12 more Caused by: org.omg.CORBA.BAD_PARAM: WARNING: 00100006: Class org.glassfish.kernel.javaee.MEJBNamingObjectProxy is not Serializable vmcid: SUN minor code: 6 completed: Maybe at com.sun.proxy.$Proxy187.notSerializable(Unknown Source) at com.sun.corba.ee.impl.misc.ORBUtility.throwNotSerializableForCorba(ORBUtility.java:783) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_abstract_interface(CDROutputStream_1_0.java:556) at com.sun.corba.ee.impl.encoding.CDROutputObject.write_abstract_interface(CDROutputObject.java:523) at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.writeAbstractObject(Util.java:492) at com.sun.corba.ee.impl.io.IIOPOutputStream.writeObjectOverride(IIOPOutputStream.java:177) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344) at java.util.HashMap.internalWriteEntries(HashMap.java:1790) at java.util.HashMap.writeObject(HashMap.java:1363) at sun.reflect.GeneratedMethodAccessor21.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.sun.corba.ee.impl.io.IIOPOutputStream.invokeObjectWriter(IIOPOutputStream.java:647) at com.sun.corba.ee.impl.io.IIOPOutputStream.outputObject(IIOPOutputStream.java:613) at com.sun.corba.ee.impl.io.IIOPOutputStream.simpleWriteObject(IIOPOutputStream.java:197) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValueInternal(ValueHandlerImpl.java:234) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValueWithVersion(ValueHandlerImpl.java:215) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValue(ValueHandlerImpl.java:179) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.callWriteValue(CDROutputStream_1_0.java:711) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.writeRMIIIOPValueType(CDROutputStream_1_0.java:696) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:821) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:834) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:565) at com.sun.corba.ee.impl.encoding.CDROutputObject.write_value(CDROutputObject.java:506) at com.sun.corba.ee.impl.io.IIOPOutputStream.writeObjectField(IIOPOutputStream.java:776) at com.sun.corba.ee.impl.io.IIOPOutputStream.outputClassFields(IIOPOutputStream.java:847) at com.sun.corba.ee.impl.io.IIOPOutputStream.defaultWriteObjectDelegate(IIOPOutputStream.java:246) at com.sun.corba.ee.impl.io.IIOPOutputStream.outputObject(IIOPOutputStream.java:615) at com.sun.corba.ee.impl.io.IIOPOutputStream.simpleWriteObject(IIOPOutputStream.java:197) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValueInternal(ValueHandlerImpl.java:234) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValueWithVersion(ValueHandlerImpl.java:215) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValue(ValueHandlerImpl.java:179) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.callWriteValue(CDROutputStream_1_0.java:711) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.writeRMIIIOPValueType(CDROutputStream_1_0.java:696) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:821) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:834) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_abstract_interface(CDROutputStream_1_0.java:551) at com.sun.corba.ee.impl.encoding.CDROutputObject.write_abstract_interface(CDROutputObject.java:523) at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.writeAbstractObject(Util.java:492) at com.sun.corba.ee.impl.io.IIOPOutputStream.writeObjectOverride(IIOPOutputStream.java:177) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344) at java.util.HashMap.internalWriteEntries(HashMap.java:1790) at java.util.HashMap.writeObject(HashMap.java:1363) at sun.reflect.GeneratedMethodAccessor21.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.sun.corba.ee.impl.io.IIOPOutputStream.invokeObjectWriter(IIOPOutputStream.java:647) at com.sun.corba.ee.impl.io.IIOPOutputStream.outputObject(IIOPOutputStream.java:613) at com.sun.corba.ee.impl.io.IIOPOutputStream.simpleWriteObject(IIOPOutputStream.java:197) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValueInternal(ValueHandlerImpl.java:234) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValueWithVersion(ValueHandlerImpl.java:215) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValue(ValueHandlerImpl.java:179) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.callWriteValue(CDROutputStream_1_0.java:711) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.writeRMIIIOPValueType(CDROutputStream_1_0.java:696) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:821) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:834) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:565) at com.sun.corba.ee.impl.encoding.CDROutputObject.write_value(CDROutputObject.java:506) at com.sun.corba.ee.impl.io.IIOPOutputStream.writeObjectField(IIOPOutputStream.java:776) at com.sun.corba.ee.impl.io.IIOPOutputStream.outputClassFields(IIOPOutputStream.java:847) at com.sun.corba.ee.impl.io.IIOPOutputStream.defaultWriteObjectDelegate(IIOPOutputStream.java:246) at com.sun.corba.ee.impl.io.IIOPOutputStream.outputObject(IIOPOutputStream.java:615) at com.sun.corba.ee.impl.io.IIOPOutputStream.simpleWriteObject(IIOPOutputStream.java:197) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValueInternal(ValueHandlerImpl.java:234) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValueWithVersion(ValueHandlerImpl.java:215) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValue(ValueHandlerImpl.java:179) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.callWriteValue(CDROutputStream_1_0.java:711) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.writeRMIIIOPValueType(CDROutputStream_1_0.java:696) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:821) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:834) at com.sun.corba.ee.impl.encoding.CDROutputObject.write_value(CDROutputObject.java:500) at com.sun.corba.ee.impl.copyobject.ORBStreamObjectCopierImpl.copy(ORBStreamObjectCopierImpl.java:73) at org.glassfish.pfl.dynamic.copyobject.impl.FallbackObjectCopierImpl.copy(FallbackObjectCopierImpl.java:64) at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.copyObject(Util.java:770) at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.copyResult(DynamicMethodMarshallerImpl.java:472) at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:241) ... 10 more

Steps to reproduce

Run the following code against any glassfish server that has EJBs defined (though the error will probably occur without EJBs defined since it occurs in the 'mejb' sub context which is probably present with or without EJBs). While in my case the target server is truly remote the error can be demonstrated running the test code on a local server. The error will occur if the host name and port are specified in the initial context, even if the host name resolves to the local host. (Specifying them appears to force the list() response to go through a Stream (requiring serialisation) rather than via a pipe (which doesn't)).

    System.out.println("Here 1a and listing with no properties");
    Properties props1 = new Properties();
    // props1.put("org.omg.CORBA.ORBInitialHost", "127.0.0.1");  // Putting these forces serialisation
    // props1.put("org.omg.CORBA.ORBInitialPort", "3700");       // Putting these forces serialisation
    InitialContext namingContext1 = null;
    try {
        namingContext1 = new InitialContext(props1);
    } catch (Throwable e) {
        System.out.println("Failed to set up context because of " + globalUtility.getDetails(e));
        System.exit(1);
    }
    NamingEnumeration<NameClassPair> result1 = null;
    try {
        result1 = namingContext1.list("java:global");
        while (result1.hasMore()) {
            NameClassPair entry = result1.next();
            System.out.println("  " + entry.getName() + " bound to " + entry.getClassName());
        }
    } catch (Throwable e) {
        e.printStackTrace();
        System.out.println("Failed to list entries because of " + globalUtility.getDetails(e));
        System.exit(1);
    }

    System.out.println("Here 1b and listing with host and port properties");
    Properties props2 = new Properties();
    props2.put("org.omg.CORBA.ORBInitialHost", "127.0.0.1");    // Enough to force serialisation of result
    props2.put("org.omg.CORBA.ORBInitialPort", "3700");         // Enough to force serialisation of result
    InitialContext namingContext2 = null;
    try {
        namingContext2 = new InitialContext(props2);
    } catch (Throwable e) {
        System.out.println("Failed to set up context because of " + globalUtility.getDetails(e));
        System.exit(1);
    }
    NamingEnumeration<NameClassPair> result2 = null;
    try {
        result2 = namingContext2.list("java:global");
        while (result2.hasMore()) {
            NameClassPair entry = result2.next();
            System.out.println("  " + entry.getName() + " bound to " + entry.getClassName());
        }
    } catch (Throwable e) {
        e.printStackTrace();
        System.out.println("Failed to list entries because of " + globalUtility.getDetails(e));
        System.exit(1);
    }

This results in the output:

Here 1a and listing with no properties APILoaderServer bound to com.sun.enterprise.naming.impl.TransientContext mejb bound to com.sun.enterprise.naming.impl.TransientContext Here 1b and listing with host and port properties Failed to list entries because of MarshalException with message CORBA BAD_PARAM 1398079494 Maybe; nested exception is: java.io.NotSerializableException: WARNING: 00100006: Class org.glassfish.kernel.javaee.MEJBNamingObjectProxy is not Serializable

and the stack trace provided.

The first list() call demonstrates that the result should be an enumeration of two NameClassPair's, each of which references a (serializable) TransientContext.

The second list(), against the same server but with hostname and port specified in the context, gives the serialisation exception (even though the host name resolves to local host). The exception is on an org.glassfish.kernel.javaee.MEJBNamingObjectProxy which, according to the first call, shouldn't even be returned.

My guess is that the code implementing the list() call actually tries to lookup the boundorg.glassfish.kernel.javaee.MEJBNamingObjectProxy for some reason (even though it isn't required to do so to obtain the required result), gets the serialization problem and, instead of catching and dealing with it, returns it as the result of the list() call.

Impact of Issue

I am attempting to develop a new class of performance testing tool. Among other things it is intended to be able to performance test JEE servers by invoking their EJBs directly, largely bypassing the traditional record, generate script, edit script, playback script process becoming hugely more productive in the process. This error blocks progress.

Work arounds

I have developed an ugly work around.

Firstly I have implemented an RMI-invocable service (a remote bean) on the target server that does a local naming context list() and passes back the results. I bind a reference to this service under an agreed fully qualified name. From the calling server I lookup() this service (as opposed to list() ing the containing context) and successfully retrieve an invocable reference to the service. I can then invoke the service which calls list() to list, locally, whatever naming context I pass. Because the listing is being done locally the serialisation problem doesn't occur. The result passes happily over the network back to the caller. With this I can list() 'java:global', discover the sub context that holds the EJBs, and then use the same technique to list() that. Eventually I come down to specific EJB remote interfaces which I can safely lookup(), since they are serializable. The drawback with this as a solution is my customers are unlikely to want to implement this code on their servers.

Blavo avatar Dec 29 '20 02:12 Blavo

@Blavo the issue you are reporting is on GlassFish 4.1.2 which is Oracle GlassFish. This project is for Eclipse GlassFIsh and only develops from GlassFish 5.1 onwards. Can you retry on Eclipse GlassFIsh?

smillidge avatar Feb 10 '21 11:02 smillidge

G’day,

The error was first reported against glassfish 4 but never pursued and the issue was closed.

I strongly suspect the issue is in glassfish 5 but am not in a position to try it. Are you able to run the test code provided in the issue and confirm ?

On 10 Feb 2021, at 22:01, Steve Millidge [email protected] wrote:

@Blavo https://github.com/Blavo the issue you are reporting is on GlassFish 4.1.2 which is Oracle GlassFish. This project is for Eclipse GlassFIsh and only develops from GlassFish 5.1 onwards. Can you retry on Eclipse GlassFIsh?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/eclipse-ee4j/glassfish/issues/23309#issuecomment-776628575, or unsubscribe https://github.com/notifications/unsubscribe-auth/AOKL4EIVQYPCDMPVNNB5UUTS6JRRNANCNFSM4VMWR2HA.

Blavo avatar Feb 10 '21 22:02 Blavo

Presume you mean retry in javaee/glassfish ?

Just out of curiosity issue #17220, which I am effectively re-opening, is in eclipse-ee4j/glassfish but is against glassfish 3 and 4. I opened #23309 in the same repository where I found the #17220.

On 10 Feb 2021, at 22:01, Steve Millidge [email protected] wrote:

@Blavo https://github.com/Blavo the issue you are reporting is on GlassFish 4.1.2 which is Oracle GlassFish. This project is for Eclipse GlassFIsh and only develops from GlassFish 5.1 onwards. Can you retry on Eclipse GlassFIsh?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/eclipse-ee4j/glassfish/issues/23309#issuecomment-776628575, or unsubscribe https://github.com/notifications/unsubscribe-auth/AOKL4EIVQYPCDMPVNNB5UUTS6JRRNANCNFSM4VMWR2HA.

Blavo avatar Feb 10 '21 23:02 Blavo

Assuming you did mean retry in javaee/glassfish that project has been moved into the EE4J initiative, the javaee/glassfish repository has been archived, and I am directed to the corresponding Eclipse repository which is eclipse-444j/glassfish. So the issue is in the right place if not against your minimum version of glassfish. If you are unable to run the test code in glassfish 5 please advise and I will try and find somewhere same to install glassfish 5 that doesn’t upset my project.

On 10 Feb 2021, at 22:01, Steve Millidge <[email protected] mailto:[email protected]> wrote:

@Blavo https://github.com/Blavo the issue you are reporting is on GlassFish 4.1.2 which is Oracle GlassFish. This project is for Eclipse GlassFIsh and only develops from GlassFish 5.1 onwards. Can you retry on Eclipse GlassFIsh?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/eclipse-ee4j/glassfish/issues/23309#issuecomment-776628575, or unsubscribe https://github.com/notifications/unsubscribe-auth/AOKL4EIVQYPCDMPVNNB5UUTS6JRRNANCNFSM4VMWR2HA.

Blavo avatar Feb 11 '21 01:02 Blavo

Personally I'm focussed on GlassFish 6.x where it won't happen as there is no MEJB. It sounds like you are trying to remotely list everything in the JNDI but some things won't be serializable, which I imagine is expected behaviour. Is that what you are trying to do?

smillidge avatar Feb 11 '21 12:02 smillidge

G’day,

I’m developing the next generation of performance testing tool that works by driving servers through their published interfaces. (None of this record and playback nonsense.) The intent is for the tool to discover the public, remotely-accessible, services of a given server and set itself up to invoke them under direction of a performance test plan. For EJB servers the publication of services is split between publishing a list of remotely-invocable service stubs under a well known namespace (java:global) and the server’s codebase (for class definitions). In a given server each application with EJBs lists its remotely-invocable services under a sub-name space of java:global. These names are not predictable externally. So my tool has to: list() java:global to discover the sub name spaces; offer them to the user; have the user make one or more selections; list() the remotely invocable service stubs therein; have the user make one or more selections; and set up to obtain the selected stubs at run time via lookup().

Here is the point. List() returns only the class names of the things bound under the name space being listed. The named classes may or may not be serialisable but the classes aren’t returned by list() - only their names. So it isn’t supposed to matter if there are non-serializable classes bound in the name space. The signature of list() makes it incapable of throwing a CORBA not-serializable exception whatever the contents of the name space being listed. It is only in the last step, where my tool uses lookup() that it exposes itself to the risk of attempting to download an object of a non-serialisable class. But that is my problem and I can deal with that. (In fact, of course, it makes no sense for anyone to bind an object of a non-serialisable class under a name space intended for listing remotely-invocable services because it can’t be remotely invoked other than by a client on the host machine.)

It appears to me that the glassfish implementation of list() is doing a lookup() of the non-serialisable object bound under the MEJB name space and passing the resulting CORBA exception back as the result of the list() call. Presumably the implementor had a reason for doing that. But given that the object bound under MEJB is non-serialisable the implementation must fail on all truly remote list() calls; it also fails on local calls where port and DSN (resolving to localhost) are provided. So the implementation is broken and I’d like a fix.

On 11 Feb 2021, at 23:16, Steve Millidge [email protected] wrote:

Personally I'm focussed on GlassFish 6.x where it won't happen as there is no MEJB. It sounds like you are trying to remotely list everything in the JNDI but some things won't be serializable, which I imagine is expected behaviour. Is that what you are trying to do?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/eclipse-ee4j/glassfish/issues/23309#issuecomment-777410551, or unsubscribe https://github.com/notifications/unsubscribe-auth/AOKL4ENO6X3DOX3JNWRFPZDS6PDAPANCNFSM4VMWR2HA.

Blavo avatar Feb 11 '21 21:02 Blavo

The problem is list on the client side is resulting in a lookup as the JNDI list is checking to see if the named instance is an instanceof Context so it can list the sub-context. This is on your stack trace below. Not sure what we can do about that.

java.io.NotSerializableException: WARNING: 00100006: Class org.glassfish.kernel.javaee.MEJBNamingObjectProxy is not Serializable]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:513)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438)
at com.sun.enterprise.naming.impl.SerialContext.list(SerialContext.java:786)
at javax.naming.InitialContext.list(InitialContext.java:461)
at javax.naming.InitialContext.list(InitialContext.java:461)
at q.LoMAppS.LoMAppSRunner.run(LoMAppSRunner.java:292)

smillidge avatar Feb 13 '21 18:02 smillidge

From the JavaDoc for list() in Context: 'NamingEnumeration https://docs.oracle.com/javase/8/docs/api/javax/naming/NamingEnumeration.html<NameClassPair https://docs.oracle.com/javase/8/docs/api/javax/naming/NameClassPair.html> list(Name https://docs.oracle.com/javase/8/docs/api/javax/naming/Name.html name) throws NamingException https://docs.oracle.com/javase/8/docs/api/javax/naming/NamingException.html Enumerates the names bound in the named context, along with the class names of objects bound to them. The contents of any subcontexts are not included.’

The JavaDoc for list() with a String parameter in Context points to the above as does the JavaDoc for list() with either a String or Name parameter in InitialContext. Note that contents of sub context are not returned.

The MEJBNamingObjectProxy object that is causing the NotSerializableException is bound under java:global/MEJB. If I list() java:global I should get an enumeration of n+1 items, where n is the number of applications that have bound objects under java:global, plus one for MEJB. There is no need for the list() implementation to determine whether those items are instances of Context, and therefore no need to lookup() them, since the implementation is not required to, indeed is prevented from by the JavaDoc description, listing their contents if they are.

From the stack trace I think we can infer that the first list() call is for java:global, the second is for java:global/MEJB, and the lookup() call is for the MEJBNamingObjectProxy bound thereunder. Neither the second or third calls are required to fulfil the contract of list() and should be removed because they can cause spurious NotSerializableException exceptions. So that is one thing we can do.

If it really is necessary for the client to determine whether the items in the list are instanceof Context this can be done in two safe ways. NameClassPair can be expanded to include a flag, determined on the remote side, indicating whether the bound item is an instanceof Context. Alternatively the client, which is necessarily a Java application, can determine this from the class name of the bound object returned in the NameClassParir (by Class.forName() and then instanceof). The client must have Context in its class path to be doing a list() in the first place. If the Class.forName() fails for class not found it is safe to assume the class isn’t an instanceof Context.

Binding the MEJBNamingObjectProxy under a namespace other than java:global is potentially a fourth option but that might not be allowed under the EJB 3.1 specification.

Making MEJBNamingObjectProxy serialisable might be a fifth option. Even if it can’t be used remotely making it serialisable would narrow the scope of the error from any attempt to list() java:global to a specific attempt to use the mejb bean remotely.

On 14 Feb 2021, at 05:40, Steve Millidge [email protected] wrote:

The problem is list on the client side is resulting in a lookup as the JNDI list is checking to see if the named instance is an instanceof Context so it can list the sub-context. This is on your stack trace below. Not sure what we can do about that.

java.io.NotSerializableException: WARNING: 00100006: Class org.glassfish.kernel.javaee.MEJBNamingObjectProxy is not Serializable] at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:513) at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438) at com.sun.enterprise.naming.impl.SerialContext.list(SerialContext.java:786) at javax.naming.InitialContext.list(InitialContext.java:461) at javax.naming.InitialContext.list(InitialContext.java:461) at q.LoMAppS.LoMAppSRunner.run(LoMAppSRunner.java:292) — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/eclipse-ee4j/glassfish/issues/23309#issuecomment-778660063, or unsubscribe https://github.com/notifications/unsubscribe-auth/AOKL4EI6PT34BWGN4PDZN4LS63BRJANCNFSM4VMWR2HA.

Blavo avatar Feb 13 '21 22:02 Blavo

The list() problem is actually wider than MEJBNamingObjectProxy not being serialisable. An error, a class not found error, will be thrown by list() if any of the entries the list() implementation does lookup() on are not in the class path of the client.

As an attempt to bypass the MEJB issue I have included code in my test server to bind the EJB remote stubs under a second name space (Beans), one used only for that purpose and one that therefore does not bind any objects of non-serializable classes. An attempt to list() this name space results in the lookup() of a (remote stub) bound under Beans. The class definition of the remote interface that the stub implements isn’t in the client’s class path and the lookup() fails with a class not found exception causing the list() to fail.

My interpretation is that the current implementation of list() is attempting to list the contents of the target name space recursively and that any remote call will fail if any of the objects bound in the name space are not serialisable or are of classes not in the caller’s class path. Since glassfish is required by the EJB 3.1 specification to bind local interfaces under java:global, and the bound objects for local interfaces are not serializable, any useful remote list() call will fail.

So only options 1 and 2 in the above post are viable fixes.

On 14 Feb 2021, at 05:40, Steve Millidge [email protected] wrote:

The problem is list on the client side is resulting in a lookup as the JNDI list is checking to see if the named instance is an instanceof Context so it can list the sub-context. This is on your stack trace below. Not sure what we can do about that.

java.io.NotSerializableException: WARNING: 00100006: Class org.glassfish.kernel.javaee.MEJBNamingObjectProxy is not Serializable] at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:513) at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438) at com.sun.enterprise.naming.impl.SerialContext.list(SerialContext.java:786) at javax.naming.InitialContext.list(InitialContext.java:461) at javax.naming.InitialContext.list(InitialContext.java:461) at q.LoMAppS.LoMAppSRunner.run(LoMAppSRunner.java:292) — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/eclipse-ee4j/glassfish/issues/23309#issuecomment-778660063, or unsubscribe https://github.com/notifications/unsubscribe-auth/AOKL4EI6PT34BWGN4PDZN4LS63BRJANCNFSM4VMWR2HA.

Blavo avatar Feb 13 '21 22:02 Blavo

And, extrapolating from the previous post, the list() issue will be in glassfish 6 even if MEJB is not.

On 14 Feb 2021, at 05:40, Steve Millidge [email protected] wrote:

The problem is list on the client side is resulting in a lookup as the JNDI list is checking to see if the named instance is an instanceof Context so it can list the sub-context. This is on your stack trace below. Not sure what we can do about that.

java.io.NotSerializableException: WARNING: 00100006: Class org.glassfish.kernel.javaee.MEJBNamingObjectProxy is not Serializable] at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:513) at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438) at com.sun.enterprise.naming.impl.SerialContext.list(SerialContext.java:786) at javax.naming.InitialContext.list(InitialContext.java:461) at javax.naming.InitialContext.list(InitialContext.java:461) at q.LoMAppS.LoMAppSRunner.run(LoMAppSRunner.java:292) — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/eclipse-ee4j/glassfish/issues/23309#issuecomment-778660063, or unsubscribe https://github.com/notifications/unsubscribe-auth/AOKL4EI6PT34BWGN4PDZN4LS63BRJANCNFSM4VMWR2HA.

Blavo avatar Feb 13 '21 22:02 Blavo

If you are minded to make a fix for this, there is another issue that may have the same cause. A local list() of name space “” returns a whole heap of entries:

Info: Listing '' Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx1BeanRemote javax.naming.Reference Info: com.sun.enterprise.container.common.spi.util.InjectionManager com.sun.enterprise.container.common.impl.util.InjectionManagerImpl Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx1BeanRemote__3_x_Internal_RemoteBusinessHome__ javax.naming.Reference Info: q.quango.glassfishErrorBypass.GlassfishListingErrorBypassRemote__3_x_Internal_RemoteBusinessHome__ javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx4BeanRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKBeanRemote__3_x_Internal_RemoteBusinessHome__ javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUUKBeanRemote#q.sampleServers.userEWAS.rmiInterfaces.UserEWASUUKBeanRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUUUBeanRemote__3_x_Internal_RemoteBusinessHome__ javax.naming.Reference Info: SYSTEM com.sun.enterprise.naming.impl.TransientContext Info: java:global com.sun.enterprise.naming.impl.TransientContext Info: concurrent com.sun.enterprise.naming.impl.TransientContext Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx2BeanRemote__3_x_Internal_RemoteBusinessHome javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx2BeanRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUUKBeanRemote__3_x_Internal_RemoteBusinessHome__ javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUUUBeanRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKBeanRemote#q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKBeanRemote javax.naming.Reference Info: ngptt:global com.sun.enterprise.naming.impl.TransientContext Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKBeanRemote javax.naming.Reference Info: jms com.sun.enterprise.naming.impl.TransientContext Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUUUBeanRemote#q.sampleServers.userEWAS.rmiInterfaces.UserEWASUUUBeanRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUUKBeanRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx3BeanRemote__3_x_Internal_RemoteBusinessHome__ javax.naming.Reference Info: CLTv4 org.glassfish.resourcebase.resources.api.ResourceProxy Info: q.quango.glassfishErrorBypass.GlassfishListingErrorBypassRemote#q.quango.glassfishErrorBypass.GlassfishListingErrorBypassRemote javax.naming.Reference Info: q.quango.glassfishErrorBypass.GlassfishListingErrorBypassRemote javax.naming.Reference Info: jdbc com.sun.enterprise.naming.impl.TransientContext Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx4BeanRemote__3_x_Internal_RemoteBusinessHome__ javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx3BeanRemote#q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx3BeanRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx4BeanRemote#q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx4BeanRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx3BeanRemote javax.naming.Reference Info: ejb com.sun.enterprise.naming.impl.TransientContext Info: UserTransaction com.sun.enterprise.transaction.startup.TransactionLifecycleService$2 Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx1BeanRemote#q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx1BeanRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx2BeanRemote#q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx2BeanRemote javax.naming.Reference

A remote list() of the same name space returns just the entries that bind objects of type javax.naming.Reference

Info: Listing '' Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx1BeanRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx1BeanRemote__3_x_Internal_RemoteBusinessHome__ javax.naming.Reference Info: q.quango.glassfishErrorBypass.GlassfishListingErrorBypassRemote__3_x_Internal_RemoteBusinessHome__ javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx4BeanRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKBeanRemote__3_x_Internal_RemoteBusinessHome__ javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUUKBeanRemote#q.sampleServers.userEWAS.rmiInterfaces.UserEWASUUKBeanRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUUUBeanRemote__3_x_Internal_RemoteBusinessHome__ javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx2BeanRemote__3_x_Internal_RemoteBusinessHome__ javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx2BeanRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUUKBeanRemote__3_x_Internal_RemoteBusinessHome__ javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUUUBeanRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKBeanRemote#q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKBeanRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKBeanRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUUUBeanRemote#q.sampleServers.userEWAS.rmiInterfaces.UserEWASUUUBeanRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUUKBeanRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx3BeanRemote__3_x_Internal_RemoteBusinessHome__ javax.naming.Reference Info: q.quango.glassfishErrorBypass.GlassfishListingErrorBypassRemote#q.quango.glassfishErrorBypass.GlassfishListingErrorBypassRemote javax.naming.Reference Info: q.quango.glassfishErrorBypass.GlassfishListingErrorBypassRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx4BeanRemote__3_x_Internal_RemoteBusinessHome__ javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx3BeanRemote#q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx3BeanRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx4BeanRemote#q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx4BeanRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx3BeanRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx1BeanRemote#q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx1BeanRemote javax.naming.Reference Info: q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx2BeanRemote#q.sampleServers.userEWAS.rmiInterfaces.UserEWASUKKx2BeanRemote javax.naming.Reference

In particular the sub contexts are omitted from the remote list() result. So you can’t remotely navigate the context !

On 14 Feb 2021, at 05:40, Steve Millidge [email protected] wrote:

The problem is list on the client side is resulting in a lookup as the JNDI list is checking to see if the named instance is an instanceof Context so it can list the sub-context. This is on your stack trace below. Not sure what we can do about that.

java.io.NotSerializableException: WARNING: 00100006: Class org.glassfish.kernel.javaee.MEJBNamingObjectProxy is not Serializable] at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:513) at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438) at com.sun.enterprise.naming.impl.SerialContext.list(SerialContext.java:786) at javax.naming.InitialContext.list(InitialContext.java:461) at javax.naming.InitialContext.list(InitialContext.java:461) at q.LoMAppS.LoMAppSRunner.run(LoMAppSRunner.java:292) — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/eclipse-ee4j/glassfish/issues/23309#issuecomment-778660063, or unsubscribe https://github.com/notifications/unsubscribe-auth/AOKL4EI6PT34BWGN4PDZN4LS63BRJANCNFSM4VMWR2HA.

Blavo avatar Feb 16 '21 01:02 Blavo

Confirmed that this issue is in glassfish 5.1 non-embedded.

Blavo avatar Feb 26 '21 07:02 Blavo

I’ve confirmed this occurs in glassfish 5.1 non embedded.

If you aren’t minded to work on this could you add a comment so others know its not being worked on.

Blavo avatar Feb 26 '21 07:02 Blavo

I'm not going to work on it. GlassFish is an open source project so I can't speak for others.

smillidge avatar Feb 26 '21 09:02 smillidge

I’ve put up glassfish 6 to determine whether the error occurs there but either my @Startup or my @PostConstruct code, where the test is performed, is being ignored. Is there a change here between GF 5 and GF 6.

On 26 Feb 2021, at 20:20, Steve Millidge @.***> wrote:

I'm not going to work on it. GlassFish is an open source project so I can't speak for others.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/eclipse-ee4j/glassfish/issues/23309#issuecomment-786519645, or unsubscribe https://github.com/notifications/unsubscribe-auth/AOKL4EJYGRF2UL2OY5AZ7LLTA5RVXANCNFSM4VMWR2HA.

Blavo avatar Mar 18 '21 22:03 Blavo

GlassFish 6 is Jakarta EE 9 so all Java EE apis have moved to the jakarta namespace.

smillidge avatar Mar 19 '21 09:03 smillidge

Fine. But what does that mean in terms of getting my @PostConstruct or @Startup code to execute ?

On 19 Mar 2021, at 20:20, Steve Millidge @.***> wrote:

GlassFish 6 is Jakarta EE 9 so all Java EE apis have moved to the jakarta namespace.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/eclipse-ee4j/glassfish/issues/23309#issuecomment-802679870, or unsubscribe https://github.com/notifications/unsubscribe-auth/AOKL4ENECEUSCQUMG7U4MZ3TEMJM5ANCNFSM4VMWR2HA.

Blavo avatar Mar 19 '21 10:03 Blavo

You need to move all your application code to the jakarta namespace.

smillidge avatar Mar 19 '21 16:03 smillidge

This issue has been marked as inactive and old and will be closed in 7 days if there is no further activity. If you want the issue to remain open please add a comment

github-actions[bot] avatar Mar 20 '22 01:03 github-actions[bot]

Please leave the issue open. I have confirmed that it occurs in glassfish 6.

The glassfish 6 stack trace:

Failed to list context because of MarshalException with message CORBA BAD_PARAM 1398079494 Maybe; nested exception is: java.lang.NullPointerException java.io.NotSerializableException: ----------BEGIN server-side stack trace---------- org.omg.CORBA.BAD_PARAM: WARNING: 00100006: Class org.glassfish.kernel.javaee.MEJBNamingObjectProxy is not Serializable vmcid: SUN minor code: 6 completed: Maybe at q.randdRMITestClient.RandDRMITestClient.main(RandDRMITestClient.java:129) at com.sun.proxy.$Proxy188.notSerializable(Unknown Source) at com.sun.corba.ee.impl.misc.ORBUtility.throwNotSerializableForCorba(ORBUtility.java:774) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_abstract_interface(CDROutputStream_1_0.java:529) at com.sun.corba.ee.impl.encoding.CDROutputObject.write_abstract_interface(CDROutputObject.java:502) at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.writeAbstractObject(Util.java:422) at com.sun.corba.ee.impl.io.IIOPOutputStream.writeObjectOverride(IIOPOutputStream.java:139) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344) at java.util.HashMap.internalWriteEntries(HashMap.java:1790) at java.util.HashMap.writeObject(HashMap.java:1363) at com.sun.corba.ee.impl.io.IIOPOutputStream.invokeObjectWriter(IIOPOutputStream.java:619) at com.sun.corba.ee.impl.io.IIOPOutputStream.outputObject(IIOPOutputStream.java:586) at com.sun.corba.ee.impl.io.IIOPOutputStream.simpleWriteObject(IIOPOutputStream.java:161) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValueInternal(ValueHandlerImpl.java:210) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValueWithVersion(ValueHandlerImpl.java:191) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValue(ValueHandlerImpl.java:151) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.callWriteValue(CDROutputStream_1_0.java:684) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.writeRMIIIOPValueType(CDROutputStream_1_0.java:669) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:794) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:807) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:538) at com.sun.corba.ee.impl.encoding.CDROutputObject.write_value(CDROutputObject.java:485) at com.sun.corba.ee.impl.io.IIOPOutputStream.writeObjectField(IIOPOutputStream.java:745) at com.sun.corba.ee.impl.io.IIOPOutputStream.outputClassFields(IIOPOutputStream.java:816) at com.sun.corba.ee.impl.io.IIOPOutputStream.defaultWriteObjectDelegate(IIOPOutputStream.java:211) at com.sun.corba.ee.impl.io.IIOPOutputStream.outputObject(IIOPOutputStream.java:588) at com.sun.corba.ee.impl.io.IIOPOutputStream.simpleWriteObject(IIOPOutputStream.java:161) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValueInternal(ValueHandlerImpl.java:210) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValueWithVersion(ValueHandlerImpl.java:191) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValue(ValueHandlerImpl.java:151) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.callWriteValue(CDROutputStream_1_0.java:684) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.writeRMIIIOPValueType(CDROutputStream_1_0.java:669) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:794) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:807) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_abstract_interface(CDROutputStream_1_0.java:524) at com.sun.corba.ee.impl.encoding.CDROutputObject.write_abstract_interface(CDROutputObject.java:502) at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.writeAbstractObject(Util.java:422) at com.sun.corba.ee.impl.io.IIOPOutputStream.writeObjectOverride(IIOPOutputStream.java:139) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344) at java.util.HashMap.internalWriteEntries(HashMap.java:1790) at java.util.HashMap.writeObject(HashMap.java:1363) at com.sun.corba.ee.impl.io.IIOPOutputStream.invokeObjectWriter(IIOPOutputStream.java:619) at com.sun.corba.ee.impl.io.IIOPOutputStream.outputObject(IIOPOutputStream.java:586) at com.sun.corba.ee.impl.io.IIOPOutputStream.simpleWriteObject(IIOPOutputStream.java:161) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValueInternal(ValueHandlerImpl.java:210) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValueWithVersion(ValueHandlerImpl.java:191) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValue(ValueHandlerImpl.java:151) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.callWriteValue(CDROutputStream_1_0.java:684) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.writeRMIIIOPValueType(CDROutputStream_1_0.java:669) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:794) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:807) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:538) at com.sun.corba.ee.impl.encoding.CDROutputObject.write_value(CDROutputObject.java:485) at com.sun.corba.ee.impl.io.IIOPOutputStream.writeObjectField(IIOPOutputStream.java:745) at com.sun.corba.ee.impl.io.IIOPOutputStream.outputClassFields(IIOPOutputStream.java:816) at com.sun.corba.ee.impl.io.IIOPOutputStream.defaultWriteObjectDelegate(IIOPOutputStream.java:211) at com.sun.corba.ee.impl.io.IIOPOutputStream.outputObject(IIOPOutputStream.java:588) at com.sun.corba.ee.impl.io.IIOPOutputStream.simpleWriteObject(IIOPOutputStream.java:161) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValueInternal(ValueHandlerImpl.java:210) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValueWithVersion(ValueHandlerImpl.java:191) at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValue(ValueHandlerImpl.java:151) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.callWriteValue(CDROutputStream_1_0.java:684) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.writeRMIIIOPValueType(CDROutputStream_1_0.java:669) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:794) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:807) at com.sun.corba.ee.impl.encoding.CDROutputObject.write_value(CDROutputObject.java:479) at com.sun.corba.ee.impl.corba.TCUtility.marshalIn(TCUtility.java:129) at com.sun.corba.ee.impl.corba.AnyImpl.write_value(AnyImpl.java:602) at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_any(CDROutputStream_1_0.java:462) at com.sun.corba.ee.impl.encoding.CDROutputObject.write_any(CDROutputObject.java:447) at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.writeAny(Util.java:295) at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl$10.write(DynamicMethodMarshallerImpl.java:285) at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.writeResult(DynamicMethodMarshallerImpl.java:467) at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:156) at com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatchToServant(ServerRequestDispatcherImpl.java:501) at com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatch(ServerRequestDispatcherImpl.java:172) at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequestRequest(MessageMediatorImpl.java:1529) at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequest(MessageMediatorImpl.java:1405) at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleInput(MessageMediatorImpl.java:910) at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:192) at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequest(MessageMediatorImpl.java:674) at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.dispatch(MessageMediatorImpl.java:476) at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.doWork(MessageMediatorImpl.java:2202) at com.sun.corba.ee.impl.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:476) at com.sun.corba.ee.impl.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:519)

Blavo avatar Mar 20 '22 01:03 Blavo