[EJB 3.0] - Re: Bug: Injected EJB objects instantiated on every MDB call
by ariekenb
I'm quite new to EJB3, but I can verify I see the same behavior in 4.2.2.GA of the @PostCreate method in a stateless session bean being called every time my MDB gets a message and tries to access the session bean. The JMX console also shows CreateCount growing rapidly for the session bean.
Oddly in my setup (running my own code) I was able to get over a thousand session beans created with the standard -Xms128m -Xmx512m options to JBoss without anything failing. I was also monitoring the number of threads created by JBoss's java process and they did not seem to be growing.
As an experiment, I modified the Stateless stanza in ejb3-aop-interceptors.xml to use StrictMaxPool instead of ThreadlocalPool:
Original:
| <domain name="Stateless Bean">
|
| <annotation expr="!class((a)org.jboss.annotation.ejb.PoolClass)">
| @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.ThreadlocalPool.class, maxSize=30, timeout=10000)
| </annotation>
|
My test:
| <domain name="Stateless Bean">
|
| <annotation expr="!class((a)org.jboss.annotation.ejb.PoolClass)">
| @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.StrictMaxPool.class, maxSize=30, timeout=10000)
| </annotation>
|
After doing this I only see 2 instances of my stateless session bean created, even in tests where it's called from multiple different MDBs and directly from clients. It appears StrictMaxPool is much more conservative in ThreadlocalPool.
doktora - Maybe using StrictMaxPool would be an interesting test/workaround in your case?
To the JBoss experts out there - is it a "problem" that ThreadlocalPool appears to create a new instance of a stateless session bean for every call from an MDB, or is this somehow being managed? What exactly is the difference with StrictMaxPool? Will using StrictMaxPool kill performance?
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4141057#4141057
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4141057
18 years
[JBoss Messaging] - Re: Client Connect Fails with
by jhd
I finally have this narrowed to a classpath problem. I know what's causing it but I'm clueless as to how to solve it.
I can successfully run a pure Java queue test example with the following classpath:
| <path id="execution.classpath">
|
| <fileset file="./lib/jboss-messaging-client.jar"/>
| <fileset file="./lib/jboss-remoting.jar"/>
| <fileset file="./lib/jbossall-client.jar"/>
| <fileset file="./lib/thirdPartyTools.jar"/>
| <fileset file="./lib/log4j-1.2.14.jar"/>
| <fileset file="./lib/javassist.jar"/>
| <fileset file="./lib/jboss-aop-jdk50.jar"/>
| <fileset file="./lib/trove.jar"/>
| <fileset file="./lib/client.jar"/>
|
| <pathelement path="./lib"/>
| <pathelement path="../common/output/classes"/>
| <pathelement path="./output/classes"/>
|
| </path>
|
This tells me my server-side config is ok.
Where I am running into trouble is my java client runs as a jvm inside of a .Net application using Jnbridge in a shared memory configuration. Using the shared memory configuration forces me to load at least some jboss classes prepended to the bootclasspath (jbossall-client.jar). Having jbossall-client.jar in the bootclasspath is causing class loading issues with the JMS related libs. Given my client-side deployment constraints with Jnbridge I have no choice but to load at least some Jboss classes (jbossall-client.jar) in the bootclasspath. I've tried many combinations of placing JMS, AOP, remoting, etc. jars ahead of jbossall-client. I've also tried slimming jbossall-client.jar down. Fixing one classpath issue seems to always cause another.
Here is my latest client-side config:
| <jnbridge>
| <dotNetToJavaConfig
| scheme="sharedmem"
| jvm="E:/jdk1.5.0_06/jre/bin/client/jvm.dll"
| jnbcore="../../depends/java/jnbcore.jar"
| bcel="../../depends/java/bcel-5.1-jnbridge.jar"
| classpath="../../depends/java;../../depends/java/jboss-messaging-client.jar;../../depends/java/jboss-remoting.jar;../../depends/java/jbossall-client.jar;../../depends/java/javassist.jar;../../depends/java/jboss-aop-jdk50.jar;../../depends/java/trove.jar;../../depends/java/thirdPartyTools.jar;../../depends/java/hibernate3-twia.jar;../../depends/java/commons-logging.jar;../../depends/java/commons-collections.jar;../../depends/java/common.jar;../../depends/java/tbot-system.jar;../../depends/java/tbot-ejb.jar;../../depends/java/client.jar;../../depends/java/tbot-test.jar;../../depends/java/thirdPartyToolsExt.jar;../../depends/java/commons-validator-1.1.4.jar;../../depends/java/commons-beanutils.jar;../../depends/java/cglib.jar;../../depends/java/log4j-1.2.14.jar"
| jvmOptions.0="-Xbootclasspath/p:../../depends/java/jboss-remoting.jar;../../depends/java/thirdPartyTools.jar;../../depends/java/jboss-aop-jdk50.jar;../../depends/java/trove.jar;../../depends/java/jboss-messaging-client.jar;../../depends/java/javassist.jar;../../depends/java/jbossall-client.jar"
| jvmOptions.1="-Xms128m"
| jvmOptions.2="-Xmx256m"
| jvmOptions.3="-Djava.security.auth.login.config=file:../../depends/java/auth.conf"
| jvmOptions.4="-Dapp.home=../../depends/java"
| jvmOptions.5="-DUMMY"
| jvmOptions.6="-DUMMY"
| jvmOptions.7="-DUMMY"
| jvmOptions.8="-DUMMY"
| jvmOptions.9="-DUMMY"
| />
| </jnbridge>
|
This causes the following stack trace when attempting to create a JMS connection:
| [WARN]@[02 Apr 2008 10:45:50,709] [org.jboss.messaging.util.Version] : Unable to read version info: null
| [ERROR]@[02 Apr 2008 10:45:50,881] [org.jboss.jms.client.JBossConnectionFactory] : Failed to download and/or install client side AOP stack
| java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.NullPointerException
| at org.jboss.aop.AspectXmlLoader.deployXML(AspectXmlLoader.java:892)
| at org.jboss.aop.AspectXmlLoader.deployXML(AspectXmlLoader.java:877)
| at org.jboss.jms.client.container.JmsClientAspectXMLLoader.deployXML(JmsClientAspectXMLLoader.java:93)
| at org.jboss.jms.client.ClientAOPStackLoader.load(ClientAOPStackLoader.java:77)
| at org.jboss.jms.client.JBossConnectionFactory.createConnectionInternal(JBossConnectionFactory.java:192)
| at org.jboss.jms.client.JBossConnectionFactory.createConnection(JBossConnectionFactory.java:87)
| at org.jboss.jms.client.JBossConnectionFactory.createConnection(JBossConnectionFactory.java:82)
| at org.twia.jms.JMSProxy.connectToJMS(JMSProxy.java:453)
| at org.twia.jms.JMSProxy.<init>(JMSProxy.java:70)
| at org.twia.jms.JMSProxy.getInstance(JMSProxy.java:64)
| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:585)
| at com.jnbridge.jnbcore.JNBDispatcher.objectStaticCall(Unknown Source)
| at com.jnbridge.jnbcore.JNBDispatcher.call(Unknown Source)
| at com.jnbridge.jnbcore.server.sharedmem.SharedMemRequestHandler.a(Unknown Source)
| at com.jnbridge.jnbcore.server.sharedmem.SharedMemRequestHandler.handleRequest(Unknown Source)
| Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.NullPointerException
| at org.jboss.aop.ClassAdvisor.rebuildInterceptors(ClassAdvisor.java:979)
| at org.jboss.aop.Advisor.newBindingAdded(Advisor.java:485)
| at org.jboss.aop.AspectManager.updateAdvisorsForAddedBinding(AspectManager.java:1413)
| at org.jboss.aop.AspectManager.addBinding(AspectManager.java:1382)
| at org.jboss.aop.AspectXmlLoader.deployBinding(AspectXmlLoader.java:286)
| at org.jboss.aop.AspectXmlLoader.deployTopElements(AspectXmlLoader.java:1038)
| at org.jboss.aop.AspectXmlLoader.deployXML(AspectXmlLoader.java:886)
| ... 17 more
| Caused by: java.lang.RuntimeException: java.lang.NullPointerException
| at org.jboss.aop.advice.AdviceFactory.create(AdviceFactory.java:72)
| at org.jboss.aop.Advisor.createInterceptorChain(Advisor.java:618)
| at org.jboss.aop.Advisor.pointcutResolved(Advisor.java:888)
| at org.jboss.aop.Advisor.resolveMethodPointcut(Advisor.java:650)
| at org.jboss.aop.ClassAdvisor.createInterceptorChains(ClassAdvisor.java:607)
| at org.jboss.aop.ClassAdvisor.rebuildInterceptors(ClassAdvisor.java:974)
| ... 23 more
| Caused by: java.lang.NullPointerException
| at org.jboss.aop.advice.AspectFactoryWithClassLoaderSupport.loadClass(AspectFactoryWithClassLoaderSupport.java:85)
| at org.jboss.aop.advice.GenericAspectFactory.getClazz(GenericAspectFactory.java:137)
| at org.jboss.aop.advice.GenericAspectFactory.createPerVM(GenericAspectFactory.java:152)
| at org.jboss.aop.AspectManager.createPerVmAspect(AspectManager.java:1746)
| at org.jboss.aop.AspectManager.getPerVMAspect(AspectManager.java:1728)
| at org.jboss.aop.AspectManager.getPerVMAspect(AspectManager.java:1718)
| at org.jboss.aop.advice.PerVmAdvice.generateOptimized(PerVmAdvice.java:55)
| at org.jboss.aop.advice.AdviceFactory.create(AdviceFactory.java:68)
| ... 28 more
| [ERROR]@[02 Apr 2008 10:45:50,897] [org.twia.jms.JMSProxy] : connectToJMS() - Exception occured:
| java.lang.RuntimeException: Failed to download and/or install client side AOP stack
| at org.jboss.jms.client.JBossConnectionFactory.createConnectionInternal(JBossConnectionFactory.java:199)
| at org.jboss.jms.client.JBossConnectionFactory.createConnection(JBossConnectionFactory.java:87)
| at org.jboss.jms.client.JBossConnectionFactory.createConnection(JBossConnectionFactory.java:82)
| at org.twia.jms.JMSProxy.connectToJMS(JMSProxy.java:453)
| at org.twia.jms.JMSProxy.<init>(JMSProxy.java:70)
| at org.twia.jms.JMSProxy.getInstance(JMSProxy.java:64)
| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:585)
| at com.jnbridge.jnbcore.JNBDispatcher.objectStaticCall(Unknown Source)
| at com.jnbridge.jnbcore.JNBDispatcher.call(Unknown Source)
| at com.jnbridge.jnbcore.server.sharedmem.SharedMemRequestHandler.a(Unknown Source)
| at com.jnbridge.jnbcore.server.sharedmem.SharedMemRequestHandler.handleRequest(Unknown Source)
| Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.NullPointerException
| at org.jboss.aop.AspectXmlLoader.deployXML(AspectXmlLoader.java:892)
| at org.jboss.aop.AspectXmlLoader.deployXML(AspectXmlLoader.java:877)
| at org.jboss.jms.client.container.JmsClientAspectXMLLoader.deployXML(JmsClientAspectXMLLoader.java:93)
| at org.jboss.jms.client.ClientAOPStackLoader.load(ClientAOPStackLoader.java:77)
| at org.jboss.jms.client.JBossConnectionFactory.createConnectionInternal(JBossConnectionFactory.java:192)
| ... 13 more
| Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.NullPointerException
| at org.jboss.aop.ClassAdvisor.rebuildInterceptors(ClassAdvisor.java:979)
| at org.jboss.aop.Advisor.newBindingAdded(Advisor.java:485)
| at org.jboss.aop.AspectManager.updateAdvisorsForAddedBinding(AspectManager.java:1413)
| at org.jboss.aop.AspectManager.addBinding(AspectManager.java:1382)
| at org.jboss.aop.AspectXmlLoader.deployBinding(AspectXmlLoader.java:286)
| at org.jboss.aop.AspectXmlLoader.deployTopElements(AspectXmlLoader.java:1038)
| at org.jboss.aop.AspectXmlLoader.deployXML(AspectXmlLoader.java:886)
| ... 17 more
| Caused by: java.lang.RuntimeException: java.lang.NullPointerException
| at org.jboss.aop.advice.AdviceFactory.create(AdviceFactory.java:72)
| at org.jboss.aop.Advisor.createInterceptorChain(Advisor.java:618)
| at org.jboss.aop.Advisor.pointcutResolved(Advisor.java:888)
| at org.jboss.aop.Advisor.resolveMethodPointcut(Advisor.java:650)
| at org.jboss.aop.ClassAdvisor.createInterceptorChains(ClassAdvisor.java:607)
| at org.jboss.aop.ClassAdvisor.rebuildInterceptors(ClassAdvisor.java:974)
| ... 23 more
| Caused by: java.lang.NullPointerException
| at org.jboss.aop.advice.AspectFactoryWithClassLoaderSupport.loadClass(AspectFactoryWithClassLoaderSupport.java:85)
| at org.jboss.aop.advice.GenericAspectFactory.getClazz(GenericAspectFactory.java:137)
| at org.jboss.aop.advice.GenericAspectFactory.createPerVM(GenericAspectFactory.java:152)
| at org.jboss.aop.AspectManager.createPerVmAspect(AspectManager.java:1746)
| at org.jboss.aop.AspectManager.getPerVMAspect(AspectManager.java:1728)
| at org.jboss.aop.AspectManager.getPerVMAspect(AspectManager.java:1718)
| at org.jboss.aop.advice.PerVmAdvice.generateOptimized(PerVmAdvice.java:55)
| at org.jboss.aop.advice.AdviceFactory.create(AdviceFactory.java:68)
| ... 28 more
|
Given that I have to have at least a subset of jbossall-client.jar in the bootclasspath to be able to perform JNDI lookups and get a remote EJB stub ... what can I do to get JMS working?
Any help is appreciated.
John
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4141045#4141045
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4141045
18 years