我正在研究的一个项目使用Spring 2.5和JPA,并将Hibernate用作提供程序。
我的DAO类扩展了JpaDaoSupport,因此我使用getJpaTemplate()方法获取了JpaTemplate。
后端数据库可以通过我的应用程序或第三方应用程序进行更改。
当第三方应用程序更改数据库(主要是配置数据更改)时,我需要为应用程序的用户提供一种使所有JPA会话无效并重新加载新数据(即在后台使所有hibernate会话无效)的方法。我的应用程序的所有并发用户都需要“看到”该消息。
我怎样才能做到这一点?
缓存分为两个级别:
你可以refresh在一个实体上将其从数据库中重新加载,也可以clear在实体管理器本身中使用,在这种情况下,将从缓存中删除所有实体。JPA无法从缓存中逐出一个特定实体。根据你使用的实现,你可以执行此操作,例如Hibernate的evict方法。
JPA 1.0不提供对第二级缓存的支持。然后,你需要依赖于基础的特定实现或禁用它。JPA 2.0将通过@Cache注释和缓存API 解决此问题。你可以使用特定于Hibernate的API清除二级缓存,例如SessionFactory.evict(…)。
不了解的Hibernate 2级缓存
缓存的高级问题是:
某些查询的结果可以被缓存。再次在JPA 1.0中不支持它,但是大多数实现都有指定将要缓存哪个查询以及如何缓存的方法。
了解Hibernate中的查询缓存
Clustering
然后还有一个麻烦的问题,就是在集群中的节点之间同步缓存。在这种情况下,这主要取决于所使用的缓存技术,例如JBoss缓存。
你的问题仍然是通用的,答案将取决于你的实际工作。
我在一个系统上工作,无需进行hibernate即可完成许多更新,最后我们禁用了第二级缓存。
但是你也可以跟踪所有打开的会话,并在必要时驱逐所有打开的会话的所有第一级缓存以及第二级缓存。你仍然需要自己管理同步,但是我想这是可能的。
问题内容: 我在2个不同的服务器中有2个应用程序-Tomcat(基本上是.WAR文件)和jBoss中的EAR。 EAR是可重用的应用程序,在这里我将对用户进行身份验证并将控件发送回Tomcat上的应用程序。进行身份验证时,我正在jBoss应用程序上创建一个会话对象。 当我将控件发送回Tomcat上的应用程序时,我将询问用户是否要注销身份验证应用程序。如果用户按下“是”按钮,我将不得不从身份验证应用
因此,我尝试使用JSF托管bean上的方法访问HttpSession的属性 但是我得到了一个 为什么啊? 在我的一个会话bean被销毁之前,我需要访问该会话打开的外部服务的连接列表,它们当然存储在会话属性对象上。 我该怎么做?
在我的Vaadin应用程序中,当Vaadin在“session Timeout”消息之后没有使会话无效时,我遇到了一个问题。收到此消息后,用户有时可以单击链接或刷新页面,并继续工作,就像他们仍在登录一样。我使用以下参数: Last参数(session-timeout)也在context.xml(session-timeout=900)和web.xml(session-config/session-
问题内容: 如何在Flask中创建一个新的干净会话并使当前会话无效? 我使用还是? 问题答案: 我使用这种方法尽可能解决了这个问题*: 覆盖,从覆盖版本复制代码,而不是调用它。 当覆盖版本的,使其在分钟后传递一个参数。这会导致超过30分钟的Cookie无效。 经常使更新的覆盖版本成为会话变量,以确保cookie及其时间得到定期重写。(我将这个会话变量命名为并在其中存储当前时间,然后仅在自上次存储的
org.openqa.selenium.NoSuchSessionException:会话ID为空。在调用退出()后使用WebDriver?构建信息:版本:“3.141.59”,修订版:“e82be7d358”,时间:“2018-11-14T08:17:03”系统信息:主机:“DESKTOP-NLBMRCD”,IP:“192.168.1.15”,os.name:“Windows 10”,os.ar
如何使会话中的特定bean无效? 我有这个示例代码。我使用外部上下文进行测试。失效会话();但它会销毁应用程序中会话中的所有bean,因为它会销毁整个会话。 但是,使用invalidateSession,会话中的所有bean都将被销毁,我只想使一个特定的“托管”bean失效,我如何做到这一点?