Spring / EJB3.1 JNDI多耳问题

时间:2014-05-19 12:37:45

标签: java spring jboss ejb-3.0 jndi

我有2个可展开的部分:

首先,我的实体层,它是一个封装EJB的EAR文件。 JBoss EAP 6.2说它一切都很好,并提供了这些JNDI名称:

java:global/entityLayerEar-1.0/entity-service/TestDao!com.test.dao.TestDao
java:app/entity-service/TestDao!com.test.dao.TestDao
java:module/TestDao!com.test.dao.TestDao
java:jboss/exported/entityLayerEar-1.0/entity-service/TestDao!com.test.dao.TestDao
java:global/entityLayerEar-1.0/entity-service/TestDao
java:app/entity-service/TestDao
java:module/TestDao

其次,我的应用程序层,它是一个包含EJB的WAR文件。它也获得了JNDI的名字。

java:global/application/RequestHandler!com.test.application.RequestHandlerInterface
java:app/application/RequestHandler!com.test.application.RequestHandlerInterface
java:module/RequestHandler!com.test.application.RequestHandlerInterface
java:global/application/RequestHandler
java:app/application/RequestHandler
java:module/RequestHandler

现在我只是想在我的RequestHandler中注入TestDao EJB。那要问太多了吗?

我首先尝试使用@Local,@ EJB找不到它。然后我在“new InitialContext()”上尝试了JNDI查找,得到了:

Caused by: java.lang.ClassCastException: com.test.dao.TestDao$$$view2 cannot be cast to com.test.dao.TestDao

我无法解决这个问题。我认为JBoss EAP 6.2不支持从其他EAR注入本地bean。

所以我试过@Remote:

@Remote 
public interface TestDao {...} 

@Stateless(name="TestDao") 
public class TestDaoImpl implements TestDao {...}

但在我的RequestHandler类中,

@EJB
private TestDao testDao;

找不到它。得到:

 org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.test.dao.TestDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.ejb.EJB(beanName=, mappedName=, beanInterface=class java.lang.Object, description=, name=, lookup=)}

我试过@EJB(name =“TestDao”),@ EJB(lookup =“TestDao”)等等。

所以我想,好吧,失去了@EJB,让我们用JNDI找到它。

如果我有

jndiContext = new InitialContext();

我可以遍历树,它会找到JNDI名称,但是会为每个名称抱怨“javax.naming.NotContextException”。尝试将bean取出导致“java.io.NotSerializableException:javax.naming.InitialContext”

我尝试使用此EJB Remoting链接建议的JNDI连接道具...和

 testDao = (TestDao)jndiContext.lookup("java:global/entityLayerEar-1.0/entity-service/TestDao");

但我明白了:

Could not load JNDI context: : javax.naming.NamingException: JBAS011843: Failed instantiate InitialContextFactory org.jboss.naming.remote.client.InitialContextFactory from classloader ModuleClassLoader for Module "deployment.application.war:main" from Service Module Loader

令人非常沮丧。有人有主意吗?我更喜欢本地豆,但我会在这个阶段采取任何措施。

0 个答案:

没有答案