Boa noite pessoal,
estou com um problema que já está me tomando várias horas. Estou tentando acessar um EJB de um ManagedBean, mas não estou conseguindo. aparece o erro javax.naming.NameNotFoundException.
Meus códigos são os seguintes:
Bean
package teste;
import javax.ejb.Stateless;
/**
* Session Bean implementation class Alo
*/
@Stateless
public class Alo implements AloLocal, AloRemote {
public String alo(String nome) {
return nome.endsWith("a") ? "Olá" + nome + ", qual é seu telefone?"
: "Alô" + nome + ", desinfeta!";
}
}
ManagedBean
package teste;
import java.util.Properties;
import javax.ejb.EJB;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class Index {
AloLocal servidor;
private String nome;
public String getNome(){ return nome; }
public void setNome(String nome) {
this.nome = nome;
}
public String getResposta(){
Properties props = new Properties();
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");
Context context;
try {
context = new InitialContext(props);
servidor = (AloLocal) context.lookup("Alo");
servidor.alo(nome);
} catch (NamingException e) {
e.printStackTrace();
}
return nome == null ? "" : servidor.alo(nome);
}
}
O exemplo é da Java Magazine número 61.
Como o acesso é pelo managedbean, eu não posso usar o @EJB. E quando eu usava, dava erro.
Qual a solução?