我有一个基于 EclipseLink + JPA Guice Persist 的基础设施
当我重新部署应用程序时,我总是遇到缓存实体的缓存问题,我必须重新启动服务器(Oracle Weblogic 11g)。这个问题在这篇文章中得到了处理:https ://bugs.eclipse.org/bugs/show_bug.cgi ?id=326552 但是,也许不是错误¿?¿? ...
我设法解决了以下问题:
最初我将所有内容集中在一个 GuiceModule 中:
1.创建模块JAPersist
2.调用persistenceService.start()的Initializer类的绑定
public class MyGuiceModule implements Module {
@Override
public void configure(final Binder binder) {
Properties props = _dbConnectionPropertiesForPool();
JpaPersistModule jpaModule = new JpaPersistModule(persistenceUnit);
jpaModule.properties(props);
binder.install(jpaModule);
binder.bind(JPAInitializer.class).asEagerSingleton();
}
public class JPAInitializer {
@Inject
public JPAInitializer(final PersistService service) {
service.start();
}
}
一切正常....但正如我所说的重新部署时保持缓存实例
我是如何解决的?
我改变了方法 JPAInitializer
公共静态类 JPAInitializer {
private static PersistService _persistenceService = null; @Inject public JPAInitializer(final PersistService service) { _persistenceService = service; _persistenceService.start(); } public static void stop() { _persistenceService.stop(); } }
我创建了一个停止服务的方法 stop () ..但是 WTF!我被迫将注入的持久性服务保存在静态变量中:((
从作为入口点的 guice / listener 过滤器调用停止应用程序时取消部署(onContextDestroyed)
公共无效 contextDestroyed(ServletContextEvent servletContextEvent) { JPAInitializer.stop();
}
现在,当我重新部署时,没有缓存问题或问题,也无需重新启动服务器
它是这样工作的,但我不知道是否可以创建一个静态实例 PesistenceService.,所以我试图找到另一种方法来调用停止.....
有什么建议吗?