我正在开发一个封装在耳朵中的企业应用程序。耳朵由一个Enterprise Bean应用程序(在jar中),一个JAX-RS应用程序(在战争中)和一个web应用程序(也在战争中)组成。WebSphere Liberty启动多个单例EJB实例
耳描述符(application.xml中)看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC
"-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN"
"http://java.sun.com/dtd/application_1_3.dtd">
<application>
<display-name>myapp-ear</display-name>
<module>
<web>
<web-uri>myapp-war-1.0.0-SNAPSHOT.war</web-uri>
<context-root>/</context-root>
</web>
</module>
<module>
<web>
<web-uri>myapp-rest-1.0.0-SNAPSHOT.war</web-uri>
<context-root>/api</context-root>
</web>
</module>
<module>
<ejb>myapp-ejb-1.0.0-SNAPSHOT.jar</ejb>
</module>
</application>
的EJB应用程序包含一个单EJB,与@Singleton,@LocalBean和@Startup,它包含一个@Schedule方法进行注释。
我在日志中注意到服务器同时启动了预定方法的三个实例,并且日志的进一步调查显示该bean绑定了三次 - 每个应用程序在耳朵上一次。
这是按照文档http://docs.oracle.com/javaee/6/tutorial/doc/gipjg.html
但是:我有一个不显示这种行为的完整资料WebSphere服务器上运行的类似应用程序。相反,整个企业应用程序只存在一个实例。
的WLP服务器运行17.0.0.1与Java版本1.8.0_101
的问题是,如果这是一个错误 - 还是我失去了在WLP一些重要的设置?
的唯一事情是:我越去想它,所记录的功能没有太大的意义时,您将整个应用程序打包在耳边。你通常只需要一个实例 - 为什么要把所有东西打包在一起并使用Singleton? – danishrulez