Como devo configurar o EJB? @Stateless sem nada? Ou posso definir um JNDI? Ou teria que ter um JNDI para cada componente (bean)?
Exemplo:
@Stateless(name = "TesteInterfaceRemota"
public class TesteInterfaceRemota implements InterfaceRemota {}
@Stateless(name = "Teste2InterfaceRemota"
public class Teste2InterfaceRemota implements InterfaceRemota {}
Pelo que eu sei, o atributo mappedName não é padrão para todos os servidores, ou seja, o comportamento pode ser diferente dependendo do servidor.
Usando o beanName funcionou comigo (testei apenas no Websphere 6.1).
A inteface:
package stateless;
public interface Test {
public void doSomeStuff();
}
Primeira implementação
package stateless;
import javax.ejb.Stateless;
@Stateless
public class TestBean implements Test {
public void doSomeStuff() {
System.out.println("############### TEST BEAN ######################");
}
}
Segunda implementação
package stateless;
import javax.ejb.Stateless;
@Stateless
public class TestBean2 implements Test {
public void doSomeStuff() {
System.out.println("************* TEST BEAN 2 ***************");
}
}
Chamando os components
public class TestServlet extends javax.servlet.http.HttpServlet {
private static final long serialVersionUID = 1L;
@EJB(beanName="TestBean")
private Test test;
@EJB(beanName="TestBean2")
private Test test2;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
test.doSomeStuff();
test2.doSomeStuff();
response.sendRedirect("index.jsp");
}
}
Saída
[6/18/08 15:29:37:700 BRT] 0000002a SystemOut O ############### TEST BEAN ######################
[6/18/08 15:29:37:700 BRT] 0000002a SystemOut O ************* TEST BEAN 2 ***************
[quote=ManchesteR]Pelo que eu sei, o atributo mappedName não é padrão para todos os servidores, ou seja, o comportamento pode ser diferente dependendo do servidor.
[/quote]
Na verdade ele se referencia ao ‘global JNDI name’, logo é bem provável que ele seja diferente para cada AS(Bean/remote, java:Bean, etc).