CreateException и NamingException после попытки вставить один EJB в другой - PullRequest
1 голос
/ 28 декабря 2011

Я использую JEE6 с Glassfish 3.1 и Eclipse helios.Я управлял несколькими EJB, сервлетами и JPA с базой данных.Сейчас я просто попытался создать еще один EJB @Statless и @LocalBean.Когда я внедряю этот bean-компонент в другой bean-компонент, чтобы я мог вызвать его оттуда, я получаю ошибки развертывания.

  [#|2011-12-27T19:15:14.703-0700|SEVERE|glassfish3.1.1|javax.enterprise.system.tools.ad    min.org.glassfish.deployment.admin|_ThreadID=19;_ThreadName=Thread-2;|
Exception while loading the app : javax.ejb.CreateException: Initialization      failed for Singleton Driver
javax.ejb.CreateException: Initialization failed for Singleton Driver
    at     com.sun.ejb.containers.AbstractSingletonContainer.createSingletonEJB(AbstractSingletonContainer.java:547)
    at     com.sun.ejb.containers.AbstractSingletonContainer.access$100(AbstractSingletonContainer.java:79)

И

com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:376)
    at com.sun.ejb.containers.AbstractSingletonContainer.createSingletonEJB(AbstractSingletonContainer.java:538)
    ... 38 more
Caused by: javax.ejb.EJBException: javax.ejb.CreateException: Could not create stateless EJB
    at com.sun.ejb.containers.StatelessSessionContainer$SessionContextFactory.create(StatelessSessionContainer.java:726)
    at com.sun.ejb.containers.util.pool.NonBlockingPool.getObject(NonBlockingPool.java:247)
    at com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:449)
    ... 63 more
Caused by: javax.ejb.CreateException: Could not create stateless EJB
    at com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:534)
    at com.sun.ejb.containers.StatelessSessionContainer.access$000(StatelessSessionContainer.java:95)

И наконец:

Caused by: javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=com.logic.bean/tclient,Remote 3.x interface =com.thrift.ThriftClient,ejb-link=null,lookup=,mappedName=,jndi-name=com.thrift.ThriftClient,refType=Session' .  Actual (possibly internal) Remote JNDI name used for lookup is 'com.thrift.ThriftClient#com.thrift.ThriftClient' [Root exception is javax.naming.NamingException: Lookup failed for 'com.thrift.ThriftClient#com.thrift.ThriftClient' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: com.thrift.ThriftClient#com.thrift.ThriftClient not found]]
    at com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:178)
    at com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl$EjbReferenceProxy.create(ComponentEnvManagerImpl.java:1106)

Это новый код EJB:

...imports...
@Stateless
@LocalBean
public class ThriftClient {


public ThriftClient(){}

...other code....

и как явведите его:

@EJB ThriftClient tclient;

Я внедряю его в другой bean-компонент без состояния, в котором работают другие EJB-инъекции.

1 Ответ

1 голос
/ 28 декабря 2011

Проверьте в консоли Glassfish, правильно ли развернут компонент и под каким именем JNDI.Я знаю, что он должен работать «из коробки», но, возможно, стоит поиграть с параметрами аннотации @EJB, чтобы указать правильное имя JNDI.Это может помочь вам найти реальную проблему, поскольку она явно связана с именованием JNDI.Вы также можете попытаться найти bean-компонент с помощью явного поиска JNDI вместо его внедрения, и, возможно, тогда вы заметите проблему.

...