Lookup de EJB 2.1 no servidor WebSphere

5 respostas
F

Pessoal estou tentando fazer um lookup de um EJB 2.1 no WAS, mas não estou conseguindo criar o contexto.

Por favor aguem poderia me ajudar.

Agradeço.

5 Respostas

F

Ninguém poderia me ajudar…

plentz

Coloque o código que você está tentando rodar e qual o problema que está ocorrendo que podemos tentar te ajudar.

F

Ok plentz, o problema eh que tenhu o código apenas no serviço, agora poderei coloca-lo aqui na segunda soh…Segunda de manhã vo postar o código aqui, obrigado mesmo assim…

Abraço.

F

Pessoal após alguns dias de tentativa consegui evoluir um pouco mas ainda estou encontrando problemas na hora de executar meu initialContext.

segue abaixo minha classe que realiza o initialContext e também a classe que implementa a chamada ao EJB.

ContextEJB:

public class ContextEJB {
	
    private ContextEJB(){
		
    }
    private static ContextEJB instance;
    
    public static ContextEJB getInstance(){

        if(instance == null){
            instance = new ContextEJB();
			
        }
    return instance;
    }
	
    private static InitialContext initialContext = null;
	
    private static Hashtable getEnvironmentProperties() {
        return null;
    }
	
	
    public Object lookup(String jndiName, Class narrowTo) throws NamingException {
        // Obtain initial context
		
        Object obj = null;

        try {
	initialContext = new javax.naming.InitialContext(getEnvironmentProperties());
	Object objRef = initialContext.lookup(jndiName);
	// only narrow if necessary
	if (java.rmi.Remote.class.isAssignableFrom(narrowTo))
	       obj = javax.rmi.PortableRemoteObject.narrow(objRef, narrowTo);
	else
	       obj = objRef;
	} catch (NamingException e) {
	       //throw new ServiceLocatorSefazException(e);
	      e.printStackTrace();
	} finally {
	      try {
		initialContext.close();
	      } catch (NamingException e) {
		//throw new ServiceLocatorSefazException(e);
		e.printStackTrace();
	      }
	}
	return obj;
	}	
}

Delegate onde estou executando a chamada a facade(EJB)

public class ClienteDelegate {
	
    private static final String CLIENTE_FACADE_EJB_HOME = "ejb/br/com/agencia/facade/ClienteFacadeHome";
    private ClienteFacade facade;
	
		
    public ClienteFacade context () throws RemoteException, CreateException{
        ClienteFacadeHome home = null;
		
        try {
	home = (ClienteFacadeHome) ContextEJB.getInstance().lookup(CLIENTE_FACADE_EJB_HOME, ClienteFacadeHome.class);
	
        } catch (NamingException e) {
	// TODO Bloco catch gerado automaticamente
	e.printStackTrace();
        }
        return home.create();
     }	
	
     public void insereCliente (ClienteTO to){
		
          try {
	facade = context();
          } catch (RemoteException e1) {
	// TODO Bloco catch gerado automaticamente
	e1.printStackTrace();
          } catch (CreateException e1) {
	// TODO Bloco catch gerado automaticamente
	e1.printStackTrace();
          }	
		
          try {
	facade.insereCliente(to);
          } catch (RemoteException e) {
	// TODO Bloco catch gerado automaticamente
	e.printStackTrace();
          } catch (SQLException e) {
	// TODO Bloco catch gerado automaticamente
	e.printStackTrace();
          }		
}

Segue abaixo o Erro que aparece na hora que tento executar o metodo
FACADE.INSERECLIENTE(TO)

Por favor se alguem puder me ajudar agradesso… Acredito que tenha que ser inserido um property na hora de criar a intancia

InitialContext initialContext = new InitialContext(property);

lembrando que estou utilizando o WAS como servidor.

Agradeço a todos.

D

opa…

o seu método getEnvironmentProperties() está retornando null…

e aí na hora q é criado o InitialContext é passado null como parametro… e da NullPointerException, claro

implemente o seu getEnvironmentProperties() da seguinte forma:

private static Hashtable getEnvironmentProperties() {
   Hashtable props = new Hashtable();
   props.put( javax.naming.Context.PROVIDER_URL, "IIOP://remote_host_ip_address:port" );
   props.put( javax.naming.Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory" );
   return props;
}

uma dica… carregue essas propriedades de um arquivo .properties… pois no caso de mudança de servidor, porta, ou qualquer outra coisa, vc nao precisa recompilar seu código.

outra dica: não faça singleton de Context… pode dar merda no caso de lookups de dentro de EJBs…

mais uma dica: troque de servidor de aplicalçao. websphere é um lixo, grandes chances de dar merda no seu projeto.

Criado 28 de setembro de 2006
Ultima resposta 7 de out. de 2006
Respostas 5
Participantes 3