After upgrade 4.0.3SP1 to 4.0.4RC1 EJB session beans not cla
markraadsen Mar 8, 2006 5:13 AMHi!
Please correct me if I'm in the wrong forum. The problem I'm having is that I cannot acces my EJB 3.0 session beans anymore via JNDI, because - it seems - they're not being loaded anymore.
In 4.0.3SP1 all worked well, via the code snippets below. After upgrading to 4.0.4RC1 I followed the Hibernate Migration guide and replaced all obsolete annotations with the new ones, etc, but I got stranded when accessing my session beans. I'm fairly new to EJB's and JBoss alltogether, so it's difficult for me to exactly explain what's relevant here.
Here are some code snippets from my application.
Deployment
09:54:38,147 INFO [TomcatDeployer] undeploy, ctxPath=/ccgui, warUrl=.../tmp/deploy/tmp1965ccservice.ear-contents/ccgui-exp.war/ 09:54:38,444 INFO [SessionFactoryImpl] closing 09:54:38,444 INFO [SchemaExport] Running hbm2ddl schema export 09:54:38,491 INFO [SchemaExport] exporting generated schema to database 09:54:38,507 INFO [SchemaExport] schema export complete 09:54:38,913 INFO [EARDeployer] Undeploying J2EE application, destroy step: file:/D:/jboss-4.0.4RC1/server/default/deploy/ccservice.ear 09:54:38,913 INFO [EARDeployer] Undeployed J2EE application: file:/D:/jboss-4.0.4RC1/server/default/deploy/ccservice.ear 09:54:38,944 INFO [EARDeployer] Init J2EE application: file:/D:/jboss-4.0.4RC1/server/default/deploy/ccservice.ear 09:54:40,850 INFO [Ejb3AnnotationHandler] found EJB3: ejbName=ListenerProcessor, class=com.myapp.beans.message.ListenerProcessor, type=MESSAGE_DRIVEN 09:54:40,960 INFO [Ejb3AnnotationHandler] found EJB3: ejbName=InitServiceBean, class=com.myapp.beans.session.impl.InitServiceBean, type=STATELESS 09:54:41,053 INFO [Ejb3AnnotationHandler] found EJB3: ejbName=TestServiceBean, class=com.myapp.beans.session.impl.TestServiceBean, type=STATELESS 09:54:41,163 INFO [Ejb3AnnotationHandler] found EJB3: ejbName=UserServiceBean, class=com.myapp.beans.session.impl.UserServiceBean, type=STATELESS 09:54:41,288 FATAL [PersistenceXmlLoader] ccservice JTA 09:54:41,288 INFO [Ejb3Deployment] EJB3 deployment time took: 516 09:54:41,350 INFO [JmxKernelAbstraction] installing MBean: persistence.units:ear=ccservice.ear.ear,jar=ccservice.ejb3.jar,unitName=ccservice with dependencies: 09:54:41,350 INFO [JmxKernelAbstraction] jboss.jca:name=DefaultDS,service=ManagedConnectionFactory 09:54:41,397 INFO [Ejb3Configuration] found EJB3 Entity bean: com.myapp.beans.entity.Address [..snip..] 09:54:41,428 INFO [Ejb3Configuration] found EJB3 Entity bean: com.myapp.beans.entity.User 09:54:41,460 INFO [Ejb3Configuration] found EJB3 @EmbeddableSuperclass: com.myapp.beans.session.impl.BasicLifeCycleEntity 09:54:41,678 INFO [AnnotationBinder] Binding entity from annotated class: com.myapp.beans.entity.Address 09:54:41,678 INFO [EntityBinder] Bind entity com.myapp.beans.entity.Address on table Address [..snip..] 09:54:41,960 INFO [CollectionBinder] Mapping collection: com.myapp.beans.entity.Athlete.matchEntries -> MatchEntry [..snip..] 09:54:42,038 INFO [ConnectionProviderFactory] Initializing connection provider: org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider 09:54:42,053 INFO [InjectedDataSourceConnectionProvider] Using provided datasource 09:54:42,053 INFO [SettingsFactory] RDBMS: HSQL Database Engine, version: 1.8.0 09:54:42,053 INFO [SettingsFactory] JDBC driver: HSQL Database Engine Driver, version: 1.8.0 09:54:42,053 INFO [Dialect] Using dialect: org.hibernate.dialect.HSQLDialect 09:54:42,053 INFO [TransactionFactoryFactory] Using default transaction strategy (direct JDBC transactions) 09:54:42,053 INFO [TransactionManagerLookupFactory] instantiating TransactionManagerLookup: org.hibernate.transaction.JBossTransactionManagerLookup 09:54:42,053 INFO [TransactionManagerLookupFactory] instantiated TransactionManagerLookup 09:54:42,053 INFO [SettingsFactory] Automatic flush during beforeCompletion(): enabled 09:54:42,053 INFO [SettingsFactory] Automatic session close at end of transaction: disabled 09:54:42,053 INFO [SettingsFactory] JDBC batch size: 15 09:54:42,053 INFO [SettingsFactory] JDBC batch updates for versioned data: disabled 09:54:42,053 INFO [SettingsFactory] Scrollable result sets: enabled 09:54:42,053 INFO [SettingsFactory] JDBC3 getGeneratedKeys(): disabled 09:54:42,053 INFO [SettingsFactory] Connection release mode: after_statement 09:54:42,053 INFO [SettingsFactory] Default batch fetch size: 1 09:54:42,053 INFO [SettingsFactory] Generate SQL with comments: disabled 09:54:42,053 INFO [SettingsFactory] Order SQL updates by primary key: disabled 09:54:42,053 INFO [SettingsFactory] Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory 09:54:42,053 INFO [ASTQueryTranslatorFactory] Using ASTQueryTranslatorFactory 09:54:42,053 INFO [SettingsFactory] Query language substitutions: {} 09:54:42,053 INFO [SettingsFactory] Second-level cache: enabled 09:54:42,053 INFO [SettingsFactory] Query cache: disabled 09:54:42,053 INFO [SettingsFactory] Cache provider: org.hibernate.cache.HashtableCacheProvider 09:54:42,053 INFO [SettingsFactory] Optimize cache for minimal puts: disabled 09:54:42,053 INFO [SettingsFactory] Structured second-level cache entries: disabled 09:54:42,053 INFO [SettingsFactory] Statistics: disabled 09:54:42,053 INFO [SettingsFactory] Deleted entity synthetic identifier rollback: disabled 09:54:42,053 INFO [SettingsFactory] Default entity-mode: pojo 09:54:42,100 INFO [SessionFactoryImpl] building session factory 09:54:43,225 INFO [SessionFactoryObjectFactory] Not binding factory to JNDI, no JNDI name configured 09:54:43,241 INFO [SchemaExport] Running hbm2ddl schema export 09:54:43,272 INFO [SchemaExport] exporting generated schema to database 09:54:43,319 INFO [SchemaExport] schema export complete 09:54:43,335 INFO [NamingHelper] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory, java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces} 09:54:43,475 INFO [JmxKernelAbstraction] installing MBean: jboss.j2ee:service=EJB3,ear=ccservice.ear,jar=ccservice.ejb3,name=ListenerProcessor with dependencies: 09:54:44,022 INFO [JmxKernelAbstraction] installing MBean: jboss.j2ee:service=EJB3,ear=ccservice.ear,jar=ccservice.ejb3,name=InitServiceBean with dependencies: 09:54:44,022 INFO [JmxKernelAbstraction] persistence.units:ear=ccservice.ear.ear,jar=ccservice.ejb3.jar,unitName=ccservice 09:54:45,007 INFO [JmxKernelAbstraction] installing MBean: jboss.j2ee:service=EJB3,ear=ccservice.ear,jar=ccservice.ejb3,name=TestServiceBean with dependencies: 09:54:45,663 INFO [JmxKernelAbstraction] installing MBean: jboss.j2ee:service=EJB3,ear=ccservice.ear,jar=ccservice.ejb3,name=UserServiceBean with dependencies: 09:54:45,663 INFO [JmxKernelAbstraction] persistence.units:ear=ccservice.ear.ear,jar=ccservice.ejb3.jar,unitName=ccservice [..snip..] 09:54:45,882 INFO [EJB3Deployer] Deployed: file:/D:/jboss-4.0.4RC1/server/default/tmp/deploy/tmp1967ccservice.ear-contents/ccservice.ejb3 09:54:45,897 INFO [TomcatDeployer] deploy, ctxPath=/ccgui, warUrl=.../tmp/deploy/tmp1967ccservice.ear-contents/ccgui-exp.war/ 09:54:46,913 INFO [FacesConfigurator] Reading standard config org/apache/myfaces/resource/standard-faces-config.xml 09:54:47,022 INFO [FacesConfigurator] Reading config jar:file:/D:/jboss-4.0.4RC1/server/default/tmp/deploy/tmp1967ccservice.ear-contents/ccgui-exp.war/WEB-INF/lib/tomahawk.jar!/META-INF/faces-config.xml 09:54:47,069 INFO [FacesConfigurator] Reading config /WEB-INF/faces-config.xml 09:54:47,069 INFO [FacesConfigurator] Reading config /WEB-INF/faces-managed-beans.xml 09:54:47,085 INFO [FacesConfigurator] Reading config /WEB-INF/faces-navigation.xml 09:54:47,100 INFO [FacesConfigurator] Reading config /WEB-INF/faces-config.xml 09:54:48,507 INFO [StartupServletContextListener] ServletContext 'D:\jboss-4.0.4RC1\server\default\.\tmp\deploy\tmp1967ccservice.ear-contents\ccgui-exp.war\' initialized. 09:54:48,647 INFO [EARDeployer] Started J2EE application: file:/D:/jboss-4.0.4RC1/server/default/deploy/ccservice.ear
jndi.properties - for server and client, same as it was under 4.0.3SP1
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces java.naming.provider.url=localhost:1099
persistence.xml - on same location in /META-INF but (hopefully succesfully) updated for 4.0.4
<?xml version="1.0" encoding="UTF-8"?> <persistence> <persistence-unit name="ccservice"> <jta-data-source>java:/DefaultDS</jta-data-source> <properties> <property name="hibernate.hbm2ddl.auto" value="create-drop" /> </properties> </persistence-unit> </persistence>
Here are the listings as it was under 4.0.3 and now for 4.0.4.
Global JNDI Namespace 4.0.3
+- HASessionState (class: org.jnp.interfaces.NamingContext) | +- Default (class: org.jboss.ha.hasessionstate.server.HASessionStateImpl) +- com.myapp.beans.session.UserService (proxy: $Proxy234 implements No ClassLoaders found for: com.myapp.beans.session.UserService (no security manager: RMI class loader disabled))] +- TopicConnectionFactory (class: org.jboss.naming.LinkRefPair) +- jmx (class: org.jnp.interfaces.NamingContext) | +- invoker (class: org.jnp.interfaces.NamingContext) | | +- RMIAdaptor (proxy: $Proxy38 implements interface org.jboss.jmx.adaptor.rmi.RMIAdaptor,interface org.jboss.jmx.adaptor.rmi.RMIAdaptorExt) | +- rmi (class: org.jnp.interfaces.NamingContext) | | +- RMIAdaptor[link -> jmx/invoker/RMIAdaptor] (class: javax.naming.LinkRef) +- com.myapp.beans.session.InitService (proxy: $Proxy236 implements No ClassLoaders found for: com.myapp.beans.session.InitService (no security manager: RMI class loader disabled)) +- HTTPXAConnectionFactory (class: org.jboss.mq.SpyXAConnectionFactory) +- ConnectionFactory (class: org.jboss.mq.SpyConnectionFactory) +- com.myapp.beans.session.TestService (proxy: $Proxy233 implements No ClassLoaders found for: com.myapp.beans.session.TestService (no security manager: RMI class loader disabled)) +- UserTransactionSessionFactory (proxy: $Proxy42 implements interface org.jboss.tm.usertx.interfaces.UserTransactionSessionFactory) +- HTTPConnectionFactory (class: org.jboss.mq.SpyConnectionFactory) +- XAConnectionFactory (class: org.jboss.mq.SpyXAConnectionFactory) +- UserTransaction (class: org.jboss.tm.usertx.client.ClientUserTransaction) +- containers (class: org.jnp.interfaces.NamingContext) | +- com.myapp.beans.session.impl.UserServiceBean (class: org.jboss.ejb3.stateless.StatelessContainer) | +- com.myapp.beans.session.impl.InitServiceBean (class: org.jboss.ejb3.stateless.StatelessContainer) | +- com.myapp.beans.session.impl.TestServiceBean (class: org.jboss.ejb3.stateless.StatelessContainer) +- UILXAConnectionFactory[link -> XAConnectionFactory] (class: javax.naming.LinkRef) +- UIL2XAConnectionFactory[link -> XAConnectionFactory] (class: javax.naming.LinkRef) +- HAPartition (class: org.jnp.interfaces.NamingContext) | +- DefaultPartition (class: org.jboss.ha.framework.server.HAPartitionImpl) +- queue (class: org.jnp.interfaces.NamingContext) | +- A (class: org.jboss.mq.SpyQueue) | +- testQueue (class: org.jboss.mq.SpyQueue) | +- ex (class: org.jboss.mq.SpyQueue) | +- DLQ (class: org.jboss.mq.SpyQueue) | +- D (class: org.jboss.mq.SpyQueue) | +- C (class: org.jboss.mq.SpyQueue) | +- B (class: org.jboss.mq.SpyQueue) +- topic (class: org.jnp.interfaces.NamingContext) | +- testDurableTopic (class: org.jboss.mq.SpyTopic) | +- testTopic (class: org.jboss.mq.SpyTopic) | +- securedTopic (class: org.jboss.mq.SpyTopic) +- console (class: org.jnp.interfaces.NamingContext) | +- PluginManager (proxy: $Proxy40 implements No ClassLoaders found for: org.jboss.console.manager.PluginManagerMBean (no security manager: RMI class loader disabled)) +- UIL2ConnectionFactory[link -> ConnectionFactory] (class: javax.naming.LinkRef) +- HiLoKeyGeneratorFactory (class: org.jboss.ejb.plugins.keygenerator.hilo.HiLoKeyGeneratorFactory) +- UILConnectionFactory[link -> ConnectionFactory] (class: javax.naming.LinkRef) +- QueueConnectionFactory (class: org.jboss.naming.LinkRefPair) +- UUIDKeyGeneratorFactory (class: org.jboss.ejb.plugins.keygenerator.uuid.UUIDKeyGeneratorFactory)
Global JNDI Namespace 4.04
+- HASessionState (class: org.jnp.interfaces.NamingContext) | +- Default (class: org.jboss.ha.hasessionstate.server.HASessionStateImpl) +- TopicConnectionFactory (class: org.jboss.naming.LinkRefPair) +- jmx (class: org.jnp.interfaces.NamingContext) | +- invoker (class: org.jnp.interfaces.NamingContext) | | +- RMIAdaptor (proxy: $Proxy40 implements interface org.jboss.jmx.adaptor.rmi.RMIAdaptor,interface org.jboss.jmx.adaptor.rmi.RMIAdaptorExt) | +- rmi (class: org.jnp.interfaces.NamingContext) | | +- RMIAdaptor[link -> jmx/invoker/RMIAdaptor] (class: javax.naming.LinkRef) +- HTTPXAConnectionFactory (class: org.jboss.mq.SpyXAConnectionFactory) +- ConnectionFactory (class: org.jboss.mq.SpyConnectionFactory) +- UserTransactionSessionFactory (proxy: $Proxy44 implements interface org.jboss.tm.usertx.interfaces.UserTransactionSessionFactory) +- HTTPConnectionFactory (class: org.jboss.mq.SpyConnectionFactory) +- XAConnectionFactory (class: org.jboss.mq.SpyXAConnectionFactory) +- UserTransaction (class: org.jboss.tm.usertx.client.ClientUserTransaction) +- ccservice (class: org.jnp.interfaces.NamingContext) | +- UserServiceBean (class: org.jnp.interfaces.NamingContext) | | +- remote (proxy: $Proxy248 implements No ClassLoaders found for: com.myapp.beans.session.UserService (no security manager: RMI class loader disabled)) | +- TestServiceBean (class: org.jnp.interfaces.NamingContext) | | +- remote (proxy: $Proxy245 implements No ClassLoaders found for: com.myapp.beans.session.TestService (no security manager: RMI class loader disabled)) | +- InitServiceBean (class: org.jnp.interfaces.NamingContext) | | +- remote (proxy: $Proxy242 implements No ClassLoaders found for: com.myapp.beans.session.InitService (no security manager: RMI class loader disabled)) [..snip..] +- UILXAConnectionFactory[link -> XAConnectionFactory] (class: javax.naming.LinkRef) +- UIL2XAConnectionFactory[link -> XAConnectionFactory] (class: javax.naming.LinkRef) +- HAPartition (class: org.jnp.interfaces.NamingContext) | +- DefaultPartition (class: org.jboss.ha.framework.server.HAPartitionImpl) +- queue (class: org.jnp.interfaces.NamingContext) | +- A (class: org.jboss.mq.SpyQueue) | +- testQueue (class: org.jboss.mq.SpyQueue) | +- ex (class: org.jboss.mq.SpyQueue) | +- DLQ (class: org.jboss.mq.SpyQueue) | +- D (class: org.jboss.mq.SpyQueue) | +- C (class: org.jboss.mq.SpyQueue) | +- B (class: org.jboss.mq.SpyQueue) +- topic (class: org.jnp.interfaces.NamingContext) | +- testDurableTopic (class: org.jboss.mq.SpyTopic) | +- testTopic (class: org.jboss.mq.SpyTopic) | +- securedTopic (class: org.jboss.mq.SpyTopic) +- console (class: org.jnp.interfaces.NamingContext) | +- PluginManager (proxy: $Proxy42 implements No ClassLoaders found for: org.jboss.console.manager.PluginManagerMBean (no security manager: RMI class loader disabled)) +- UIL2ConnectionFactory[link -> ConnectionFactory] (class: javax.naming.LinkRef) +- HiLoKeyGeneratorFactory (class: org.jboss.ejb.plugins.keygenerator.hilo.HiLoKeyGeneratorFactory) +- UILConnectionFactory[link -> ConnectionFactory] (class: javax.naming.LinkRef) +- QueueConnectionFactory (class: org.jboss.naming.LinkRefPair) +- UUIDKeyGeneratorFactory (class: org.jboss.ejb.plugins.keygenerator.uuid.UUIDKeyGeneratorFactory)
As you can see, for every session bean there's the error
"remote (proxy: $Proxy248 implements No ClassLoaders found for: com.myapp.beans.session.UserService (no security manager: RMI class loader disabled))"
In the example UserServiceBean and InitServiceBean do have a part
@PersistenceContext(unitName = "ccservice") protected EntityManager em;
but the TestService interface and TestServiceBean do not have specific EJB parts:
TestService.java
package com.myapp.beans.session; import javax.ejb.Remote; @Remote public interface TestService { public String getString(); }
TestServiceBean.java
package com.myapp.beans.session.impl; import javax.ejb.Stateless; import com.myapp.beans.session.TestService; @Stateless public class TestServiceBean implements TestService { public String getString() { return "bogus"; } }
As you can see in the JNDI views: in 4.0.3 there were also 'No ClassLoaders found for:' errors, but there were also listed as org.jboss.ejb3.stateless.StatelessContainer and that seemed to work. Under 4.0.4 I get a
Exception in thread "main" javax.naming.NameNotFoundException: com.myapp.beans.session.InitService not bound [..snip..] at com.myapp.init.Init.main(Init.java:15)
in
public static void main( String args[] ) throws NamingException { Context context = new InitialContext(); InitService initService = (InitService) context.lookup(InitService.class.getName()); }
which did work under 4.0.3SP1.
In http://www.jboss.com/index.html?module=bb&op=viewtopic&t=77669 Bill Burke mentioned that fact that an Entity Manager was possibly not correctly injected because of of an invalid persistence.xml, but I created the TestService session bean on purpose without any Entity Manager to see if it had anything to do with that problem, but somehow also the TestService bean can not be loaded.
I'm also not sure if I have to add jboss.entity.manager.jndi.name & jboss.entity.manager.factory.jndi.name to persistence.xml as described in http://www.jboss.com/index.html?module=bb&op=viewtopic&t=76134, since, again, the TestService bean doesn't contain any persistency item that need injection, if I'm correct.
So, the question, what I can not find in the list JBoss & Hibernate changes on http://wiki.jboss.org/wiki/Wiki.jsp?page=FromJBossEJB3.0RC3ToRC4PFD is: if under 4.0.4 the JNDI lookup fails because there are no classloaders for the session beans, what has changed in JBoss or what have I forgotten during the upgrade?
Thanks in advance.