Como injetar um EntityManager em um DAO? [RESOLVIDO]

Olá galera

Estou com o seguinte problema

Eu tenho um projeto EJB, com varios padrões, DAO, BS, BD, me falaram que o DAO não seria um um session bean, então como eu faço pra injetar um EntityManager no DAO para ele ser gerenciado pelo servidor de aplicação?

Eu sei que uma classe normal não recebe injeção.

No meu caso os BS usariam o DAO pra persistir, eu deixando as classes DAO como session beans, ae da tudo certo, porém me falaram que os DAO não são session beans, então fiquei com esse problema de fazer com que o container gerencie o EntityManager pra mim.

Tem alguma forma de fazer isso?

Atenciosamente

Está utilizando JPA pra persistir os dados?

Sim, é JPA mesmo

Se for Java EE 6, é só colocar um @Inject pra receber qualquer coisa (EntityManager inclusive).

Sergio

No meu caso deu o mesmo erro, estou usando JEE 6

O seguinte erro

23:40:37,804 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/daoWEB].[br.com.servlets.MeuServlet]] Servlet.service() for servlet br.com.servlets.MeuServlet threw exception: javax.ejb.EJBException: java.lang.NullPointerException
	at org.jboss.ejb3.tx2.impl.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:183) [:0.0.1]
	at org.jboss.ejb3.tx2.impl.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:251) [:0.0.1]
	at org.jboss.ejb3.tx2.impl.CMTTxInterceptor.required(CMTTxInterceptor.java:349) [:0.0.1]
	at org.jboss.ejb3.tx2.impl.CMTTxInterceptor.invoke(CMTTxInterceptor.java:209) [:0.0.1]
	at org.jboss.ejb3.tx2.aop.CMTTxInterceptorWrapper.invoke(CMTTxInterceptorWrapper.java:52) [:0.0.1]
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA]
	at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76) [:1.0.0.GA]
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA]
	at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42) [:1.0.3]
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA]
	at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3AuthenticationInterceptorv2.java:182) [:1.7.17]
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA]
	at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:41) [:1.7.17]
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA]
	at org.jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContainerShutdownInterceptor.java:67) [:1.7.17]
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA]
	at org.jboss.ejb3.core.context.CurrentInvocationContextInterceptor.invoke(CurrentInvocationContextInterceptor.java:47) [:1.7.17]
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA]
	at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67) [:1.0.1]
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA]
	at org.jboss.ejb3.interceptor.EJB3TCCLInterceptor.invoke(EJB3TCCLInterceptor.java:86) [:1.7.17]
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA]
	at org.jboss.ejb3.session.SessionSpecContainer.invoke(SessionSpecContainer.java:323) [:1.7.17]
	at org.jboss.ejb3.session.SessionSpecContainer.invoke(SessionSpecContainer.java:156) [:1.7.17]
	at org.jboss.ejb3.nointerface.impl.invocationhandler.NoInterfaceViewInvocationHandler.invokeEndpoint(NoInterfaceViewInvocationHandler.java:143) [:6.0.0.Final]
	at org.jboss.ejb3.nointerface.impl.invocationhandler.NoInterfaceViewInvocationHandler.access$000(NoInterfaceViewInvocationHandler.java:54) [:6.0.0.Final]
	at org.jboss.ejb3.nointerface.impl.invocationhandler.NoInterfaceViewInvocationHandler$1.invoke(NoInterfaceViewInvocationHandler.java:103) [:6.0.0.Final]
	at org.jboss.ejb3.sis.reflect.InterceptorInvocationHandler$1.proceed(InterceptorInvocationHandler.java:84) [:1.0.0-alpha-1]
	at org.jboss.ejb3.sis.InterceptorAssembly$1.proceed(InterceptorAssembly.java:82) [:1.0.0-alpha-1]
	at org.jboss.ejb3.nointerface.impl.async.AsyncClientInterceptor.invoke(AsyncClientInterceptor.java:119) [:6.0.0.Final]
	at org.jboss.ejb3.sis.InterceptorAssembly$1.proceed(InterceptorAssembly.java:74) [:1.0.0-alpha-1]
	at org.jboss.ejb3.nointerface.impl.invocationhandler.ObjectMethodsInterceptor.invoke(ObjectMethodsInterceptor.java:78) [:6.0.0.Final]
	at org.jboss.ejb3.sis.InterceptorAssembly$1.proceed(InterceptorAssembly.java:74) [:1.0.0-alpha-1]
	at org.jboss.ejb3.sis.InterceptorAssembly.invoke(InterceptorAssembly.java:90) [:1.0.0-alpha-1]
	at org.jboss.ejb3.sis.reflect.InterceptorInvocationHandler.invoke(InterceptorInvocationHandler.java:110) [:1.0.0-alpha-1]
	at org.jboss.ejb3.nointerface.impl.invocationhandler.NoInterfaceViewInvocationHandler.invoke(NoInterfaceViewInvocationHandler.java:115) [:6.0.0.Final]
	at org.jboss.ejb3.proxy.javassist.JavassistInvocationHandlerAdapter.invoke(JavassistInvocationHandlerAdapter.java:71) [:1.0.0-alpha-1]
	at br.com.beans.PessoaBS_$$_javassist_6.addPessoa(PessoaBS_$$_javassist_6.java)
	at br.com.servlets.MeuServlet.doPost(MeuServlet.java:44) [:]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:754) [:1.0.0.Final]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [:1.0.0.Final]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:324) [:6.0.0.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242) [:6.0.0.Final]
	at org.apache.catalina.core.Standard

