[RESOLVIDO]EJB not boud e Problema com injeção

Fala feras :smiley:

Sou bem leigo no desenvolvimento utilizando EJB 3.0 e estou com dificuldades para realizar o deploy pq as minhas classes anotadas não estão sendo localizadas. Atualmente tenho um ear e dentro dele tem o arquivo .jar ( módulos ejb’s ) e um arquivo .war ( client web ).

Meu application.xml está da seguinte maneira:

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:application="http://java.sun.com/xml/ns/javaee/application_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd" id="Application_ID" version="5">
  <module>
    <web>
      <web-uri>QCenter-web.war</web-uri>
      <context-root>QCenter-web</context-root>
    </web>
  </module>
</application>

Nesse application.xml, é necessário eu declarar o módulo do arquivo .jar?

Dentro do .jar, eu tenho o arquivo jboss.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN"  "http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd">
<jboss>
	<enterprise-beans>
		<session>
			<ejb-name>RequerimentoServiceImpl</ejb-name>
			<jndi-name>ejb/RequerimentoServiceImpl</jndi-name>
		</session>
		<session>
			<ejb-name>RequerimentoDAOImpl</ejb-name>
			<local-jndi-name>
				ejb/RequerimentoDAOImpl
			</local-jndi-name>
		</session>
	</enterprise-beans>
</jboss>

Tenho o RequerimentoService:

@Local
public interface RequerimentoService {
	Collection<RequerimentoTO> listarTodosRequerimentos();
}

E tenho o ServiceImpl:

@Stateless
public class RequerimentoServiceImpl implements RequerimentoService, Serializable {

	private static final long serialVersionUID = 1L;
	
	@EJB
	private RequerimentoDAO requerimentoDAO;
	
	@Override
	public Collection<RequerimentoTO> listarTodosRequerimentos() {
		Collection<RequerimentoTO> resultado = requerimentoDAO.findAll();
		return resultado;
	}
}

Estou tentando realizar o lookup da seguinte maneira:

	protected RequerimentoService getRequerimentoService(){
		Context context = null;
		try {
			context = new InitialContext();
			requerimentoService = (RequerimentoService) context.lookup("ejb/RequerimentoServiceImpl");
		} catch (NamingException e) {
			e.printStackTrace();
		}
		return requerimentoService;
	}

Por alguma maneira, ele não é encontrado. Alguém pode me dar uma luz pra eu saber se foi feito o deploy do ejb corretamente ou não? Estou utilizando jboss-4.2.3.

Obg

Abs.

Por curiosidade, eu adicionei o seguinte no application.xml

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:application="http://java.sun.com/xml/ns/javaee/application_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd" id="Application_ID" version="5">
  <module>
    <web>
      <web-uri>QualityCenter-web.war</web-uri>
      <context-root>QualityCenter-web</context-root>
    </web>
  </module>
  <module>
  	<ejb>
  	  QualityCenter-ejb.jar
  	</ejb>
  </module>
</application>

Mas continua não rolando :frowning:

Bom, agora este erro foi resolvido, o problema é que no deploy não está conseguindo injetar um ejb:

E minha classe:

@Stateless
public class RequerimentoServiceImpl implements RequerimentoService, Serializable {

	private static final long serialVersionUID = 1L;
	
	@EJB
	private RequerimentoDAO requerimentoDAO;
	
	@Override
	public Collection<RequerimentoTO> listarTodosRequerimentos() {
		Collection<RequerimentoTO> resultado = requerimentoDAO.findAll();
		return resultado;
	}
}

padcoe, na hora de subir o jboss vc consegue notar ele carregando o bean no console?..
se não, entra no web-console e da um invoke la, pra ver se vc consegue ver o seu EJB carregado.
http://localhost:8080/web-console/, vc vai la em System, JMX MBeans, jboss,jboss:service=JNDIView…
tenta recuperar ele via lookup também, as vezes a execeção lançada pode te dar uma luz diferente, outra coisa que vc pode fazer é nomear o bean session… ex: @Stateless(name = “com/teste/meuBOBEAN”).
Ab.

Eu colei o log acima. Ele chega a carregar, mas lança a exceção do nullpointer!

cade o seu requerimento dao.

@Local
public interface RequerimentoDAO extends GenericDAO {

}

@Stateless
public class RequerimentoDAOImpl extends GenericDAOImpl<RequerimentoTO> implements RequerimentoDAO {

	@PersistenceContext(unitName="PU")
	private EntityManager entityManager;
	
	@Override
	protected EntityManager getEntityManager() {
		return entityManager;
	}

}

[quote=AlexSlender]padcoe, na hora de subir o jboss vc consegue notar ele carregando o bean no console?..
se não, entra no web-console e da um invoke la, pra ver se vc consegue ver o seu EJB carregado.
http://localhost:8080/web-console/, vc vai la em System, JMX MBeans, jboss,jboss:service=JNDIView…
tenta recuperar ele via lookup também, as vezes a execeção lançada pode te dar uma luz diferente, outra coisa que vc pode fazer é nomear o bean session… ex: @Stateless(name = “com/teste/meuBOBEAN”).
Ab.[/quote]

Se eu nomear meu session bean, eu posso jogar fora o arquivo jboss.xml?

Tenta assim:

 protected RequerimentoService getRequerimentoService(){  
     Context context = null;  
     try {  
         context = new InitialContext();  
           //nao tava faltando inicilizar o requerimentoSerivce?
        RequerimentoService  requerimentoService = (RequerimentoService) context.lookup("ejb/RequerimentoServiceImpl");   
     } catch (NamingException e) {  
         e.printStackTrace();  
     }  
     return requerimentoService;  
 }

[quote=padcoe][quote=AlexSlender]padcoe, na hora de subir o jboss vc consegue notar ele carregando o bean no console?..
se não, entra no web-console e da um invoke la, pra ver se vc consegue ver o seu EJB carregado.
http://localhost:8080/web-console/, vc vai la em System, JMX MBeans, jboss,jboss:service=JNDIView…
tenta recuperar ele via lookup também, as vezes a execeção lançada pode te dar uma luz diferente, outra coisa que vc pode fazer é nomear o bean session… ex: @Stateless(name = “com/teste/meuBOBEAN”).
Ab.[/quote]

Se eu nomear meu session bean, eu posso jogar fora o arquivo jboss.xml?[/quote]

padcoe, no meu entendimento, uma vez que você anota os caras, você não precisa de descritor xml (jboss.xml)…
faz o teste que te falei, coloca o nome no seu bean e busca ele na JNDI com examente o mesmo nome…
A respeito do application.xml você deve adicionar o tag do módulo ejb…
ex:

<module> <ejb>seuEjb.jar</ejb> </module>

confere sua hierarquia do ear aqui, http://www.jboss.org/community/docs/DOC-13172
Ab.

[RESOLVIDO]: os problemas estavam nos xmls.