Dúvida com EJB3

6 respostas
G

Olá pessoal!

Estou com algumas dúvidas relacionada a EJB3.

Tenho uma classe / Session Bean, ele é Stateless.

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?

6 Respostas

nandolup

fala ae Queridao blz?

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:

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;
	
}

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();
		}
	}

}

espero ter ajudado...

felipeguerra

Gbzao!:
Olá pessoal!

Qual meu problema?

Quando eu instancio essa classe dentro de outra classe…


Instanciar um SesisonBean? Eita, vc está com um problema mesmo…seria interessante estudar mais profundamente o EJB 3!!!

G

Muítissimo obrigado nandolup, já deixou bastante coisa mais clara para mim…

Vou estudar mais a fundo!

F

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.

G

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.

A anotação @EJB não pode ser usada apenas em Stateful?

T

lógico q nao

Criado 22 de agosto de 2008
Ultima resposta 22 de ago. de 2008
Respostas 6
Participantes 5