O meu DAO

import javax.inject.Inject;
import javax.persistence.EntityManager;


import br.com.entidades.Pessoa;

public class PessoaDAO {

	@Inject
	public EntityManager em;
	
	public void add(){
		
		Pessoa p = new Pessoa();
		p.setNome("BRUBO ROTA SEAS");
		
		em.persist(p);
	}
}

Ele não está injetando no DAO, se eu marcar o DAO como Stateless ae ele injeta, mas pelo que eu sei em classes normais não da pra injetar, só pelo InitialContext na mão. mas no caso seria errado meus DAOs serem Stateless?

Desculpa, eu respondi rapido e nao expliquei a historia toda :slight_smile:

No Java EE 6 voce pode usar o novo CDI que tem essa anotacao @Inject. Mas ai precisa configurar o CDI na aplicacao. Alias, olhando agora por cima, parece que se usar CDI vc nem precisa do @Inject, o proprio @PersistenceContext funcionara:

http://docs.jboss.org/weld/reference/latest/en-US/html/ee.html#d0e4657
http://docs.jboss.org/weld/reference/latest/en-US/html/gettingstarted.html#jbossas

Sergio

Eu li esses tutoriais

Eu até consegui injetar com o @Inject, porem apenas de Stateless, Servlets, ManagedBeans, só classes que eu conseguia injetar os @EJB, @PersistenceContext, há, eu apenas consegui injetar beans criados por mim, o EntityManager não deu certo.

A configuração que eu fiz foi adicionar um arquivo beans.xml em branco na pasta META-INF do meu projeto EJB, como o tutorial explicava.

Tem alguma configuração pra eu injetar o EntityManager dentro de uma classe normal, ser ser Stateless, Servlet, ManagedBeans e afins?

Obrigado pela atenção

O que deveria funcionar é voce ter o EntityManager injetado no DAO e o DAO injetado no SessionBean.

Na pratica o que vc vai fazer eh transformar todas as classes em beans do CDI (session beans, managed beans jsf, servlets etc mas tbm suas classes proprias como DAOs). Voce deixa o container gerenciar tudo pra vc e ai ganha injecao em todos os lugares.

[quote=Sergio Lopes]Desculpa, eu respondi rapido e nao expliquei a historia toda :slight_smile:

No Java EE 6 voce pode usar o novo CDI que tem essa anotacao @Inject. Mas ai precisa configurar o CDI na aplicacao. Alias, olhando agora por cima, parece que se usar CDI vc nem precisa do @Inject, o proprio @PersistenceContext funcionara:

