Lookup de EJB que não acha o bean pelo nome (para testes)

5 respostas
java
Metallica

Olá pessoal, tudo bem?

Estou tentando fazer o lookup de um EJB Stateless para poder testá-lo (sim, isso é um requisito) mas não consigo encontrá-lo de jeito nenhum (nenhum endereço). Já vi num exemplo do TomEE o cara fazendo assim mas ele nao tinha interface (era a classe @Stateless direto). O que estou errando?

public interface Calculo {
      void A();
}

@Stateless
public class CalculoImpl implements Calculo {
     public void A() {
        //codigo
     }
}

No teste (o nome do projeto é currency):

@Before
 public void lookupABean() throws NamingException {
    Calculo calculator;
    EJBContainer ejbContainer = EJBContainer.createEJBContainer();
    Object object = ejbContainer.getContext().lookup("java:global/currency/CalculoImpl");
    
    calculator = (CalculoImpl) object;
}
O erro é que ele nao consegue fazer o lookup do proxy para o meu .

java.lang.ClassCastException: com.sun.proxy.$Proxy39 cannot be cast to com.fexco.currency.ChargeCalculatorImpl

at com.app.currency.ChargeCalculatorTest.lookupABean(ChargeCalculatorTest.java:39)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

Estou usando JavaEE 7 com openejb-core e JUnit 4.11

Podem me ajudar, por favor? Nao sei mais o que fazer

5 Respostas

staroski

Tem que ser assim:

calculator = (Calculo) object;

Metallica

Muito obrigado! Funcionou agora! Que alívio :smiley:

staroski

É que você estava fazendo o cast para a implementação, isso não funciona pois é criado um proxy do objeto, você sempre deve depender somente da interface.

Metallica

É verdade staroski. Eu debuguei o codigo e percebi que era um proxy.

Você parece conhecer bastante de EJB e a estrutura, onde você aprendeu/aprende isso tudo?

staroski

Trabalhando, pesquisando e lendo documentação.

Criado 9 de junho de 2017
Ultima resposta 12 de jun. de 2017
Respostas 5
Participantes 2