11 Replies Latest reply: Sep 2, 2003 5:10 PM by Ricardo Temporal RSS

    Chunk overflow error

    eileen407 Newbie

      I'm trying to return a large vector of objects from my session bean to remote client. I'm using rmi/iiop. Here's the error I'm running into:

      CORBA MARSHAL 1398079699 Maybe; nested exception is:
      org.omg.CORBA.MARSHAL: Unable to read value from underlying bridge : Unable to read value from underlying bridge : Chunk overflow at offset 1076 vmcid: SUN minor code: 211 completed: Maybe

      Does anyone know what this is about? I've tried increasing jacorb.outbuf_size and jacorb.maxManagedBufSize in jacorb.properties without success.

      Any hints appreciated!

        • 1. Re: Chunk overflow error
          eileen407 Newbie

          Hi Francisco,

          Thanks for all your help! Unfortunately, I'm already doing all the things you've suggested, i.e. using PortableRemoteObject.narrow(), the correct classpath, same command line options, security policy set to AllPermissions, etc. I've tried the option using rmi generated stubs + sun orb fix, but jacOrb doesn't look like it's picking up the stubs. I've also removed all stubs from the classpath. Both ways, I'm still getting the same NullPointerException. Are there any flags I can add to get more debugging information?

          My code looks like this:
          SesHome sesHome =
          (SesHome) PortableRemoteObject.narrow
          (context.lookup("SesHome"), SesHome.class);
          ses = sesHome.create();

          The NullPointerException is coming from the create().

          Here's my commandline:
          CLASSPATH=${JAS_HOME}/classes:${JBOSS_JARS}/jacorb.jar:${JBOSS_JARS}/jboss-client.jar:${JBOSS_JARS}/jbo
          ss-common-client.jar:${JBOSS_JARS}/jboss-iiop-client.jar:${JBOSS_JARS}/jboss-j2ee.jar:${JBOSS_JARS}/log
          4j.jar:${JAS_HOME}/jars/xerces.jar

          NAMING_PROVIDER=corbaloc::lifeboat:3528/JBoss/Naming/root
          JNDI_CLASS=com.sun.jndi.cosnaming.CNCtxFactory
          PROPS="-Djava.security.manager -Djava.security.policy=${JAS_HOME}/config/client.policy -Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB -Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton -Djacorb.verbosity=1 -Djacorb.suppress_no_props_warning=on"
          JAVA="$JAVA_HOME/bin/java -Xmx100m -Djava.naming.factory.initial=${JNDI_CLASS} -Djava.naming.provider.url=${NAMING_PROVIDER} ${PROPS}"

          • 2. Create Durable Subscription at runtime when clientID is in u
            Ricardo Temporal Newbie

            Hello,

            we have an application where each user has ists own queue and each user-group has its own topic. when i put a user into a group i need to add a durable subscription for the user on the topic associated with that group. the -service.xml file of the topic allows every member of the group to create a durable subscription.

            i add a member to a group by getting the DynamicStateManager mbean and calling addUserToRole() on it. afterwards i call saveConfig().
            i actually create the subscription for "newMember" on "groupTopic" using the following code:

            Context ctx = null;
            TopicConnection topicConnection = null;
            TopicSession topicSession = null;
            TopicSubscriber subscriber = null;
            try {
             Hashtable env = new Hashtable();
             env.put(Context.PROVIDER_URL, providerURL);
             env.put(Context.SECURITY_PRINCIPAL, principal);
             env.put(Context.SECURITY_CREDENTIALS, credentials);
             ctx = new InitialContext(env);
            
             TopicConnectionFactory factory = (TopicConnectionFactory) ctx.lookup(connectionFactory);
             topicConnection = factory.createTopicConnection(principal, credentials);
             topicConnection.setClientID(newMember);
            
             topicSession = topicConnection.createTopicSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE);
            
             Topic messageTopic = (Topic)ctx.lookup(groupTopic);
             subscriber = topicSession.createDurableSubscriber(messageTopic, groupTopic, null, true);
            
             // getStateManager() returns the statemanager mbean
             getStateManager().saveConfig();
            }
            catch (Exception e) {
             e.printStackTrace();
            }
            finally {
             if (subscriber != null)
             subscriber.close();
             if (topicSession != null)
             try { topicSession.close(); }
             catch (JMSException e) {}
             if (topicConnection != null)
             try { topicConnection.close(); }
             catch (JMSException e) {}
             if (ctx != null)
             try { ctx.close(); }
             catch (Exception e) {}
            }


            the code above works fine if the clientId (newMember) is not in use. so i check this first and if it is in use i only use the statemanager procedure above - giving the user the permission to create its durable subscription when it logs in the next time.
            but when he tries to do the following exception is thrown:

            javax.jms.JMSSecurityException: Connection not authorized to do durable subscription on topic: g7000
            at org.jboss.mq.security.ServerSecurityInterceptor.subscribe(ServerSecurityInterceptor.java:142)
            at org.jboss.mq.server.TracingInterceptor.subscribe(TracingInterceptor.java:816)
            at org.jboss.mq.server.JMSServerInvoker.subscribe(JMSServerInvoker.java:297)
            at org.jboss.mq.il.uil2.ServerSocketManagerHandler.handleMsg(ServerSocketManagerHandler.java:160)
            at org.jboss.mq.il.uil2.SocketManager$ReadTask.handleMsg(SocketManager.java:355)
            at org.jboss.mq.il.uil2.msgs.BaseMsg.run(BaseMsg.java:377)
            at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:732)
            at java.lang.Thread.run(Thread.java:536)

            what am i missing here. do i have to restart the topic (which i cannot do because there may be users logged in using it)? are there any sideeffects in the statemanager i do not know? is there another, more preferable method to create a durable subscription? i use jboss 3.2.3.
            any idea would be appreciated.

            ingo

            • 3. Re: Chunk overflow error
              Francisco Reverbel Novice

              Hi Francisco,

              Thanks for all your help! Unfortunately, I'm already doing all the things you've suggested, i.e. using PortableRemoteObject.narrow(), the correct classpath, same command line options, security policy set to AllPermissions, etc. I've tried the option using rmi generated stubs + sun orb fix, but jacOrb doesn't look like it's picking up the stubs. I've also removed all stubs from the classpath. Both ways, I'm still getting the same NullPointerException. Are there any flags I can add to get more debugging information?

              My code looks like this:
              SesHome sesHome =
              (SesHome) PortableRemoteObject.narrow
              (context.lookup("SesHome"), SesHome.class);
              ses = sesHome.create();

              The NullPointerException is coming from the create().

              Here's my commandline:
              CLASSPATH=${JAS_HOME}/classes:${JBOSS_JARS}/jacorb.jar:${JBOSS_JARS}/jboss-client.jar:${JBOSS_JARS}/jbo
              ss-common-client.jar:${JBOSS_JARS}/jboss-iiop-client.jar:${JBOSS_JARS}/jboss-j2ee.jar:${JBOSS_JARS}/log
              4j.jar:${JAS_HOME}/jars/xerces.jar

              NAMING_PROVIDER=corbaloc::lifeboat:3528/JBoss/Naming/root
              JNDI_CLASS=com.sun.jndi.cosnaming.CNCtxFactory
              PROPS="-Djava.security.manager -Djava.security.policy=${JAS_HOME}/config/client.policy -Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB -Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton -Djacorb.verbosity=1 -Djacorb.suppress_no_props_warning=on"
              JAVA="$JAVA_HOME/bin/java -Xmx100m -Djava.naming.factory.initial=${JNDI_CLASS} -Djava.naming.provider.url=${NAMING_PROVIDER} ${PROPS}"

              • 4. Re: Chunk overflow error
                Francisco Reverbel Novice

                Where did you get the exception, at the server side or at the client side? Which ORB are you using at the client side?

                Francisco

                • 5. Re: Chunk overflow error
                  eileen407 Newbie

                  The exception is on the client side. I am using the Sun orb. I tried using JacOrb on the client side, but when I did the look up, it would always retrieve an object of type org.jacorb.orb.Reference. With the Sun orb, every works fine except for this MarshalException

                  • 6. Re: Chunk overflow error
                    eileen407 Newbie

                    I just noticed that JBoss reports this warning when I start up:

                    WARNING: no properties file found! This warning can be ignored
                    for applets. A file file called "jacorb.properties" or
                    ".jacorb_properties" should be present in the classpath,

                    but when I put the properties file in my home directory, the iiop service is unable to startup because of an ArrayOutOfBounds error.

                    • 7. Re: Chunk overflow error
                      Francisco Reverbel Novice

                      This message does not show up anymore, you are probably using an older version of JBoss. Switch to 3.2.1 or 3.2.2RC3.

                      Francisco

                      • 8. Re: Chunk overflow error
                        eileen407 Newbie

                        Hi Francisco,

                        Thanks for your help.

                        I'm using JBoss 3.2.2RC3, and I never saw the ClassCastExceptions that you descibe with the Sun orb. With the Sun orb, the client is able to cast the results of the client call to a Vector, but the size of the Vector is always zero, and I get this MarshalException. What does the "Chunk overflow" refer to?

                        I'm tried jacOrb on the client side again. I removed all stubs from the client classpath, and gave the client AllPermission. I copied the setup from one of your previous postings.

                        NAMING_PROVIDER=corbaloc::lifeboat:3528/JBoss/Naming/root
                        JNDI_CLASS=com.sun.jndi.cosnaming.CNCtxFactory
                        PROPS="-Djava.security.manager"
                        PROPS="${PROPS} -Djava.security.policy=${HOME}/config/client.policy"
                        PROPS="${PROPS} -Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB"
                        PROPS="${PROPS} -Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton"
                        PROPS="${PROPS} -Djacorb.verbosity=1"
                        PROPS="${PROPS} -Djacorb.suppress_no_props_warning=on"
                        PROPS="${PROPS} -Djacorb.hashtable_class=java.util.Hashtable"
                        PROPS="${PROPS} -Djacorb.security.ssl.client.required_options=0"
                        PROPS="${PROPS} -Djacorb.security.ssl.client.supported_options=0"

                        Here are the results:
                        [ Connected to 10.5.8.96:3528 from local port 63038 ]
                        looking up the Ses home
                        obj class : class org.jacorb.orb.Reference
                        SesHome class : interface foo.SesHome
                        Is obj assignable to SesHome : false
                        Exception in thread "main" java.rmi.RemoteException: Failure creating bean java.lang.NullPointerException

                        The client isn't dynamically downloading the stubs.

                        • 9. Re: Chunk overflow error
                          Francisco Reverbel Novice

                          The code I have pasted in my previous message contains superfluous lines. This is all you need in class FixSunDelegateBug:

                          public class FixSunDelegateBug
                          extends com.sun.corba.se.internal.iiop.ShutdownUtilDelegate {
                          public boolean isLocal(javax.rmi.CORBA.Stub stub)
                          throws java.rmi.RemoteException {
                          try {
                          org.omg.CORBA.portable.Delegate delegate = stub._get_delegate();
                          return delegate.is_local(stub);
                          }
                          catch (org.omg.CORBA.SystemException e) {
                          throw javax.rmi.CORBA.Util.mapSystemException(e);
                          }
                          }
                          }

                          This class simply extends Sun's implementation (ShutdownUtilDelegate)
                          and overrides isLocal() to do the right thing. Use it with JDK 1.4
                          ("-Djavax.rmi.CORBA.UtilClass=FixSunDelegateBug") to circumvent the isLocal() bug.

                          Francisco

                          • 10. Re: Chunk overflow error
                            Francisco Reverbel Novice

                            > I'm using JBoss 3.2.2RC3, and I never saw the
                            > ClassCastExceptions that you descibe with the Sun
                            > orb.

                            That is correct, you shouldn't see it with Sun's ORB. I would expect you to see a ClassCastException within an isLocal() call at the client side under the following conditions:
                            1) You use Sun's JDK 1.4.x, but you don't use the Sun's ORB. Instead, you specify another ORB, such as JacORB, by saying something like "-Dorg.omg.CORBA.ORBClass=..".
                            2) You use RMI/IIOP stubs generated with "rmic -iiop".

                            > With the Sun orb, the client is able to cast
                            > the results of the client call to a Vector, but the
                            > size of the Vector is always zero, and I get this
                            > MarshalException. What does the "Chunk overflow"
                            > refer to?

                            IIOP breaks valuetypes into pieces called "chunks".

                            > I'm tried jacOrb on the client side again.
                            > ... [snip]
                            > Here are the results:
                            > [ Connected to 10.5.8.96:3528 from local port 63038
                            > ]
                            > looking up the Ses home
                            > obj class : class org.jacorb.orb.Reference
                            > SesHome class : interface foo.SesHome
                            > Is obj assignable to SesHome : false

                            So far so good.

                            > Exception in thread "main" java.rmi.RemoteException:
                            > Failure creating bean java.lang.NullPointerException

                            Are you trying to assign obj to SesHome by any chance? You should use PortableRemoteObject.narrow, as indicated below:

                            FooHome home = (FooHome)PortableRemoteObject.narrow(obj, FooHome.class);

                            > The client isn't dynamically downloading the stubs.

                            The call to PortableRemoteObject..narrow should cause a stub to be downloaded. Make sure you have the JBoss client jars in the client classpath, as well as the jacorb.jar file included in the JBoss distro.

                            To start a client that downloads IIOP stubs from JBoss, use a command line like this:

                            java -Djava.security.manager -Djava.security.policy=./client.policy -Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB -Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton -classpath .:$JBOSS_HOME/client/jacorb.jar:$JBOSS_HOME/client/jboss-client.jar:$JBOSS_HOME/client/jboss-common-client.jar:$JBOSS_HOME/client/jboss-iiop-client.jar:$JBOSS_HOME/client/jboss-j2ee.jar YourClient

                            To start a client that runs on JDK 1.4 and uses rmic-generated IIOP stubs (instead of downloading the stubs from JBoss), use a command line like this:

                            java -Djavax.rmi.CORBA.UtilClass=FixSunDelegateBug -Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB -Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton -classpath .:$JBOSS_HOME/client/jacorb.jar:$JBOSS_HOME/client/jboss-client.jar:$JBOSS_HOME/client/jboss-common-client.jar:$JBOSS_HOME/client/jboss-iiop-client.jar:$JBOSS_HOME/client/jboss-j2ee.jar YourClient

                            Good luck!

                            Francisco

                            • 11. Re: bug in JacOrb?
                              eileen407 Newbie

                              I have jacOrb successfully running on the client side, but I'm still getting a marshalException when returning my vector of objects. It's now complaining of an "unknown value tag" (see below). I believe there's probably a bug in the way jacOrb is serializing this Vector. I would like to try Sun's orb in jboss to test this theory. Does anyone know how this would be set up in iiop-service.xml?

                              Thanks.

                              java.rmi.MarshalException: CORBA MARSHAL 0 No;
                              nested exception is:
                              org.omg.CORBA.MARSHAL: unknown value tag: 83efa432 vmcid: 0x0 minor code: 0
                              completed: No
                              java.rmi.MarshalException: CORBA MARSHAL 0 No; nested exception is:
                              org.omg.CORBA.MARSHAL: unknown value tag: 83efa432 vmcid: 0x0 minor code: 0
                              completed: No
                              at com.sun.corba.se.internal.iiop.ShutdownUtilDelegate.mapSystemException(Shu
                              tdownUtilDelegate.java:97)
                              at javax.rmi.CORBA.Util.mapSystemException(Util.java:65)
                              at org.jboss.proxy.ejb.DynamicIIOPStub.invoke(DynamicIIOPStub.java:138)
                              at _Foo_Stub.findLargeFoos(Unknown Source)
                              at driver.doLargeFoos(FooAgent.java:168)
                              at driver.FooAgent.run(FooAgent.java:128)
                              Caused by: org.omg.CORBA.MARSHAL: unknown value tag: 83efa432 vmcid: 0x0 minor code
                              : 0 completed: No
                              at org.jacorb.orb.CDRInputStream.read_value(CDRInputStream.java:1978)
                              at com.sun.corba.se.internal.io.IIOPInputStream.inputObjectField(IIOPInputStr
                              eam.java:1577)
                              at com.sun.corba.se.internal.io.IIOPInputStream.inputClassFields(IIOPInputStr
                              eam.java:1796)
                              at com.sun.corba.se.internal.io.IIOPInputStream.inputObject(IIOPInputStream.j
                              ava:913)
                              at com.sun.corba.se.internal.io.IIOPInputStream.simpleReadObject(IIOPInputStr
                              eam.java:261)
                              at com.sun.corba.se.internal.io.ValueHandlerImpl.readValueInternal(ValueHandl
                              erImpl.java:247)
                              at com.sun.corba.se.internal.io.ValueHandlerImpl.readValue(ValueHandlerImpl.j
                              ava:209)
                              at org.jacorb.util.ValueHandler.readValue(ValueHandler.java:25)
                              at org.jacorb.orb.CDRInputStream.read_untyped_value(CDRInputStream.java:2186)
                              at org.jacorb.orb.CDRInputStream.read_typed_value(CDRInputStream.java:2219)
                              at org.jacorb.orb.CDRInputStream.read_value(CDRInputStream.java:1870)
                              at org.jacorb.orb.Any.read_value(Any.java:804)