我目前正在研究一些在没有App Server的情况下开发的旧Java代码.它基本上是一堆带有输入接口和输出接口的"黑匣子代码"."黑匣子"类中的所有内容都是包含状态的静态数据结构,它们以定时间隔(每10秒)通过算法.黑盒子从主方法启动.
为了让自己保持这种状态,我想把"黑匣子"变成一个单身人士.基本上,任何想要访问黑盒内部逻辑的人都将获得相同的实例.这将允许我使用Message Driven bean作为黑盒子的输入,并使用某种JMS Publisher作为黑盒子的输出.
这个想法有多糟糕?有小费吗?
我遇到的主要问题之一是,我不知道"黑匣子"代码中可能存在Threads.
EJB中有"应用程序范围对象"这样的东西吗?
注意:我正在使用Glassfish
如果使用简单的singelton,一旦进入集群环境,就会遇到问题.
在这种情况下,您在多个JVM上有多个类加载器,并且您的sinlgeton模式将会中断,因为您将拥有该类的多个实例.
应用程序服务器(可能在集群环境中)中单例的唯一可接受用途是当单例完全无状态时,仅用作访问全局数据/函数的便利.
我建议检查应用程序服务器供应商针对此问题的解决方案.大多数(如果不是所有供应商)都会为您提供一些解决方案.
特别是对于你说你正在使用的Glassfish,请查看对Glassfish的Singleton EJB支持.它可能像添加单个注释一样简单.