Dentro desse Session Bean, possuo um EntityManager que é injetado pela aplicação, e mais algumas injeções
de depedências através do Seam.
Além disso, possuo 2 métodos. Um para cálculo de Icms, e outro para calculo de Ipi.
Tudo ótimo, tudo funcionando na aplicação.
Qual meu problema?
Quando eu instancio essa classe dentro de outra classe, e tento executar os métodos recebo um NullPointerException.
Ou seja, não consigo instanciar essa classe dentro de outra e utilizar esses métodos. Como posso fazer isso?
entao primeiramente vc tem que fazer uma interface remota para esse seu Session bean
contendo o anotations @Remote
esse seu session bean tem que implementar
depois vc tem que ter dentro dessa sua classe onde vc quer Instanciar essa classe um lookup
segue abaixo a interface e a classe de lookup…
Interface:
[code]import java.rmi.RemoteException;
// Aqui é o annotation para ser acessado remoto, e tbm para ser usado no lookup @Remote
public interface InterfaceBean {
void inserir() throws RemoteException; // É obrigatório usar esse Remote no final de todos os metodos da interface
void editar() throws RemoteException;
}
[/code]
CLasse com o lookup:
usando a classe que eu mandei para o nosso outro amigo com duvidas… heehe
import java.rmi.RemoteException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class TesteNF {
public static void main(String[] args) {
try {
Context context = new InitialContext();
/*
* Veja que no lookup("SessionBean/remote") é
* onde vc vai colocar seu bean/remote, e pela interface vc vai usar os métodos.
*
*/
InterfaceBean i = (InterfaceBean ) context.lookup("SessionBean/remote");
// Aqui ja esta sendo usado pela interface
i.inserir();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Quando eu instancio essa classe dentro de outra classe…[/quote]
Instanciar um SesisonBean? Eita, vc está com um problema mesmo…seria interessante estudar mais profundamente o EJB 3!!!
Se for utilizar o Session Bean dentro do mesmo projeto você implementa uma interface Local e usa a anotação @EJB que o container se encarrega de injeta-lo.
Use somente @Remote se for utilizar maquinas virtuais separadas.
[quote=frazzato]Se for utilizar o Session Bean dentro do mesmo projeto você implementa uma interface Local e usa a anotação @EJB que o container se encarrega de injeta-lo.
Use somente @Remote se for utilizar maquinas virtuais separadas.[/quote]
A anotação @EJB não pode ser usada apenas em Stateful?