EJB 2.1 remoto

4 respostas
J

Galera, como devo fazer isso?
Estou usando jboss6.

interface local
public interface TestadorHome extends javax.ejb.EJBHome {
	public Testador create() throws RemoteException, CreateException; 
}
interface remota
public interface Testador extends EJBObject {
	public void testarSelect() throws RemoteException;
}
Bean
public class TestadorBean implements SessionBean  {
	
	SessionContext sessionContext;
	
	public void ejbCreate() throws CreateException {  
	  
	}
	@Override
	public void ejbActivate() throws EJBException, RemoteException {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void ejbPassivate() throws EJBException, RemoteException {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void ejbRemove() throws EJBException, RemoteException {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void setSessionContext(SessionContext arg0) throws EJBException,
			RemoteException {
		this.sessionContext = arg0;
		
	}	
	public void testarSelect() throws RemoteException{
		System.out.println("testando SELECT");
	}
}
Estou tentando acessar com essa classe
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
env.put(Context.PROVIDER_URL, "jnp://<meuIP>:1099");
InitialContext ic = new InitialContext(env);
TestadorHome te = (TestadorHome) ic.lookup("TestadorBean");
Testador t = te.create();
t.testarSelect();

Minhas dúvidas:
1) Como faço para acessar esse EJB TestadorBean remotamente?
2) O Padrão do Jboss não é nomear os ejbs com "nomeDoEAR/NomeDoBean/remote" ???
3) O certo não seria o cliente NÃO precisar da interface Home? Ou no caso do EJB 2.1, o cliente sempre precisará da interface Home e da Remota?

Localmente ele está acessando, mas quero fazer isso remotamente.

Agradeço muito a quem puder me dar uma luz sobre o ejb2.

PS: Achei alguns tutoriais na net, mas a maioria não fala sobre como configurar um ejb que será acessado remotamente e como configurar o cliente dele.

4 Respostas

gomesrod

Esse negócio do nome JNDI é meio mala porque não faz parte da especificação, depende de cada servidor de aplicação. Por esse motivo é que não vemos por aí nos tutoriais.
Esse padrão que vc colocou “nomeDoEAR/NomeDoBean/remote” se não me engano vale só para o EJB 3, no 2.1 é outra coisa… mas só ressaltando: não tenho certeza dessa informação.

Tenho duas dicas que podem ajudar:

  1. Ficar olhando igual um doido para a console do JBoss durante o deploy, na hora que faz o Bind dos EJBs ele mostra o nome JNDI.
  2. Configure o nome JDNI de cada EJB através do arquivo jboss.xml , que vai no diretório META-INF (não tenho a sintaxe de cabeça, mas dá para achar com facilidade na internet). A vantagem dessa solução é que você tem total controle sobre o nome do seu EJB.

E sobre a interface Home é assim mesmo, no ejb 2.1 é feito lookup da Home e não do bean direto. A home é uma espécie de “fábrica”, que uma vez obtida pode ser usada para retornar diversas instancias do bean.

java_es_a_lei

se eu me lembro no EJB 2.x

a Estrutura fica assim TesteFacadeBean ele gera duas interfaces uma local (TesteFacade) e uma remota (TesteFacadeHome)

e também igual a do TesteBean remota (Teste) e local (TesteHome)

ai vc chama a interface TesteFacade que levara a class TesteFacadeBean e aqui dentro vc chama o serviço do Teste que é uma outra interface gerada pelo XDoclet

que me lembro é isso. E respondendo sua pergunta sim o XDoclet do EJB 2.x sempre gera as interface

bom não me lembro muito bem se estiver errado me corrijam

luistiagos

pior e a merda do ejb 1.1 que infelizmente temos que usar aqui para customizar uma Merda das grandes e uma Merda ainda da IBM… a IBM é excelente para hardware mas em software deixam muito a desejar…

gomesrod

Nossa, esse eu nunca ouvi falar que alguém usava.

Criado 14 de junho de 2011
Ultima resposta 14 de jun. de 2011
Respostas 4
Participantes 4