http://docs.jboss.org/weld/reference/latest/en-US/html/ee.html#d0e4657
http://docs.jboss.org/weld/reference/latest/en-US/html/gettingstarted.html#jbossas[/quote]

Isso mesmo, neste caso é só colocar o nome da unidade de persistência definido no seu persistence.xml

I ae

Então eu to fazendo aqui não ta dando certo

Meu código:

PessoaDAO

public class PessoaDAO {

	@Inject
	EntityManager em;
	
	public void add(){
		
		Pessoa p = new Pessoa();
		p.setNome("Bruno");
		
		em.persist(p);
	}
}

PessoaBS

@Stateless
@LocalBean
public class PessoaBS {

	@Inject
	PessoaDAO dao;
	
    public PessoaBS() {
      }
    
    public void addPessoa(){
    	
    	dao.add();
    }

}

Servlet

@Inject
	PessoaBS pessoaBS;

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		pessoaBS.addPessoa();
	}

persistence.xml

<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
             version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
  <persistence-unit name="sar">
      <jta-data-source>java:/cadastroDS</jta-data-source>


    <properties>
        <property name="hibernate.hbm2ddl.auto" value="update"/>
		<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
      	<!-- <property name="hibernate.hbm2ddl.auto" value="validate"/>-->
		<property name="hibernate.show_sql" value="true" />
		<!-- property name="hibernate.format_sql" value="true" /-->
		<property name="hibernate.use_sql_comments" value="true" />
		<property name="hibernate.jdbc.batch_size" value="1000" />
		<property name="hibernate.generate_statistics" value="true" />
	</properties>
  </persistence-unit>
</persistence>

beans.xml na pasta META-INF do projeto EJB

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee" 
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
						   http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>

erro de deploy

