有状态bean,JNDI和Jboss WildFly

时间:2014-09-17 21:40:23

标签: jndi wildfly

我正在读一本关于EJB 3.0的书,它说应该使用JNDI查找有状态会话bean。

我有一个有状态会话bean,如下所示:

@Local
@Stateful
public class JpaDao  {

    @PersistenceContext(unitName="EmployeeService")
    EntityManager em;

    public EntityManager getEntityManager() {
        return em;
    }       

    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public void addEmployee(String name, String lastName) {

        Customer cust = new Customer();
.....................
....

在JSF托管bean中,我做了如下:

Context ctx = new InitialContext();
JpaDao jpa = (JpaDao)ctx.lookup("java:comp/env/JpaDao");

但它没有找到任何东西。为什么这样 ?

我打开了wildfly cli客户端并看到了jndi树: 子系统=命名:JNDI视图()

"applications" => {
    "JavaServerFaces-1.0.war" => {
        "java:app" => {
            "AppName" => {
                "class-name" => "java.lang.String",
                "value" => "JavaServerFaces-1.0"
            },
            "env" => {
                "class-name" => "org.jboss.as.naming.NamingContext",
                "value" => "env"
            },
            "JavaServerFaces-1.0" => {
                "class-name" => "javax.naming.Context",
                "children" => {
                    "JpaDao" => {
                        "class-name" => "com.deluxe.common.dao.JpaDao",
                        "value" => "?"
                    },
                    "JpaDao!com.deluxe.common.dao.JpaDao" => {
                        "class-name" => "com.deluxe.common.dao.JpaDao",
                        "value" => "?"
                    }
                }
            }
        },
        "modules" => undefined
    },

它确实显示了JpaDao的条目,然后为什么JNDI查找不返回任何内容。

1 个答案:

答案 0 :(得分:0)

我认为你应该使用java:global /.../ JpaDAO来查找它 但我认为最好使用CDI注入来获取bean而不是显式查找。它还将为您提供bean实例,如果有任何更改,您将不必触摸查询bean的位置。

问题是为什么你为DAO使用有状态会话bean? DAO通常是无状态的,因为它们只是持久存在,......没有任何内部状态的实体。