Jav*_*ven 4 java apache-servicemix
我在静态领域遇到了问题.我认为根本原因必须是静态字段的范围.
该项目基于Apache servicemix,由许多子项目组成.
在子项目"A"中,我在"注册"类中定义了一个静态列表字段"reg",并使用一些静态方法来操作该字段,如"add"和"getAll".部署子项目A后,项目"A"的名称将添加到静态列表中以进行注册.
问题是当涉及子项目'B'时,当子项目'B'被部署时,我希望它的名称将被添加到完全相同的静态列表中以进行注册.但是当我调用静态方法getAll或添加'注册'时,子项目B中的'reg'似乎与子项目A中的'reg'完全不同.因此注册功能不起作用.
所以我想问一个基本问题,静态字段的范围是什么?它在JVM或其他一些东西中有效吗?
谢谢你的帮助
静态的范围是全局的 - 在其拥有的类加载器中.JVM可以创建多个类加载器,并在每个新的类加载器中加载类的单独实例.
静态不是每个JVM的全局,它们是每个类加载器的全局.如果具有静态字段的类加载到不同的类加载器中,则其静态成员将不会在不同的类加载器中可见.
如何部署项目A和项目B?它们是否在同一个类加载器中?
我不熟悉servicemix,但我想它会在单独的类加载器中部署单独的应用程序,就像Java EE应用程序将在不同的类加载器中部署同一应用程序的不同版本一样,因此您可以运行app 1.0和app 1.1 side-by-一方面,它们不会相互影响.
这是设计的.
如果是这种情况,您需要一些独立的东西来维护共享状态.(例如数据库)
| 归档时间: |
|
| 查看次数: |
749 次 |
| 最近记录: |