11:39:54,985 ERROR [org.jboss.kernel.plugins.dependency.AbstractKernelController] Error installing to Start: name=vfs:///C:/jboss-6.0.0.Final/server/default/deploy/daoEAR.ear_WeldBootstrapBean state=Create: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [EntityManager] with qualifiers [@Default] at injection point [[field] @Inject br.com.dao.PessoaDAO.em]
	at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:305) [:6.0.0.Final]
	at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:139) [:6.0.0.Final]
	at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:162) [:6.0.0.Final]
	at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:377) [:6.0.0.Final]
	at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:363) [:6.0.0.Final]
	at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:388) [:6.0.0.Final]
	at org.jboss.weld.integration.deployer.env.helpers.BootstrapBean.boot(BootstrapBean.java:92) [:6.0.0.Final]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_24]
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) [:1.6.0_24]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) [:1.6.0_24]
	at java.lang.reflect.Method.invoke(Unknown Source) [:1.6.0_24]
	at org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:60) [jboss-reflect.jar:2.2.0.GA]
	at org.jboss.reflect.plugins.introspection.ReflectMethodInfoImpl.invoke(ReflectMethodInfoImpl.java:168) [jboss-reflect.jar:2.2.0.GA]
	at org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(BasicMethodJoinPoint.java:66) [jboss-reflect.jar:2.2.0.GA]
	at org.jboss.kernel.plugins.dependency.KernelControllerContextAction$JoinpointDispatchWrapper.execute(KernelControllerContextAction.java:257) [jboss-kernel.jar:2.2.0.GA]
	at org.jboss.kernel.plugins.dependency.ExecutionWrapper.execute(ExecutionWrapper.java:47) [jboss-kernel.jar:2.2.0.GA]
	at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchExecutionWrapper(KernelControllerContextAction.java:125) [jboss-kernel.jar:2.2.0.GA]
	at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchJoinPoint(KernelControllerContextAction.java:72) [jboss-kernel.jar:2.2.0.GA]
	at org.jboss.kernel.plugins.dependency.LifecycleAction.installActionInternal(LifecycleAction.java:202) [jboss-kernel.jar:2.2.0.GA]
	at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:54) [jboss-kernel.jar:2.2.0.GA]
	at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:42) [jboss-kernel.jar:2.2.0.GA]
	at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62) [jboss-dependency.jar:2.2.0.GA]
	at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71) [jboss-dependency.jar:2.2.0.GA]
	at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51) [jboss-dependency.jar:2.2.0.GA]
	at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:379) [jboss-dependency.jar:2.2.0.GA]
	at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:2044) [jboss-dependency.jar:2.2.0.GA]
	at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:1083) [jboss-dependency.jar:2.2.0.GA]
	at org.jboss.dependency.plugins.AbstractController.executeOrIncrementStateDirectly(AbstractController.java:1322) [jboss-dependency.jar:2.2.0.GA]
	at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1246) [jboss-dependency.jar:2.2.0.GA]
	at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1139) [jboss-dependency.jar:2.2.0.GA]
	at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:939) [jboss-dependency.jar:2.2.0.GA]
	at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:654) [jboss-dependency.jar:2.2.0.GA]
	at org.jboss.deployers.plugins.deployers.DeployersImpl.change(DeployersImpl.java:1983) [:2.2.0.GA]
	at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:1076) [:2.2.0.GA]
	at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:679) [:2.2.0.GA]
	at org.jboss.system.server.profileservice.deployers.MainDeployerPlugin.process(MainDeployerPlugin.java:106) [:6.0.0.Final]
	at org.jboss.profileservice.dependency.ProfileControllerContext$DelegateDeployer.process(ProfileControllerContext.java:143) [:0.2.2]
	at org.jboss.profileservice.deployment.hotdeploy.HDScanner$HDScanAction.deploy(HDScanner.java:240) [:0.2.2]
	at org.jboss.profileservice.deployment.hotdeploy.HDScanner$HDScanAction.complete(HDScanner.java:192) [:0.2.2]
	at org.jboss.profileservice.management.TwoPCActionWrapper.doComplete(TwoPCActionWrapper.java:57) [:0.2.2]
	at org.jboss.profileservice.management.actions.AbstractTwoPhaseModificationAction.complete(AbstractTwoPhaseModificationAction.java:74) [:0.2.2]
	at org.jboss.profileservice.management.actions.AbstractTwoPhaseModificationAction.prepare(AbstractTwoPhaseModificationAction.java:95) [:0.2.2]
	at org.jboss.profileservice.management.ModificationSession.prepare(ModificationSession.java:87) [:0.2.2]
	at org.jboss.profileservice.management.AbstractActionController.internalPerfom(AbstractActionController.java:234) [:0.2.2]
	at org.jboss.profileservice.management.AbstractActionController.performWrite(AbstractActionController.java:213) [:0.2.2]
	at org.jboss.profileservice.management.AbstractActionController.perform(AbstractActionController.java:150) [:0.2.2]
	at org.jboss.profileservice.management.AbstractActionController.perform(AbstractActionController.java:135) [:0.2.2]
	at org.jboss.profileservice.deployment.hotdeploy.HDScanner.scan(HDScanner.java:146) [:0.2.2]
	at org.jboss.profileservice.deployment.hotdeploy.HDScanner.run(HDScanner.java:90) [:0.2.2]
	at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [:1.6.0_24]
	at java.util.concurrent.FutureTask$Sync.innerRunAndReset(Unknown Source) [:1.6.0_24]
	at java.util.concurrent.FutureTask.runAndReset(Unknown Source) [:1.6.0_24]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(Unknown Source) [:1.6.0_24]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(Unknown Source) [:1.6.0_24]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) [:1.6.0_24]
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) [:1.6.0_24]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [:1.6.0_24]
	at java.lang.Thread.run(Unknown Source) [:1.6.0_24]

11:39:54,995 WARN  [org.jboss.profileservice.deployment.hotdeploy.HDScanner] Scan failed: org.jboss.deployers.client.spi.IncompleteDeploymentException: Summary of incomplete deployments (SEE PREVIOUS ERRORS FOR DETAILS):

