Erro na injeção do EntityManager

2 respostas
L

Olá pessoal,

Estou tentando fazer um deploy de uma aplicação porém não estou tendo sucesso.
Possuo um projeto EJB que separo em dois componentes: service.jar (apenas com as interfaces) e service-impl.jar (com as implementações).
No service.jar possuo uma interface comum. No service-impl.jar possuo: interface local, interface remota e o bean.
Tudo isso está empacotado num projeto .ear.

O problema é que em qualquer stateless dessa minha aplicação, quando injeto um EntityManager, ocorre o seguinte erro:

Caused by: java.lang.RuntimeException: Non matching type for inject of field: private javax.persistence.EntityManager br.unicamp.hc.caa.ejb.eao.PeriodoCadastralEAOBean.entityManager for type: org.jboss.ejb3.entity.InjectedEntityManagerFactory of jndiName env/br.unicamp.hc.caa.ejb.eao.PeriodoCadastralEAOBean/entityManager
intfs: , javax.persistence.EntityManagerFactory, java.io.Externalizable
        at org.jboss.injection.JndiFieldInjector.inject(JndiFieldInjector.java:127)
        at org.jboss.injection.JndiFieldInjector.inject(JndiFieldInjector.java:105)
        at org.jboss.injection.JndiFieldInjector.inject(JndiFieldInjector.java:62)
        at org.jboss.ejb3.AbstractPool.create(AbstractPool.java:111)
        at org.jboss.ejb3.ThreadlocalPool.get(ThreadlocalPool.java:61)
        at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:54)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77)
        at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:106)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:214)
        at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:184)
        at org.jboss.ejb3.stateless.StatelessLocalProxy.invoke(StatelessLocalProxy.java:81)
        at $Proxy124.findUltimoPeriodoCadastral(Unknown Source)
        at br.unicamp.hc.caa.ejb.facade.PeriodoCadastralFacadeBean.findUltimoPeriodoCadastral(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
09:56:32,011 ERROR [STDERR] 39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
        at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
        at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
Caused by: java.lang.IllegalArgumentException: Can not set javax.persistence.EntityManager field br.unicamp.hc.caa.ejb.eao.PeriodoCadastralEAOBean.entityManager to org.jboss.ejb3.entity.InjectedEntityManagerFactory

O estranho é que o jboss faz deploy da aplicação sem nenhum erro. O erro só ocorre na chamada do stateless.

Alguém sabe o que pode estar acontecendo?

Obrigada
LISS

2 Respostas

C

Liss,

Fica difícil pra entender o que está ocorrendo sem ver o que vc está fazendo… Vc poderia postar uma parte do código para demonstrar o problema com mais detalhes?

Sobre o fato de não dar erro ao fazer o deploy é pq este erro não é um erro que ocorre em tempo de compilação, mas sim um erro que ocorre em tempo de execução (runtime), ou seja, qdo o EJB vai injetar o EntityManager.

@braços,
Cleiton

M

liss,
seguinte

vc deve estar usando um @PersistenceUnit que lhe da uma maior controle do entityManager
tente mudar para @PersistenceContext

são similares

t+

Criado 26 de outubro de 2007
Ultima resposta 19 de set. de 2008
Respostas 2
Participantes 3