Glassfish 在Struts操作中调用EJB对象

Glassfish 在Struts操作中调用EJB对象,glassfish,struts,ejb,Glassfish,Struts,Ejb,我在struts操作中调用EJB对象时遇到问题 我在glassfish中部署了我的应用程序,在glassfish管理控制台的应用程序描述中,我看到部署了一个无状态SessionBean。我的应用程序的.ear文件包括.war(web模块)和.jar(ejb),一个消息驱动的会话bean 当我尝试在struts操作类中调用会话bean时,我得到了nullpointer异常 这是我的电话: @EJB private AccountFacade accountFacade; @Override pu

我在struts操作中调用EJB对象时遇到问题

我在glassfish中部署了我的应用程序,在glassfish管理控制台的应用程序描述中,我看到部署了一个无状态SessionBean。我的应用程序的.ear文件包括.war(web模块)和.jar(ejb),一个消息驱动的会话bean

当我尝试在struts操作类中调用会话bean时,我得到了nullpointer异常

这是我的电话:

@EJB
private AccountFacade accountFacade;

@Override
public ActionForward execute(ActionMapping mapping,
                             ActionForm form,
                             HttpServletRequest request,
                             HttpServletResponse response)
        throws Exception {
    UserCreationForm userCreationForm = (UserCreationForm) form;

    Account account = new Account();
    account.setName(userCreationForm.getName());
    account.setEmail(userCreationForm.getEmail());
    account.setPassword(userCreationForm.getPassword());

    accountFacade.create(account);

    return mapping.findForward(NavigationUtils.ACTION_SUCCESS);
}
此行出现异常:
accountFacade.create(account)

Account facade类如下所示:

@Stateless
public class AccountFacade extends AbstractFacade<Account> implements AccountFacadeLocal {

    /**
     * Persistence context entity manager.
     */
    @PersistenceContext(unitName = "SearchEnginePU")
    private EntityManager em;

    /**
     * Gets entity manager.
     *
     * @return entity manager.
     */
    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    /**
     * Constructor.
     */
    public AccountFacade() {
        super(Account.class);
    }

}
@无状态
公共类AccountFacade扩展AbstractFacade实现AccountFacadeLocal{
/**
*持久性上下文实体管理器。
*/
@PersistenceContext(unitName=“SearchEnginePU”)
私人实体管理者;
/**
*获取实体管理器。
*
*@return实体管理器。
*/
@凌驾
受保护的EntityManager getEntityManager(){
返回em;
}
/**
*构造器。
*/
公共帐户(){
超级(Account.class);
}
}
AccountFacadeLocal接口:

@Local
public interface AccountFacadeLocal {

    void create(Account account);

    void edit(Account account);

    void remove(Account account);

    Account find(Object id);

    List<Account> findAll();

    int count();

}
@Local
公共接口AccountFacadeLocal{
作废创建(账户);
作废编辑(账户);
撤销(账户);
帐户查找(对象id);
列出findAll();
int count();
}

这里我遗漏了什么?

Struts操作不是标准的Java EE web组件,也不是由Java EE容器实例化和管理的,因此EJB不会被注入Struts操作中


使用JNDI查找bean,或者使用(未测试)。另请参见类似问题。

谢谢,您帮助我解决了问题。这是我第一次在struts应用程序中使用EJB,所以我不知道这一点。我使用了JNDI查找,每一个都很好。