DEPLOYMENTS MISSING DEPENDENCIES:
  Deployment "jboss-injector:topLevelUnit=daoEAR.ear,unit=daoEJB.jar,bean=CDIBean,interceptor=org.jboss.weld.integration.ejb.SessionBeanInterceptor" is missing the following dependencies:
    Dependency "<UNKNOWN jboss-injector:topLevelUnit=daoEAR.ear,unit=daoEJB.jar,bean=CDIBean,interceptor=org.jboss.weld.integration.ejb.SessionBeanInterceptor>" (should be in state "Installed", but is actually in state "** UNRESOLVED Demands 'jboss-switchboard:appName=daoEAR,module=daoEJB,name=CDIBean' **")
  Deployment "jboss-injector:topLevelUnit=daoEAR.ear,unit=daoEJB.jar,bean=CDIBean,interceptor=org.jboss.weld.integration.ejb.interceptor.Jsr299BindingsInterceptor" is missing the following dependencies:
    Dependency "<UNKNOWN jboss-injector:topLevelUnit=daoEAR.ear,unit=daoEJB.jar,bean=CDIBean,interceptor=org.jboss.weld.integration.ejb.interceptor.Jsr299BindingsInterceptor>" (should be in state "Installed", but is actually in state "** UNRESOLVED Demands 'jboss-switchboard:appName=daoEAR,module=daoEJB,name=CDIBean' **")
  Deployment "jboss-injector:topLevelUnit=daoEAR.ear,unit=daoEJB.jar,bean=PessoaBS,interceptor=org.jboss.weld.integration.ejb.SessionBeanInterceptor" is missing the following dependencies:
    Dependency "<UNKNOWN jboss-injector:topLevelUnit=daoEAR.ear,unit=daoEJB.jar,bean=PessoaBS,interceptor=org.jboss.weld.integration.ejb.SessionBeanInterceptor>" (should be in state "Installed", but is actually in state "** UNRESOLVED Demands 'jboss-switchboard:appName=daoEAR,module=daoEJB,name=PessoaBS' **")
  Deployment "jboss-injector:topLevelUnit=daoEAR.ear,unit=daoEJB.jar,bean=PessoaBS,interceptor=org.jboss.weld.integration.ejb.interceptor.Jsr299BindingsInterceptor" is missing the following dependencies:
    Dependency "<UNKNOWN jboss-injector:topLevelUnit=daoEAR.ear,unit=daoEJB.jar,bean=PessoaBS,interceptor=org.jboss.weld.integration.ejb.interceptor.Jsr299BindingsInterceptor>" (should be in state "Installed", but is actually in state "** UNRESOLVED Demands 'jboss-switchboard:appName=daoEAR,module=daoEJB,name=PessoaBS' **")
  Deployment "jboss-switchboard:appName=daoEAR,module=daoEJB,name=CDIBean" is missing the following dependencies:
    Dependency "java:global/cdi/daoEAR/daoEJB/BeanManager" (should be in state "Installed", but is actually in state "** NOT FOUND Depends on 'java:global/cdi/daoEAR/daoEJB/BeanManager' **")
  Deployment "jboss-switchboard:appName=daoEAR,module=daoEJB,name=PessoaBS" is missing the following dependencies:
    Dependency "java:global/cdi/daoEAR/daoEJB/BeanManager" (should be in state "Installed", but is actually in state "** NOT FOUND Depends on 'java:global/cdi/daoEAR/daoEJB/BeanManager' **")
  Deployment "jboss.j2ee:ear=daoEAR.ear,jar=daoEJB.jar,name=CDIBean,service=EJB3" is missing the following dependencies:
    Dependency "<UNKNOWN jboss.j2ee:ear=daoEAR.ear,jar=daoEJB.jar,name=CDIBean,service=EJB3>" (should be in state "Installed", but is actually in state "** UNRESOLVED Demands 'jboss-injector:bean=CDIBean,interceptor=org.jboss.weld.integration.ejb.SessionBeanInterceptor,topLevelUnit=daoEAR.ear,unit=daoEJB.jar' **")
    Dependency "<UNKNOWN jboss.j2ee:ear=daoEAR.ear,jar=daoEJB.jar,name=CDIBean,service=EJB3>" (should be in state "Installed", but is actually in state "** UNRESOLVED Demands 'jboss-injector:bean=CDIBean,interceptor=org.jboss.weld.integration.ejb.interceptor.Jsr299BindingsInterceptor,topLevelUnit=daoEAR.ear,unit=daoEJB.jar' **")
  Deployment "jboss.j2ee:ear=daoEAR.ear,jar=daoEJB.jar,name=CDIBean,service=EJB3,type=nointerface-view-jndi-binder" is missing the following dependencies:
    Dependency "jboss.j2ee:ear=daoEAR.ear,jar=daoEJB.jar,name=CDIBean,service=EJB3" (should be in state "Installed", but is actually in state "PreInstall")
  Deployment "jboss.j2ee:ear=daoEAR.ear,jar=daoEJB.jar,name=CDIBean,service=EJB3_endpoint" is missing the following dependencies:
    Dependency "jboss.j2ee:ear=daoEAR.ear,jar=daoEJB.jar,name=CDIBean,service=EJB3" (should be in state "Installed", but is actually in state "PreInstall")
  Deployment "jboss.j2ee:ear=daoEAR.ear,jar=daoEJB.jar,name=PessoaBS,service=EJB3" is missing the following dependencies:
    Dependency "<UNKNOWN jboss.j2ee:ear=daoEAR.ear,jar=daoEJB.jar,name=PessoaBS,service=EJB3>" (should be in state "Installed", but is actually in state "** UNRESOLVED Demands 'jboss-injector:bean=PessoaBS,interceptor=org.jboss.weld.integration.ejb.SessionBeanInterceptor,topLevelUnit=daoEAR.ear,unit=daoEJB.jar' **")
    Dependency "<UNKNOWN jboss.j2ee:ear=daoEAR.ear,jar=daoEJB.jar,name=PessoaBS,service=EJB3>" (should be in state "Installed", but is actually in state "** UNRESOLVED Demands 'jboss-injector:bean=PessoaBS,interceptor=org.jboss.weld.integration.ejb.interceptor.Jsr299BindingsInterceptor,topLevelUnit=daoEAR.ear,unit=daoEJB.jar' **")
  Deployment "jboss.j2ee:ear=daoEAR.ear,jar=daoEJB.jar,name=PessoaBS,service=EJB3,type=nointerface-view-jndi-binder" is missing the following dependencies:
    Dependency "jboss.j2ee:ear=daoEAR.ear,jar=daoEJB.jar,name=PessoaBS,service=EJB3" (should be in state "Installed", but is actually in state "PreInstall")
  Deployment "jboss.j2ee:ear=daoEAR.ear,jar=daoEJB.jar,name=PessoaBS,service=EJB3_endpoint" is missing the following dependencies:
    Dependency "jboss.j2ee:ear=daoEAR.ear,jar=daoEJB.jar,name=PessoaBS,service=EJB3" (should be in state "Installed", but is actually in state "PreInstall")

