Recuperar EJB container OC4J

[color=blue][size=18]Sras ou Srs,

Estou com dificuldade de recuperar um EJB de um container OCJ4 Standalone Server 10.1.3.n, executando dentro do eclipse (galileu)

Talvez por falta de maiores conhecimentos, devo estar cometendo algum erro. Há alguém que possa dar-me uma luz?

Valeu antecipado!

André.

[/size][/color]

//=== A INTERFACE ===========================================

package br.com.xxx.teste;

public interface TestaEjbLocal {

void testarEjb();

}

// ==== A IMPLEMENTAÇÃO =====================================

package br.com.xxx.teste;

import javax.ejb.Local;
import javax.ejb.Stateless;

@Stateless
@Local(TestaEjbLocal.class)
public class TestaEjb implements TestaEjbLocal {

public void testarEjb() {
	System.out.println("=== EXECUTOU TestaEjb ===");

}

}
// === A APLICAÇÃO (main) ======================================

package br.com.xxx.teste;

import java.util.Hashtable;

import javax.ejb.CreateException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class Teste {

@SuppressWarnings("unchecked")
public static void main(String[] args) throws NamingException, CreateException {

	Hashtable env = new Hashtable();
	env.put("java.naming.provider.url", "ormi://localhost:8888/_testeEJB");
	env.put("java.naming.factory.initial", "com.evermind.server.rmi.RMIInitialContextFactory");
	env.put(Context.SECURITY_PRINCIPAL, "oc4jadmin");
	env.put(Context.SECURITY_CREDENTIALS, "welcome");
	Context ctx = new InitialContext (env);
	
	TestaEjbLocal ejb = null;

	try {
		System.out.println("tentando o lookup..."); // A EXECUÇÃO FICA TRAVADA AQUI  !!

		ejb = (TestaEjbLocal) ctx.lookup("java:comp/env/_testeEJB_TestaEjbLocal");
		System.out.println("lookup ok");
		
		ejb.testarEjb();

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

// === O RESULTADO NO CONSOLE ======================================

tentando o lookup…

Primeiro, coloque seus códigos entre as tags code. Assim:

Segundo, troque seu System.out.println por System.err.println. Alguns servidores não mostram os outs, somente os errs. Por isso, uma boa prática é usar um mecanismo de Log mais arrojado, como o sl4j ou a API de log do Java mesmo.

Terceiro, dá exception?

Não dá exception. A execução fica parada ao fazer o lookup e não segue adiante.

Tente trocar sua ejb = (TestaEjbLocal) ctx.lookup("java:comp/env/_testeEJB_TestaEjbLocal"); por ejb = (TestaEjbLocal) ctx.lookup("java:comp/env/ejb/_testeEJB_TestaEjbLocal"); e poste o resultado.

Mesmo problema.
Será que a configuração do contexto está correta?
Hashtable env = new Hashtable();
env.put(“java.naming.provider.url”, “ormi://localhost:8888/_testeEJB”);
env.put(“java.naming.factory.initial”, “com.evermind.server.rmi.RMIInitialContextFactory”);
env.put(Context.SECURITY_PRINCIPAL, “oc4jadmin”);
env.put(Context.SECURITY_CREDENTIALS, “welcome”);
Context ctx = new InitialContext (env);

Acredito que sim. Não uso OC4J. A única diferença é que quando preciso criar o Context, uso Context.PROVIDER_URL e Context.INITIAL_CONTEXT_FACTORY. Tente tirar essa parte de segurança e veja se acontece alguma Exception.

Tentei alterar a linha do provider.url (localhost:8888) para Context.PROVIDER_URL, “ormi://localhost:23891”), e a exceção é lançada:
Tentando o lookup…
javax.naming.CommunicationException: Connection refused: connect [Root exception is java.net.ConnectException: Connection refused: connect]
at com.evermind.server.rmi.RMIClient.lookup(RMIClient.java:311)
at com.evermind.server.rmi.RMIClientContext.lookup(RMIClientContext.java:59)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at br.com.previ.teste.Teste.main(Teste.java:48)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:367)
at java.net.Socket.connect(Socket.java:524)
at java.net.Socket.connect(Socket.java:474)
at java.net.Socket.(Socket.java:371)
at java.net.Socket.(Socket.java:213)
at com.evermind.server.rmi.RMIClientConnection.createSocket(RMIClientConnection.java:802)
at oracle.oc4j.rmi.ClientSocketRmiTransport.createNetworkConnection(ClientSocketRmiTransport.java:59)
at oracle.oc4j.rmi.ClientRmiTransport.connectToServer(ClientRmiTransport.java:75)
at oracle.oc4j.rmi.ClientSocketRmiTransport.connectToServer(ClientSocketRmiTransport.java:69)
at com.evermind.server.rmi.RMIClientConnection.connect(RMIClientConnection.java:765)
at com.evermind.server.rmi.RMIClientConnection.sendLookupRequest(RMIClientConnection.java:247)
at com.evermind.server.rmi.RMIClientConnection.lookup(RMIClientConnection.java:231)
at com.evermind.server.rmi.RMIClient.lookup(RMIClient.java:302)
… 3 more

Não sei, mas acho que a configuração do contexto não está muito correta.