Olá pessoal,
estou fazendo a migração de uma aplicação com EJB 2.1 do jboss 4.2.3 para o jboss 7.1.1, porém eu gostaria de manter os JNDI declarados no jboss.xml, que agora no 7.1.1 foi substituido pelo jboss-ejb3.xml. Preciso disso por causa de outras aplicações legadas, assim eu não preciso mexer em meu serviceLocator etc.
Pesquisei bastante e não consegui fazer funcionar, consegui apenas que ele interpretasse o arquivo sem erros, porém o JNDI não fez efeito.
Abaixo segue exemplo de como era no jboss.xml e como eu tentei no jboss-ejb3.xml.
jboss.xml:
<session>
<ejb-name>WidgetEJB</ejb-name>
<jndi-name>com.company.app.ejb/WidgetEJB</jndi-name>
</session>
jboss-ejb3.xml:
<session>
<ejb-name>WidgetEJB</ejb-name>
<ejb-ref>
<ejb-ref-name>WidgetEJB</ejb-ref-name>
<lookup-name>com.company.app.ejb/WidgetEJB</lookup-name> (I tried with look-up and jndi-name, but no way it worked)
<jndi-name>com.company.app.ejb/WidgetEJB</jndi-name>
</ejb-ref>
</session>
Alguém pode ajudar?
Obrigado
no JBoss 7 ficou um pouco diferente…
Sintaxe ejb:[ear]/[ejbModule]//[Classe implementadora do EJB]![Caminho completo da interface do EJB]?[stateful ou stateless]
ex:
ejb:meu-projeto-ear/meu-projeto-ejb//MeuBOImpl!br.com.meuprojeto.MeuBO?stateful
ou leia este tutorial
Olá,
Eu entendi que mudou, porém pesquisando nos fóruns do jboss, o pessoal comentou que é possível definir o JNDI.
Tem alguns exemplos, mas nenhum funcionou…
Apenas complementando, já fiz testes com esse novo padrão de JNDI do Jboss 7.1 e funcionou.
Porém como tenho muitas aplicações legadas, fica muito trabalhoso alterar todas…
O próprio JBoss lista pra você ao startar… de todos os EJBs
mas a única maneira que consegui fazer o lookup foi da maneira que eu te mostrei acima…
Hashtable jndiProperties = new Hashtable();
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
Context context = new InitialContext(jndiProperties);
String ejb = "meu-projeto-ear/meu-projeto-ejb//MeuBOImpl!br.com.meuprojeto.MeuBO?stateful";
Object obj = context.lookup(ejb);
Isso mesmo! Eu já havia feito alguns testes com os jndi que ele indica.
Fiz mais algumas pesquisas e acho que por enquanto não vai ser possível customizar meu JNDI mesmo…
O jeito é atualizar as aplicações para se adequarem ao novo padrão.
De qualquer forma obrigado!
Galera, só consegui fazer funcionar copiando meu .jar para a pasta WEB-INF/lib e setando esse caminho no class-path do arquivo MANIFEST.MF porém para projetos maiores eu vou ter que ficar duplicando dezenas de .jar
Quando troco esta linha ctx.lookup(“ejb:/clienteejb/AlunoFacade!facade.AlunoFacadeLocal”);
por este:
ctx.lookup("ejb:/lesejb/Aluno… ( lesejb é o projeto ejb que já está na pasta de deploy do jboss)
dá nesse erro:
[color=red]javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:[/color]
preciso colocar alguma coisa no class-path quando utilizar o .jar que está na pasta de deploy?
meu cliente está assim:
private static AlunoFacadeLocal lookupdaporra() throws NamingException{
Properties jndiProps = new Properties();
jndiProps.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
InitialContext ctx = new InitialContext(jndiProps);
return (AlunoFacadeLocal) ctx.lookup("ejb:/clienteejb/AlunoFacade!facade.AlunoFacadeLocal");
}
public Main() throws NamingException {
// TODO Auto-generated method stub
try {
AlunoFacadeLocal alunoFacadeLocal;
alunoFacadeLocal = lookupdaporra();
ArrayList<Aluno> alunos = new ArrayList<Aluno>();
alunos = (ArrayList<Aluno>) alunoFacadeLocal.findAll();
System.out.println("SIZE: "+alunos.size());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}