DEPLOYMENTS IN ERROR:
  Deployment "<UNKNOWN jboss.j2ee:ear=daoEAR.ear,jar=daoEJB.jar,name=CDIBean,service=EJB3>" is in error due to the following reason(s): ** UNRESOLVED Demands 'jboss-injector:bean=CDIBean,interceptor=org.jboss.weld.integration.ejb.interceptor.Jsr299BindingsInterceptor,topLevelUnit=daoEAR.ear,unit=daoEJB.jar' **, ** UNRESOLVED Demands 'jboss-injector:bean=CDIBean,interceptor=org.jboss.weld.integration.ejb.SessionBeanInterceptor,topLevelUnit=daoEAR.ear,unit=daoEJB.jar' **
  Deployment "vfs:///C:/jboss-6.0.0.Final/server/default/deploy/daoEAR.ear_WeldBootstrapBean" is in error due to the following reason(s): org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [EntityManager] with qualifiers [@Default] at injection point [[field] @Inject br.com.dao.PessoaDAO.em]
  Deployment "<UNKNOWN jboss-injector:topLevelUnit=daoEAR.ear,unit=daoEJB.jar,bean=PessoaBS,interceptor=org.jboss.weld.integration.ejb.interceptor.Jsr299BindingsInterceptor>" is in error due to the following reason(s): ** UNRESOLVED Demands 'jboss-switchboard:appName=daoEAR,module=daoEJB,name=PessoaBS' **
  Deployment "<UNKNOWN jboss-injector:topLevelUnit=daoEAR.ear,unit=daoEJB.jar,bean=CDIBean,interceptor=org.jboss.weld.integration.ejb.interceptor.Jsr299BindingsInterceptor>" is in error due to the following reason(s): ** UNRESOLVED Demands 'jboss-switchboard:appName=daoEAR,module=daoEJB,name=CDIBean' **
  Deployment "<UNKNOWN jboss-injector:topLevelUnit=daoEAR.ear,unit=daoEJB.jar,bean=PessoaBS,interceptor=org.jboss.weld.integration.ejb.SessionBeanInterceptor>" is in error due to the following reason(s): ** UNRESOLVED Demands 'jboss-switchboard:appName=daoEAR,module=daoEJB,name=PessoaBS' **
  Deployment "<UNKNOWN jboss-injector:topLevelUnit=daoEAR.ear,unit=daoEJB.jar,bean=CDIBean,interceptor=org.jboss.weld.integration.ejb.SessionBeanInterceptor>" is in error due to the following reason(s): ** UNRESOLVED Demands 'jboss-switchboard:appName=daoEAR,module=daoEJB,name=CDIBean' **
  Deployment "java:global/cdi/daoEAR/daoEJB/BeanManager" is in error due to the following reason(s): ** NOT FOUND Depends on 'java:global/cdi/daoEAR/daoEJB/BeanManager' **
  Deployment "<UNKNOWN jboss.j2ee:ear=daoEAR.ear,jar=daoEJB.jar,name=PessoaBS,service=EJB3>" is in error due to the following reason(s): ** UNRESOLVED Demands 'jboss-injector:bean=PessoaBS,interceptor=org.jboss.weld.integration.ejb.SessionBeanInterceptor,topLevelUnit=daoEAR.ear,unit=daoEJB.jar' **, ** UNRESOLVED Demands 'jboss-injector:bean=PessoaBS,interceptor=org.jboss.weld.integration.ejb.interceptor.Jsr299BindingsInterceptor,topLevelUnit=daoEAR.ear,unit=daoEJB.jar' **

	at org.jboss.deployers.plugins.deployers.DeployersImpl.checkComplete(DeployersImpl.java:1370) [:2.2.0.GA]
	at org.jboss.deployers.plugins.deployers.DeployersImpl.checkComplete(DeployersImpl.java:1316) [:2.2.0.GA]
	at org.jboss.deployers.plugins.main.MainDeployerImpl.checkComplete(MainDeployerImpl.java:968) [:2.2.0.GA]
	at org.jboss.system.server.profileservice.deployers.MainDeployerPlugin.checkComplete(MainDeployerPlugin.java:82) [:6.0.0.Final]
	at org.jboss.profileservice.dependency.ProfileControllerContext$DelegateDeployer.checkComplete(ProfileControllerContext.java:138) [:0.2.2]
	at org.jboss.profileservice.deployment.hotdeploy.HDScanner$HDScanAction.deploy(HDScanner.java:246) [:0.2.2]
	at org.jboss.profileservice.deployment.hotdeploy.HDScanner$HDScanAction.complete(HDScanner.java:192) [:0.2.2]
	at org.jboss.profileservice.management.TwoPCActionWrapper.doComplete(TwoPCActionWrapper.java:57) [:0.2.2]
	at org.jboss.profileservice.management.actions.AbstractTwoPhaseModificationAction.complete(AbstractTwoPhaseModificationAction.java:74) [:0.2.2]
	at org.jboss.profileservice.management.actions.AbstractTwoPhaseModificationAction.prepare(AbstractTwoPhaseModificationAction.java:95) [:0.2.2]
	at org.jboss.profileservice.management.ModificationSession.prepare(ModificationSession.java:87) [:0.2.2]
	at org.jboss.profileservice.management.AbstractActionController.internalPerfom(AbstractActionController.java:234) [:0.2.2]
	at org.jboss.profileservice.management.AbstractActionController.performWrite(AbstractActionController.java:213) [:0.2.2]
	at org.jboss.profileservice.management.AbstractActionController.perform(AbstractActionController.java:150) [:0.2.2]
	at org.jboss.profileservice.management.AbstractActionController.perform(AbstractActionController.java:135) [:0.2.2]
	at org.jboss.profileservice.deployment.hotdeploy.HDScanner.scan(HDScanner.java:146) [:0.2.2]
	at org.jboss.profileservice.deployment.hotdeploy.HDScanner.run(HDScanner.java:90) [:0.2.2]
	at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [:1.6.0_24]
	at java.util.concurrent.FutureTask$Sync.innerRunAndReset(Unknown Source) [:1.6.0_24]
	at java.util.concurrent.FutureTask.runAndReset(Unknown Source) [:1.6.0_24]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(Unknown Source) [:1.6.0_24]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(Unknown Source) [:1.6.0_24]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) [:1.6.0_24]
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) [:1.6.0_24]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [:1.6.0_24]
	at java.lang.Thread.run(Unknown Source) [:1.6.0_24]

