有人能帮我吗?有一个SessionScoped托管Bean和一个无状态Ejb和另一个有状态Ejb。
MB中的serachCustomer()方法调用注入的DAOEJBTSTSearcCustomer()方法,该方法返回BCus实体对象的实例。我向无状态的DaoEjbTst Ejb注入了另一个有状态的CustomerSession Ejb,当实体实例在DaoEjbTst Ejb中准备好时,我调用CustomerSession Ejb setActualCustomer方法,并作为paramter为该方法提供实体实例,并尝试存储它...然后,当我试图用ManagedBean中的另一个showTstDate()方法获取这个“存储的”实体实例时,它会抛出NullPointer异常…我不知道为什么..为什么在有状态EJB中不存在公共BCus actualCustomer paramter?我尝试在有状态Ejb中创建@predestroy和@prepassivate和@remove方法,以检查容器是否删除它,但容器从未调用这些方法。所以我确信ejb存在…但尽管如此,我无法访问它:(我不使用接口。
下面是我的ManagedBean:
@EJB
private DaoEjbTst daoEjb;
@EJB
private CustomerSession customerSession;
public void serachCustomer() throws IOException {
FacesContext ctx = FacesContext.getCurrentInstance();
if (daoEjb.searcCustomer(custNo)) {
ctx.getExternalContext().redirect("showCustomer.xhtml");
}
else {
ctx.getExternalContext().redirect("test.xhtml");
}
}
public String showTstDate() {
log.info("MB EJB EXIST: " + customerSession);
return "Test: " + customerSession.getActualCustomer().getCustName();
}
@Stateless
public class DaoEjbTst {
private final Logger log = Logger.getLogger("DaoEjbTst.class");
@EJB
private CustomerSession customerSession;
public CustomerSession getCustomerSession() {
return customerSession;
}
public void setCustomerSession(CustomerSession customerSession) {
this.customerSession = customerSession;
}
@PersistenceContext(unitName = "TestAppPU")
private EntityManager em;
public boolean searcCustomer(String custNo) {
try {
BCus cus = (BCus) em.createNamedQuery("BCus.findByCustomerno").setParameter("customerno", custNo).getSingleResult();
log.info("DAOEJB: " + cus);
customerSession.setActualCustomer(cus);
return true;
}
catch (NoResultException e) {
log.info(e.getMessage());
return false;
}
}
@Stateful
public class CustomerSession {
public BCus actualCustomer;
private final Logger log = Logger.getLogger("CustomerSession.class");
public BCus getActualCustomer() {
return actualCustomer;
}
public void setActualCustomer(BCus actualCustomer) {
this.actualCustomer = actualCustomer;
checkTst();
}
public CustomerSession() {
}
}
我认为ManagedBean中注入的CustomerSession bean与DAOEJBTST中注入的bean实例不同。因此调用:
customerSession.getActualCustomer()
在ManagedBean中,由于没有为这个特定的bean实例设置ActualCustomer字段,因此只返回null。它是在DaoEjbTest中设置的,但这是CustomerSession的不同实例。所以:
DaoEjbTst.getCustomerSession().equals(ManagedBean.getCustomerSession())
给出假的。
对于有状态会话bean(SFSB)和无状态会话bean(SLSB)的用法,我有点困惑。 我知道SFSB与客户保持状态。这很有帮助:什么时候使用有状态会话bean而不是无状态会话bean? 这里和许多其他地方提供的示例是SFSB的购物车。 “如果一个任务需要一系列方法调用(不止一次),并且您需要保留以前的结果以在下一次调用中使用它们,那么就可以使用SFSB”--Source。这将更像是签出(页面之间
我正在学习j2ee,如果问题看起来很基本请原谅。 在httpsession中,会话ID存储在客户端,与之相关的数据存储在服务器端。 现在,当我在POJO上使用CDI@SessionScoped时,这是否意味着EJB容器(?)在会话中存储pojo。(Session.SetAttribute(POJO)) CDI可以区分SFB、SLB和POJO吗?
我一直在研究很多类似的问题,这些问题并没有反映我的确切问题。如果我忽略了有人已经解决了这个问题,请让我知道。 我目前正在将JBoss 3.x上的旧EJB2.1应用程序迁移到JBoss 7.x上EJB3.x。由于应用程序客户端和服务器之间通信的变化,我创建了一个小的testclient来检查缺陷。 其中之一是我的无状态会话bean中的entitymanager没有被注入,使entitymanager
问题内容: 假设我有一个实体类,汽车。 我的IDE使我可以从实体类自动生成会话bean,因此最终得到了CarFacade 我也可以生成JSF托管bean 我可以理解Entity类和其他Bean之间的有意义的区别,但是无状态会话Bean和托管Bean之间有什么区别?我读到无状态会话Bean用于实现在实体上运行的业务逻辑,而托管Bean用于通过在托管Bean上使用网页调用方法并进行托管Bean调用来与
假设我有一个名为db utils的简单库,它有一个CrudService CDIBean(RequestScope),我的web应用程序使用它来执行CRUD操作。 我还有一个名为graddb的EJB项目,它从数据库映射实体。Grad db还具有用于在db utils的CrudService中设置entityManager的生产者。 我已经试过了,显然效果不错。我的问题是:这是一种糟糕的做法吗?在无
问题内容: 有状态会话bean和HTTP会话之间有什么关系吗?我们将需要有状态会话Bean的用例是什么,而HTTP会话需要哪些用例。我可以将有状态会话Bean公开为静态Web服务吗? 问题答案: HTTP是一种无状态协议, 这意味着 它是服务器和客户端之间的实际传输协议- 是“无状态的, 因为它在调用之间不记得任何东西。 现在,首先阅读一下什么是HTTPSession和什么是Session Bea