1

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

}

我在这里想念什么?

4

1 回答 1

3

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

使用 JNDI 查找您的 bean,或使用http://code.google.com/p/struts-di/(未测试)。另请参阅EJB 3.1:它是否允许将 bean 注入到不受容器管理的资源中?对于类似的问题。

于 2012-04-18T18:29:49.527 回答