我想在多场战争中分享一个单独的bean。我知道使用parentContextKey属性共享ApplicaitonContext(例如,http://blog.springsource.org/2007/06/11/using-a-shared-parent-application-context-in-a-multi-war-spring-application/)
但这种方式的bean实例创建了多个(2个战争,2个实例)。我希望在两场战争中只有一个实例。
另一种方式,如果我在任何POJO中设置一些值,它应该可以在另一场战争中访问。
我需要的原因是,有一些bean(如HibernateSessionFactory,Datasource等都很昂贵),它们被多次创建(n war for n war)。而我想利用相同的实例,而不是在不同的战争中创造相同的实例。
有人可以为我提供解决方案吗?
答案 0 :(得分:1)
您可以通过将对象绑定到全局JNDI树来实现此目的。这意味着两个WAR都会引用在JNDI中查找的对象。
Hibernate允许您使用hibernate.session_factory_name
属性(this可能是一个很好的起点。数据源应该已经从JNDI中查找。
有一件事,我不会将会话工厂或数据源分类为昂贵,所以你可能会节省很少的内存以换取额外的复杂性,所以我会问自己这个问题是否是值得额外的维护问题。
答案 1 :(得分:1)
Spring提供了一种公开任何bean(服务)的方法,这些bean可以从任何其他Web应用程序或任何独立应用程序进行访问。
请参阅Remoting and Web Service using Spring以获取更多详情。
答案 2 :(得分:0)
你可以结合战争。但我认为这可能会导致其他一些问题。 查看结合战争的this帖子。