当前位置:  技术问答>java相关

EJB环境下的Singleton?

    来源: 互联网  发布时间:2017-03-08

    本文导语:  我应用的结构是这样的: client   | ----- 网络边界 -----   |   +--> sessionfacade(sessionbean stateful remote)         |         +--> util(sessionbean stateless local )         |         +--> entity(entitybean local) 即...

我应用的结构是这样的:

client
  |
----- 网络边界 -----
  |
  +--> sessionfacade(sessionbean stateful remote)
        |
        +--> util(sessionbean stateless local )
        |
        +--> entity(entitybean local)

即,在作为 util 的层次上,我采用 stateless sessionbean 来服务多个 sessionfacade 会话的通用操作。我需要在 util 层次提供 cache 能力,比方,缓存部分查询结果之类,(存一个 MAP 实例进行全局 cache )。显然,这个缓存功能的入口应该是在多个 util 的实例之间共享的,也就是说,应该是一个 singleton 对象。但,我似乎无法在 EJB 环境下实现它。至少在我搭建的 apusic 测试环境中,是这样。我尝试过这样几种方法:

1.static成员变量(似乎不管用,而且,EJB的编程限制中提到因该避免使用非final的static变量)

2.标准的singleton模式(似乎也不管用,说到底,它也是由static的一个对象实现的,或许在多 classloader 的模式下,就失去唯一性了)
public class Singleton {

  private Singleton() {}

  // singleton logic
  private static Singleton singleton;
  public static Singleton getInstance(){
    if(singleton == null) singleton = new Singleton(); 
    return instance;
  }

}

3.JNDI保存公用对象(似乎也不管用,或许我的方法不对?感觉是在一个回话退出之后,整个stateless sessionbean被renew了)


有那位大侠曾经试过在 stateless sessionbean 中碰见过类似情况的?请不吝指教解决方法,解我于倒悬。(如能给出实例代码,更将不胜感激)

|
我觉得可以是这样
  +--> sessionfacade(sessionbean stateful remote)
        |
        +--> util(sessionbean stateless local )
        |
        +--> javabean
        |
        +--> entity(entitybean local)

在stateless session和entity直接加个普通的javabean,用它来做缓存,用stateless session从entity把数据取出来放在javabean里,然后供stateful sessionbean来使用。
这样直接在javabean中加个static map或使用Singleton模式都可以了。

|
设计上好象有些问题:
util层用stateless不好,虽然避免了同步的问题,但是同时也失去了共享cached的能力。建议考虑stateful session bean,然后使用行集实现。(一点愚见)

|
刚刚看了ClassLoader的资料,我想singleton方案不行,是因为singleton是自己定义的类,classloader装载的时候不能确定由哪个层次的classloader装载。造成singleton实例的地址不一样。我想用static类的属性的方法也许可行。
public class Maps
{
  public static Map map;
}
这样尽管classloader装载的时候Maps实例的地址不一样,但Map是标准类,是由SystemLoader装载的,那样就同一地址共享了。

水平有限,一点愚见,还请高手指教了。

|
试验的结果却是:另一次会话中,从 singleton 中取回的值完全是一个全新的值。

如果发生了更改,singleton的值当然是个全新的值了。singleton的实例是在多个会话中共享的。

    
 
 

您可能感兴趣的文章:

  • 关于EJB的环境配置我一点不懂,各位大虾有请!分必给!
  • 请问运行编译EJB,需要在什么环境下,如何配置,请给出详细的说明,谢谢!在线......
  • 我想搭建一个EJB的环境,请帮我推荐用什么比较好,只是为了熟悉和学习的。
  • ejb运行的环境如何配置啊?!!
  • 据说在Tomcat下不能开发测试EJB,那么最简单的环境是什么?
  • win98下J2EE该如何环境配置,要运行EJB,试了半天也没成功!
  • 请问客户端运行EJB的环境
  • 请教:在IBM VisualAge For Java 的 WebSphere测试环境中启动 EJB ...
  • EJB问题,关于命名环境。
  • 非常奇怪的关于EJB的环境配置问题.请教高手!!
  • 请问在EJB中,怎样同过JB7在XML的配置描述器中加入些特定的环境属性??谢谢
  • 有关ejb中环境变量的配置问题
  • 怎么样在Jbuilder中配置Jboss和Mysql(建立Jbuilder中EJB调试环境)?
  • 关于访问EJB环境的问题?在线等待……
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • ejb2与ejb1有什么区别? 或哪有ejb2规范的资料?
  • 如何在一个EJB工程中引用另外一个EJB包中的EJB对象?跟帖都有分!!!
  • EJB2.0提供了许多新特性,包括EJB SQL语言,谁有EJB SQL语言的帮助文档,100分求助!
  • EJB测试工具 Ejb3Unit
  • 奇怪啊,奇怪,为什么我的JB7做EJB时,只要在EJB设计面板上随便做点东西,我的EJB的JAVA的源码就会变的不见了,或者少了很多字段申明??
  • EJB的概述,EJB的相关网站?100分给回答最好的
  • EJB应用及JavaBean调用EJB
  • EJB的好书,请推荐,我看了<精通EJB2.0>,好薄哟!!
  • 请给介绍一本EJB的书,我刚学~~不想要《精通EJB》,感觉老了点~~
  • 成立java协会不如成立ejb俱乐部,不过大概没有谁会喜欢ejb了
  • jb中建ejb为什么要先弄个EJB module
  • 移动开发 iis7站长之家
  • 初学EJB,javax.ejb.*; 应该将哪个library 放进来
  • 在win2000下weblogic EJB Deployer 配置ejb时出问题
  • 一个网站适合不适合用ejb???具体在什么情况下,要必须用ejb?和用户数量有关系吗 ??
  • 快来救命啊。EJB调用EJB问题。深度郁闷,高分相送。
  • 谁有 电子版 mastering ejb 2e 多谢!!及学习EJB 集合什么实例学习比较快一点?
  • EJB新手提问,同一服务器(就是同一容器吧)内EJB之间调用如何处理?
  • 在JRUN下如何配置EJB? AND 在J2EE下如何配置EJB?
  • Container-ManagedPersistence的EJB设定EJB Relationship的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3