Comunicação entre EJBS

4 respostas
F

Oi Pessoal!
Tenho o seguinte problema:

tenho 2 EJBS criados (X e Y) e quero chamar o metodo do EJB Y apartir do EJB X. Estou com a seguinte estrutura: BussinnesDelegate, Facade (Interface), Facade Bean, Interface, Bean. Como faço para comunicar os dois EJBS? Eu poderia instanciar o ServiceLocator na classe Bean X para comunicar com o EJB Y sem quebrar a estrutura J2EE?

Quem puder me ajude, por favor.

4 Respostas

pcalcado

Como assim ‘quebrar’?

Estão no mesmo AS? Se estiverem, use as interfaces locais.

[]s

C

Também não entendi o quebrar! :lol:

Neste cenário que vc colocou o EJB X é o cliente do EJB Y.
As chamadas então serão tal como em qualquer outro cliente, porém, se estiver utilizando um service locator, verfique como está a implementaçao dele, ou seja, se não tem nenhum código de sincronização.
Dê uma olhada neste blueprint da Sun http://java.sun.com/blueprints/code/adventure/1.0/src/ , eles tem dois ServiceLocators, um para web e outro para utilizar nos EJBs.

O que você deve informar no ejb-jar.xml é a referência que EJB X faz ao EJB Y:
olha aí:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"
 "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar >
	<display-name>ManagerTransactionEJB</display-name>
	<enterprise-beans>
		<session >
			<ejb-name>EJBX</ejb-name>
			<home>EJBXHome</home>
			<remote>EJBX</remote>
			<ejb-class>EJBXBean</ejb-class>
			<session-type>Stateless</session-type>
			<transaction-type>Container</transaction-type>
			<ejb-ref >
				<ejb-ref-name>ejb/EJBY</ejb-ref-name>
				<ejb-ref-type>Session</ejb-ref-type>
				<home>EJBYHome</home>
				<remote>EJBY</remote>
				<ejb-link>meu-ejbs.jar#EJBY</ejb-link>
			</ejb-ref>
		</session>
		<session >
			<ejb-name>EJBY</ejb-name>
			<home>EJBYHome</home>
			<remote>EJBY</remote>
			<ejb-class>EJBYBean</ejb-class>
			<session-type>Stateless</session-type>
			<transaction-type>Container</transaction-type>
		</session>
	</enterprise-beans>
</ejb-jar>

Pra utilizar as interfaces locais só muda um pouco o xml!

Falow!!

F

Chicoria,
vou explicar melhor o problema para que fique mais claro:

tenho o BussinessDelegate(BD) chamando a classe FacadeBean(FB) que é um EJB. Neste classe tenho o ServiceLocator para outro EJB que é a classe Bean(B). Então tenho para esta estrutura os classes BDX, BDY, FBX, FBY, BX, BY. Gostaria a partir da classe BX  um método X chamar outro método Y da classe BY. 
Estou fazendo desta forma: o método X da classe BX chama a classe FBY até chegar ao método Y do BY. Mas sempre quando instancio a classe FBY o ServiceLocator retorna null, então não consigo continuar o processamento, então parei neste ponto e não mais prossegui.

Os EJBS estão no mesmo Application Server (AS).
Além da configuração que você me passou do EJB-JAR há mais alguma a ser feita ?

Obrigado desde já!
Alguem mais pode me ajudar?

Até mais!

pcalcado

Fragoso,

provavelmente existe algum problema com os métodos chamados ou com o projeto de seu Delegate.

O delegate deve chamar um método remoto e esperar a resposta, ponto final. Você consegue chamar toda a sequência de métodos se seu cliente estiver dentro do mesmo container EJB? Crie um EJB de exemplo e chame o mesmo método que o Delegate chamaria.

[]s

Criado 28 de outubro de 2004
Ultima resposta 8 de nov. de 2004
Respostas 4
Participantes 3