- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 JBoss7 开发基于 JavaEE6 的 Web 应用程序。在我的应用程序中,我将 EntityManager 注入(inject)到我的 EJB 中:
class ForumServiceEJB
{
@PersistenceContext(type=EXTENDED)
private EntityManager em;
}
class TopicServiceEJB
{
@PersistenceContext(type=EXTENDED)
private EntityManager em;
}
问题是当我使用 ForumServiceEJB 的 EntityManager 更新一些数据然后将更改放入 DB 但 TopicServiceEJB 的 EntityManager 无法看到这些更改并且结果总是从缓存中获取时。
我正在使用 ExtendedPerssisteenceContext,因为我的实体包含延迟加载类型的子实体集合。
如何使用/注入(inject) ExtendedPersistenceContext 类型的 EntityManager 并使一个 EJB 中的不同 EntityManager 仍然可以看到其他不同 EJB EntityManager 所做的更改?
我在某处读到 EntityManagers 应该是 RequestScoped 对象。
public class MyEntityManagerProducers {
@Produces @RequestScoped
public EntityManager createDbEm() {
return Persistence.createEntityManagerFactory("forumDb").
createEntityManager();
}
public void disposeUdEm(@Disposes EntityManager em) {
em.close();
}
这是要走的路吗?
最佳答案
I am using ExtendedPerssisteenceContext as My Entities contain child Entity Collections of Lazy Loading type.
这不是使用EXTENDED
的好理由。我建议您将其设为 default
,即 TRANSACTION
。在非企业环境中或在使用应用程序管理的持久性时,最好使您的 EntityManager
请求范围或方法范围,因为这不是一个很难创建的对象。此外,使用应用程序范围的 EntityManager 都不是一个好主意,因为它不是线程安全的。
话虽如此,当您使用 JBoss 时,您应该让容器处理 EntityManager
的生命周期,以防您使用 JTA。因此,只需将所有内容都注入(inject) default
注意:
只有有状态 session bean 可以具有容器管理的扩展实体管理器。
链接:
建议:
您的业务方法应该知道是否加载子项。但这是理想情况。很多时候我们不能这么说,完全取决于用户输入——我们不能很好地预测。因此,有两种解决方案,
链接:
关于java - JPA 的 EntityManager 应该是 RequestScoped 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10747904/
我乞求使用primefaces,在remoteCommand的这段代码中,我看到#{requestScope.shouldRender},我很困惑 我见
这个问题在这里已经有了答案: Backing beans (@ManagedBean) or CDI Beans (@Named)? (5 个答案) 关闭 4 年前。 我注意到我可以通过使用来自 @
在 JSF2 中,如何将对象从一个请求范围的 bean 传递到另一个请求范围的 bean?我真的不想让它们成为 session 范围的。 也许我可以将一个 bean 注入(inject)另一个? 谢谢
假设我们有一个类: @RequestScoped public class FooService { private NonThreadSafeGenerator generator = n
我正在使用带分页功能的 PrimeFaces 和 Datatable。我有一个支持 bean 的请求范围,当我浏览数据表时,数据消失了(没有任何内容可显示)。我以为数据表只是 Ajax 检索整个数据列
我正在使用 guice-servlet (2.0) 在每个 HTTP 请求开始时注入(inject)一个数据库连接,但是我怎样才能知道请求何时结束以便关闭连接? web.xml Guice
我正在学习使用 JAX-RS 进行一些 Restful api 开发,但我的资源类存在问题。 我的理解是我的资源类应该是 RequestScoped,但是,当它是 RequestScoped 时,我对
在 JSTL 中,您可以在组件中设置变量,这些变量可用于同一请求中的所有其他组件。在 AEM 中使用 sightly 是否有等效的方法在组件之间传递数据? (我们正在研究的用例是我们希望一个组件知道何
我有一个带有 List 属性的 @RequestScoped bean。 import javax.faces.bean.ManagedBean; import javax.faces.bean.Re
编辑4 我想做的是实现forgotPassword页面。例如,我采用了下面的示例,这不是真正的用户相关问题,我将用户名保留在 session 范围内。 index.xhtml将是忘记密码页面,我将在其
我正在开发一个用 @RequestScope 注释的 Service 类,问题是有一个方法需要很长时间才能继续,我想知道是否可以在该部分的哪一部分创建新线程代码将被执行。 我尝试过使用 Managed
我正在尝试创建一个日志服务来存储两个变量,我将在 http 请求的生命周期中使用它们。问题是我无法更改字段。我尝试了 setter 、初始化方法,我可以在调试器中看到值的变化,但在退出方法后,字段为空
这是我在这个美丽的网站上的第一个问题。我用谷歌搜索了很多,但没有找到任何解决方案。 我是 JSF 的新手,正在通过 Kent Ka lok Tong 的“JSF 2 API 和 JBoss Seam”
我的目标是呈现一个具有创建、检索和更新功能的 jsf 页面。我决定为每个操作创建不同的 CDI bean 和不同的复合组件,然后将它们全部放在页面中。 到目前为止一切顺利,但我刚刚完成,我发现了一个非
如果我创建一个用 @RequestScoped 注释的 bean,我希望它会为每个新请求实例化一个新的代理实例。 另一方面,每个请求都与它自己的线程相关联。 我的问题是:如果新请求重用池中先前创建的线
我写了一个 ViewScoped Managed-Bean,每次我在我的网络浏览器中刷新页面时,Managed-Bean 似乎被重新创建,文章为空,它加载一个新的文章对象等等。对我来说,它看起来与 R
package com.atlanticpkg.view.beans; import com.atlanticpkg.controller.ejb.ContactsFacade; import com
我有一个 JSF 页面并有一个与其关联的 Managedbean。 我的 xhtml 页面如下所示:
我观察到下面描述的我的 requestScoped bean 在单个请求期间被创建了多次。每次重新实例化 bean 时,正如日志所说,就在不久之前,bean 被销毁了。 @ManagedBean(na
我的 JEE 6 应用程序正在使用 CDI 以及带有嵌入式 tomee (1.7.2) 的 Arquillian 对其进行测试。在具有多个测试方法的测试类中,同一个 Request Scoped Be
我是一名优秀的程序员,十分优秀!