Chamada remota EJB reutilizado o contexto do cliente

12 04 2016

Problema

Ao criar uma chamada remota EJB 2.0 para um outro servidor, notei que o EJB no servidor estava tentando reutilizar o contexto do cliente.

O código no servidor estava tentando fazer um lookup no ser datasource mas com o URL JNDI do cliente ex: t3://clienteIP:PORTA

Código teste de conexão remota EJB

public void addToQueueOnLegacy() {
	InitialContext ic = null;
	try {
		java.util.Properties ht = new java.util.Properties();
		ht.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
		ht.put(javax.naming.Context.PROVIDER_URL, "t3://IP:8080");
		ht.put(javax.naming.Context.SECURITY_PRINCIPAL, "guest");
		ht.put(javax.naming.Context.SECURITY_CREDENTIALS, "guest#password");
		ic = new InitialContext(ht);
		ManageQueueHome objref = (ManageQueueHome) ic.lookup("Multibras.ManageQueueHome");
		ManageQueueHome home = (ManageQueueHome) PortableRemoteObject.narrow(objref, ManageQueueHome.class);
		ManageQueue manageQueue = home.create();
		manageQueue.addToQueue("XYZ", "file_name.xml", 12);
		System.out.println("Chamada EJB remota realizada com SUCESSO \o/");
	} catch (Exception ex) {
		throw new EmpresaException(ex);
	} finally {
		closeContext(ic);
	}
}

private void closeContext(InitialContext ic) {
	if (ic != null) {
		try {
			ic.close();
		}
		catch (Exception e) {
			throw new EmpresaException(e);
		}
	}
}

 

Solução

A causa desse comportamento era porque a configuração de transação do método remoto estava como REQUIRED, ou seja, o weblogic tentava reutilizar a transação criada no cliente.

Acredito que isso seja a funcionalidade de XA do Weblogic.

Para resolver o problema configurei a transação desse método EJB remoto para REQUERED_NEW

ejb-jar.xml

<container-transaction>
	<method>
		<ejb-name>ManageQueue</ejb-name>
		<method-name>addToQueue</method-name>
	</method>
	<trans-attribute>RequiresNew</trans-attribute>
</container-transaction>

 

Anúncios

Ações

Information

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s




%d blogueiros gostam disto: