在Struts Action中调用EJB对象

时间:2012-04-18 17:40:33

标签: glassfish struts ejb

我在struts action中调用EJB对象时遇到问题。

我在glassfish中部署了我的应用程序,在glassfish管理控制台的应用程序描述中我看到有一个StatelessSessionBean已部署。我的应用程序的.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);

帐户外观类看起来像这样:

@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);
    }

}

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();

}

我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

Struts操作不是标准的Java EE Web组件,并且不由Java EE容器实例化和管理,因此EJB不会在Struts操作中注入。

使用JNDI查找您的bean,或使用http://code.google.com/p/struts-di/(未测试)。另请参阅EJB 3.1: Does it allow injection of beans into resources not managed by the container?了解类似问题。