1 Reply Latest reply on Nov 12, 2012 8:03 AM by felipenova

    ejb3 client with spring and maven, java.io.StreamCorruptedException: invalid stream header

    alesky78

      Hi guys

       

      i'm try to create a simple client application that is able to call ejb3 deployed in jboss with spring 3 and maven

       

      before to start i create a simple ejb following the comunity documentatio that describe step by step as implement one ejb and create a stand alone client that call it using the jboss-client.jar, it works correctly

       

      after that i took ( the bad decision ) to create a client using spring 3 and maven as i do for my other project in production

      but i get an exception and until now in not able this figure out the reason

       

      before to all i describe my develop environment

       

       

      Jboss AS:  jboss-as-7.1.1.Final

       

      dependences used fo the generation of the client has advised in the jboss distribution (exaclty jboss-as-7.1.1.Final\bin\client\readme.txt file)

       

      <spring-version>3.0.0.RELEASE</spring-version>

      <jboss-version>7.1.1.FINAL</jboss-version>

       

       

      after the start of the application i had a Class not found exception so i imported also this artifact   jboss:jnp-client (and tested the client with all the possibles version)

      <jboss-jnp-client-version>4.2.2.GA</jboss-jnp-client-version>

      <!-- jboss-jnp-client-version>4.0.2</jboss-jnp-client-version-->

      <!--jboss-jnp-client-version>3.2.1</jboss-jnp-client-version -->

       

       

       

      <dependency>

                                    <groupId>org.springframework</groupId>

                                    <artifactId>spring-context</artifactId>

                                    <version>${spring-version}</version>

                          </dependency>

                          <dependency>

                                    <groupId>org.springframework</groupId>

                                    <artifactId>spring-beans</artifactId>

                                    <version>${spring-version}</version>

                          </dependency>

                          <dependency>

                                    <groupId>org.springframework</groupId>

                                    <artifactId>spring-aop</artifactId>

                                    <version>${spring-version}</version>

                          </dependency>

                          <dependency>

                                    <groupId>org.jboss.as</groupId>

                                    <artifactId>jboss-as-ejb-client-bom</artifactId>

                                    <version>${jboss-version}</version>

                                    <type>pom</type>

                          </dependency>

                          <dependency>

                                    <groupId>jboss</groupId>

                                    <artifactId>jnp-client</artifactId>

                                    <version>${jboss-jnp-client-version}</version>

                          </dependency>

       

       

      the application is extreamely easy, i'm just try to look up of the ejb at the start of the application (that all!!!!)

       

      public static void main(String[] args){

       

                          ApplicationContext context = new ClassPathXmlApplicationContext("ejb-client-context.xml");

                          Context contex;

                }

       

      and this is my spring configuration file

       

      <bean id="ejbStateles"

                          class="org.springframework.ejb.access.LocalStatelessSessionProxyFactoryBean">

                          <property name="jndiName" value="ejb/MyEjbStateless" />

                          <property name="businessInterface" value="it.spaghettisource.MyEjbRemote" />

                          <property name="lookupHomeOnStartup" value="true" />

                          <property name="cacheHome" value="false" />

                          <property name="jndiEnvironment">

                                    <props>

                                              <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>

                                              <prop key="java.naming.factory.url.pkgs">org.jboss.naming</prop>

                                              <prop key="java.naming.provider.url">jnp://alexpc:4447</prop>

                                    </props>

                          </property>

                </bean>

       

       

      but i get this exception

       

      27-apr-2012 17.55.27 org.springframework.context.support.AbstractApplicationContext prepareRefresh

      INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@3f7fa65e: startup date [Fri Apr 27 17:55:27 CEST 2012]; root of context hierarchy

      27-apr-2012 17.55.27 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions

      INFO: Loading XML bean definitions from class path resource [ejb-client-context.xml]

      27-apr-2012 17.55.27 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons

      INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1f25fefa: defining beans [ejbStateles]; root of factory hierarchy

      27-apr-2012 17.55.32 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons

      INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1f25fefa: defining beans [ejbStateles]; root of factory hierarchy

      Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ejbStateles' defined in class path resource [ejb-client-context.xml]: Invocation of init method failed; nested exception is javax.naming.CommunicationException: Could not obtain connection to any of these urls: alexpc:4447 and discovery failed with error: javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out] [Root exception is javax.naming.CommunicationException: Failed to retrieve stub from server alexpc:4447 [Root exception is java.io.StreamCorruptedException: invalid stream header: 00000009]]

                at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1401)

                at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:512)

                at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)

                at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)

                at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)

                at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)

                at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)

                at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:540)

                at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:842)

                at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:416)

                at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)

                at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)

                at it.spaghettisource.MyEjbClientSpring.main(MyEjbClientSpring.java:20)

      Caused by: javax.naming.CommunicationException: Could not obtain connection to any of these urls: alexpc:4447 and discovery failed with error: javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out] [Root exception is javax.naming.CommunicationException: Failed to retrieve stub from server alexpc:4447 [Root exception is java.io.StreamCorruptedException: invalid stream header: 00000009]]

                at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1562)

                at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:634)

                at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)

                at javax.naming.InitialContext.lookup(InitialContext.java:392)

                at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:154)

                at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:87)

                at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:152)

                at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:178)

                at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95)

                at org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:105)

                at org.springframework.ejb.access.AbstractSlsbInvokerInterceptor.refreshHome(AbstractSlsbInvokerInterceptor.java:122)

                at org.springframework.ejb.access.AbstractSlsbInvokerInterceptor.afterPropertiesSet(AbstractSlsbInvokerInterceptor.java:109)

                at org.springframework.ejb.access.LocalStatelessSessionProxyFactoryBean.afterPropertiesSet(LocalStatelessSessionProxyFactoryBean.java:86)

                at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1460)

                at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1398)

                ... 12 more

      Caused by: javax.naming.CommunicationException: Failed to retrieve stub from server alexpc:4447 [Root exception is java.io.StreamCorruptedException: invalid stream header: 00000009]

                at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:268)

                at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1533)

                ... 26 more

      Caused by: java.io.StreamCorruptedException: invalid stream header: 00000009

                at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:782)

                at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)

                at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:255)

                ... 27 more

       

       

      in the server instead i found this log message:

       

      17:55:32,506 ERROR [org.jboss.remoting.remote.connection] (Remoting "segrmnlpt027" read-1) JBREM000200: Remote connection failed: java.io.IOException: Connessione in corso interrotta forzatamente dall'host remoto

       

      i traslate fo that one that are not italian

      Connessione in corso interrotta forzatamente dall'host remoto = An existing connection was forcibly closed by remote host

       

       

      look like a reason related to the incorrect importing of dependences but the only one that i have imported alone is

       

               <dependency>

                     <groupId>jboss</groupId>

                     <artifactId>jnp-client</artifactId>

                     <version>${jboss-jnp-client-version}</version>

                </dependency>

      tested wiht all the version that i found in the repository

       

      <jboss-jnp-client-version>4.2.2.GA</jboss-jnp-client-version>

      <jboss-jnp-client-version>4.0.2</jboss-jnp-client-version>

      <jboss-jnp-client-version>3.2.1</jboss-jnp-client-version>

       

       

      is there someone of u that have this issue or that is able to create a client with the correct dependences and lookup the ejb with spring 3?

       

       

      in attack the two lines of code and the configurations files if some one want to try

       

      thank