Galera estou fazendo um aplicativo em um trabalho da faculdade em que estou utilizando as tecnologias citadas no assunto deste tópico.
Porém estou tendo um problema para fazer a Dependency Injection de um SessionBean em minhas classes, com a annotation @EJB.
Já tentei fazer no managed bean e não vai.
Criei um classe de testes(com main) e também não funciona.
Simplesmente não acha o EJB (NameNotFoundException).
Tentei fazendo um lookup com ServiceLocator mas não estou conseguindo configurar Context. Se dexo padrão (Context ctx = new InitialContext()) ele diz que tenho que inicializar o contexto.
Quando eu rodo a classe da NullPointerException na chamada do método clinicaVeterinaria.incluirNovo(end); pois não retorna o EJB.
Quando eu rodo a aplicação e faço a DI pelo ManagedBean da uma javax.naming.NameNotFoundException.
D
diolino
Tenta trocar @Stateless(name=“ClinicaVeterinaria”) por @Stateless(mappedName=“ClinicaVeterinaria”)
e @EJB por @EJB(mappedName=“PersistenciaBean”)
sempre uso assim e funciona.
rsakurai
No seu bean Stateless… deixa apenas a notação @Stateless não precisa usar o name.
Na sua classe de TesteEJB, se essa classe é executada fora do ambiente do Glassfish então o @EJB não vai funcionar, vc pode fazer um lookup no EJB:
privatestaticPropertiesgetProperties(){//Propriedades do initial context.Propertiesprops=newProperties();props.setProperty("java.naming.factory.initial","com.sun.enterprise.naming.SerialInitContextFactory");props.setProperty("java.naming.provider.url","localhost:3700");props.setProperty("java.naming.factory.url.pkgs","com.sun.enterprise.naming");returnprops;}publicstaticvoidmain(String[]args){try{InitialContextctx=newInitialContext(getProperties());//Quando vc faz o lookup vc passa o caminho completo da interface local ou remote.ClinicaVeterinariaclinica=(ClinicaVeterinaria)ctx.lookup("ClinicaVeterinaria");Enderecoend=newEndereco();end.setLogradouro("Rua");end.setNumero(199);end.setBairro("Bairro");end.setCidade("Cidade");end.setEstado("SP");end.setCep("100000-000");clinicaVeterinaria.incluirNovo(end);}catch(NamingExceptione){e.printStackTrace();}}
Se ele não encontrar o EJB, adiciona esses jas no seu projeto (esses jars estão no pacote GLASSFISH_HOME\lib)