我在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();
}
我在这里缺少什么?
答案 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?了解类似问题。