O que está errado em meu projeto?

No seu DAO coloque a anotação PersistenceContext ao invés de Inject.

[code]public class PessoaDAO {

@PersistenceContext(unitName="sar")
EntityManager em;  
  
public void add(){  
      
    Pessoa p = new Pessoa();  
    p.setNome("Bruno");  
      
    em.persist(p);  
}  

}[/code]

Agora a minha dúvida também é: como injetar o DAO no SB que no meu caso implementa uma interface remota?

Pra resolver seu problema, vc poderia criar um delegate remoto que chamaria o BS local, e no BS local vc injetaria com o Inject mesmo

Hum… não há uma outra maneira de fazer isso não?.. to tentando evitar isso e na verdade to também começando agora com DI!

Um exemplo:
Se eu fizer o BS e nele instanciar o DAO e no DAO fazer um

EntityManagerFactory emf = Persistence.createEntityManagerFactory("PU"); EntityManager em = emf.createEntityManager();
funciona blz… mas na verdade quando eu coloco no DAO o

@PersistenceContext(unitName="PU") private EntityManager em;
dá null pointer, porém se eu fizer a DI (com PersistenceContext) direto no BS que implementa a interface remota ele vai de boa. Nem instanciando o DAO no BS consigo fazer com que o DAO tenha o EntityManager por DI!

PS: Desculpa me intrometer na sua dúvida para esclarecer a minha!!! :wink:

tranquilo, a minha eu já esclareci, funcionou já, só não fechei o tópico porque vocÊ postou uma nova dúvida e me interesse também hehehe

E como foi que resolveu no seu caso? Só anotando com PersistenceContext mesmo?

Sim, o EntityManager com o PersistenceContext e o PessoaDAO injetei com o @Inject, ae fumego tranquilo

Consegui resolver aqui… estou utilizando o Glassfish 3.1 e na verdade não utilizei o @Inject para injetar o DAO e sim a anotação @EJB e no DAO o @PersistenceContext normalmente!
Obrigado pela ajuda! :wink:

Kra

Eu nao consegui usar o @EJB pra injetar o DAO nao =S

Tem alguma configuração especial pra isso?

Você anotou seu DAO com @Stateless?

Ah nao, anotando o DAO como Stateless funciona hehehe, estou falando nao fazer com que o dao vire um EJB, me falaram que o DAO não seria EJB, por isso eu estava procurando um jeito de injetar o EntityManager no DAO.