【问题标题】:Call EJB object in Struts Action在 Struts Action 中调用 EJB 对象
【发布时间】:2012-04-18 17:40:32
【问题描述】:

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

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

当我尝试在 struts 动作类中调用会话 bean 时,我得到空指针异常。

这是我的电话:

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

}

我在这里错过了什么?

【问题讨论】:

    标签: glassfish struts ejb


    【解决方案1】:

    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? 了解类似问题。

    【讨论】:

    • 谢谢,你帮我解决了我的问题。这是我第一次在 struts 应用程序中使用 EJB,所以我不知道这一点。我使用了 JNDI 查找,一切正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    相关资源
    最近更新 更多