Dúvida sobre Cliente EJB

5 respostas
Z

Olá grandes mestres, estou precisando muito de ajuda com relação à cliente ejb.

O que eu preciso:
Criar um client EJB que será executado fora de um container (no c: da máquina, por exemplo). Esse client irá procurar pelos componentes EJBs (home, remote, bean) que estão dentro do meu Weblogic.
Então, eu tenho dois jars, um sendo o client e outro com os componentes dentro do weblogic .O acesso a esse jar dentro do weblogic será feito via jndi e meu client será executado através de .bat que será criado e agendado para rodar de tanto em tando tempo.

1° pergunta: é possível acessar esse componente EJB, que está no weblogic, através desse cliente que será executado na máquina, fora do container?

2° pergunta: se sim, tenho que ter a interface home e remota dentro do client e dentro do jar com os componentes EJB?

Senhores, o GUJ já me ajudou muito, por favor, mais uma vez pela que alguém me dê uma luz nesse ponto, já gastei dois dias tentando =(

Muito Obrigado =)

5 Respostas

F

Você já verificou se o Timer Service do WebLogic não atende as suas necessidades.

http://download.oracle.com/docs/cd/E13222_01/wls/docs81/jmx/timer.html

Alexandre_Saudate

Zillo:
Olá grandes mestres, estou precisando muito de ajuda com relação à cliente ejb.

O que eu preciso:
Criar um client EJB que será executado fora de um container (no c: da máquina, por exemplo). Esse client irá procurar pelos componentes EJBs (home, remote, bean) que estão dentro do meu Weblogic.
Então, eu tenho dois jars, um sendo o client e outro com os componentes dentro do weblogic .O acesso a esse jar dentro do weblogic será feito via jndi e meu client será executado através de .bat que será criado e agendado para rodar de tanto em tando tempo.

1° pergunta: é possível acessar esse componente EJB, que está no weblogic, através desse cliente que será executado na máquina, fora do container?

2° pergunta: se sim, tenho que ter a interface home e remota dentro do client e dentro do jar com os componentes EJB?

Senhores, o GUJ já me ajudou muito, por favor, mais uma vez pela que alguém me dê uma luz nesse ponto, já gastei dois dias tentando =(

Muito Obrigado =)

É perfeitamente possível, sim, acessar os EJBs de fora do contêiner. Tudo o que você tem que fazer é configurar o contexto com as propriedades do weblogic (não sei configurar para o weblogic, sorry), e fazer o lookup de acordo com as regras do weblogic. Uma vez feito o lookup, você deve usar a interface remota dos beans e, portanto, elas devem estar num JAR que seja visível para o cliente.

Procure no Google sobre o como configurar o InitialContext para o Weblogic.

[]´s

Andre_Brito

Se for como no JBoss (e OpenEJB), basta você referenciar no seu cliente (no classpath do jar, dentro do manifest) o jar que contém o ServiceLocator (ou o seu @Remote ou @Local - tem que dar uma testada). Na hora de criar o contexto, você configura setando o ip da máquina onde fica o conteiner.

Supondo que nosso cliente seja minhaApp.jar. Dentro dela, você vai ter um manifest, com o classpath referenciando as suas libs MAIS a lib que contém os session beans. Na hora de executar o jar (e criar, pela primeira vez o context), você referencia o context para o ip da máquina onde está o conteiner.

Z

Muito obrigado pelas respostas =)

segue meu client configurado com os dados do weblogic.

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;

class minhaclasse {

 public static void main(String[] args) {

		
	Hashtable t = new Hashtable();
	t.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
	t.put(Context.PROVIDER_URL, "t3://localhost:7001");

	try{
		Context ic = new InitialContext(t);

		Object obj = ic.lookup("EJBBeanSeparado");
		Home home = (Home) PortableRemoteObject.narrow(obj, Home.class);

	}catch(Exception e){
  	     e.printStackTrace();
	}
  }
}

Pelo o que eu entendi, no classpath do meu client.jar eu tenho que referênciar o outro jar(que está no weblogic) que contém as interfaces?

Esse código acima funcionou até o momento de converter o objeto retornado no ic.lookup para essa interface Home que eu tenho dentro do meu client...
Home home = (Home) PortableRemoteObject.narrow(obj, Home.class);//aqui dá erro...

esse é o erro:
java.lang.ClassCastException: Cannot narrow remote object to Home
at weblogic.iiop.PortableRemoteObjectDelegateImpl.narrow(PortableRemoteO
bjectDelegateImpl.java:242)
at javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:137)
at minhaclasse.main(minhaclasse.java:40)

Na verdade essa é uma outra dúvida, tenho que ter a interface home e remote nos dois jars (client e no componente EJB que está no weblogic) ?

No aguardo,

Muito obrigado =)

Z

Fala galera,

Consegui solucionar o problema usando uma dica do André.

No classpath do client eu coloquei o jar que contém o bean e as interfaces…ao executá-lo eu consegui enxergar esse jar que está no weblogic e assim acessar o EJB.

Muito obrigado pela ajuda !!

=)

Criado 4 de agosto de 2010
Ultima resposta 5 de ago. de 2010
Respostas 5
Participantes 4