Java @在WebLogic(EJB3.1)中两次实例化Startup@Singleton

Java @在WebLogic(EJB3.1)中两次实例化Startup@Singleton,java,java-ee-6,ejb-3.1,Java,Java Ee 6,Ejb 3.1,我有一个标记为@Startup和@Singleton的类,构造函数被调用了两次 为什么要叫两次 WebLogic 12.1.1 在本地运行(不是群集) @后构造在那里时也被称为两次 与XML配置无关(weblogic-ejb-jar.XML等) 下面是课堂: import java.util.concurrent.atomic.AtomicInteger; import javax.ejb.Singleton; import javax.ejb.Startup; @Startup @Si

我有一个标记为
@Startup
@Singleton
的类,构造函数被调用了两次

为什么要叫两次

  • WebLogic 12.1.1
  • 在本地运行(不是群集)
  • @后构造在那里时也被称为两次
  • 与XML配置无关(weblogic-ejb-jar.XML等)
下面是课堂:

import java.util.concurrent.atomic.AtomicInteger;

import javax.ejb.Singleton;
import javax.ejb.Startup;

@Startup
@Singleton
public class CacheStartupListener {

    static AtomicInteger count= new AtomicInteger(0); 

    public CacheStartupListener() {
        System.err.println("Singleton invoked " + count.incrementAndGet() + " " + getClass().getClassLoader().toString());  
    }
}
我可以从输出中看出,构造函数两次都是从同一个类加载器调用的

构造函数中的stacktrace都通过
wlfullclient-12.1.1jar
,但是stacktrace在其他方面是不同的

以下是第一次实例化的堆栈跟踪:

Daemon Thread [[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'] (Suspended (breakpoint at line 30 in CacheStartupListener)) (out of synch)   
    CacheStartupListener_m3hhum_NoIntfViewImpl(CacheStartupListener).<init>() line: 30 (out of synch)   
    CacheStartupListener_m3hhum_NoIntfViewImpl.<init>(SingletonLocalObject) line: not available 
    NativeConstructorAccessorImpl.newInstance0(Constructor, Object[]) line: not available [native method]   
    NativeConstructorAccessorImpl.newInstance(Object[]) line: 57    
    DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 45    
    Constructor<T>.newInstance(Object...) line: 525 
    SingletonEJBLocalHomeImpl.allocateBI(Class<T>) line: 45 
    SingletonEJBLocalHomeImpl.prepare() line: 30    
    SingletonSessionBeanInfoImpl(SessionBeanInfoImpl).prepare() line: 458   
    SingletonSessionBeanInfoImpl.prepare() line: 115    
    EJBDeployer.setupBeanInfos() line: 767  
    EJBDeployer.prepare(VirtualJarFile, EjbDescriptorBean) line: 920    
    EJBModule.prepare() line: 419   
    ScopedModuleDriver.prepare() line: 188  
    ExtensibleModuleWrapper.prepare() line: 83  
    ModuleListenerInvoker.prepare() line: 100   
    ModuleStateDriver$1.next(Module) line: 172  
    ModuleStateDriver$1.next(Object) line: 167  
    StateMachineDriver<StateMachine>.nextState(StateChange<StateMachine>, StateMachine[]) line: 35  
    ModuleStateDriver.prepare(Module[]) line: 38    
    DeploymentCallbackFlow.prepare(Module[]) line: 139  
    DeploymentCallbackFlow.prepare() line: 55   
    BaseDeployment$1.next(Object) line: 706 
    StateMachineDriver<StateMachine>.nextState(StateChange<StateMachine>, StateMachine[]) line: 35  
    EarDeployment(BaseDeployment).prepare(DeploymentContext) line: 237  
    EarDeployment.prepare(DeploymentContext) line: 61   
    DeploymentStateChecker.prepare(DeploymentContext) line: 158 
    AppContainerInvoker.prepare(DeploymentContext) line: 60 
    RedeployOperation.createAndPrepareContainer() line: 104 
    RedeployOperation.doPrepare() line: 138 
    RedeployOperation(AbstractOperation).prepare() line: 229    
    DeploymentManager.handleDeploymentPrepare(Deployment, DeploymentManager$DeploymentRequestInfo) line: 747    
    DeploymentManager.prepareDeploymentList(ArrayList, DeploymentContext) line: 1216    
    DeploymentManager.handlePrepare(DeploymentContext) line: 250    
    DeploymentServiceDispatcher.prepare(DeploymentContext) line: 159    
    DeploymentReceiverCallbackDeliverer.doPrepareCallback(DeploymentContext) line: 171  
    DeploymentReceiverCallbackDeliverer.access$000(DeploymentReceiverCallbackDeliverer, DeploymentContext) line: 13 
    DeploymentReceiverCallbackDeliverer$1.run() line: 46    
    SelfTuningWorkManagerImpl$WorkAdapterImpl.run() line: 545   
    ExecuteThread.execute(Runnable) line: 256   
    ExecuteThread.run() line: 221   
Daemon Thread [[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'] (Suspended (breakpoint at line 30 in CacheStartupListener)) (out of synch)   
    CacheStartupListener_m3hhum_Impl(CacheStartupListener).<init>() line: 30 (out of synch) 
    CacheStartupListener_m3hhum_Impl.<init>() line: not available   
    NativeConstructorAccessorImpl.newInstance0(Constructor, Object[]) line: not available [native method]   
    NativeConstructorAccessorImpl.newInstance(Object[]) line: 57    
    DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 45    
    Constructor<T>.newInstance(Object...) line: 525 
    WeldConstructorImpl<T>.newInstance(Object...) line: 204 
    ConstructorInjectionPoint<T>.newInstance(BeanManagerImpl, CreationalContext<?>) line: 117   
    ExtendedSessionBean(SessionBean<T>).createInstance(CreationalContext<T>) line: 212  
    ExtendedSessionBean.derivedCreateInstance(CreationalContext) line: 35   
    WeldEjbBeanManager$ExtendedInjectionTarget.produce(CreationalContext) line: 131 
    WeldEjbBeanManager.newBeanInstance(String) line: 78 
    InjectionBasedEjbComponentCreator.getBean(String, Class, boolean) line: 75  
    SingletonSessionManager(BaseEJBManager).createNewBeanInstance() line: 209   
    SingletonSessionManager.constructAndInitBean() line: 353    
    SingletonSessionManager.access$300(SingletonSessionManager) line: 63    
    SingletonSessionManager$SingletonLifecycleManager.doActualInit() line: 798  
    SingletonSessionManager$SingletonLifecycleManager.initInternal(boolean) line: 744   
    SingletonSessionManager$SingletonLifecycleManager.init() line: 631  
    SingletonSessionManager.init() line: 280    
    SingletonSessionManager.perhapsInit() line: 276 
    EJBDeployer.initializeBeans() line: 1287    
    EJBDeployer.start() line: 1174  
    EJBModule.start() line: 590 
    ModuleStateDriver$3.next(Module) line: 213  
    ModuleStateDriver$3.next(Object) line: 208  
    StateMachineDriver<StateMachine>.nextState(StateChange<StateMachine>, StateMachine[]) line: 35  
    ModuleStateDriver.start(Module[]) line: 70  
    ScopedModuleDriver.start() line: 212    
    ExtensibleModuleWrapper.start() line: 111   
    ModuleListenerInvoker.start() line: 124 
    ModuleStateDriver$3.next(Module) line: 213  
    ModuleStateDriver$3.next(Object) line: 208  
    StateMachineDriver<StateMachine>.nextState(StateChange<StateMachine>, StateMachine[]) line: 35  
    ModuleStateDriver.start(Module[]) line: 70  
    StartModulesFlow.activate() line: 24    
    BaseDeployment$2.next(Object) line: 729 
    StateMachineDriver<StateMachine>.nextState(StateChange<StateMachine>, StateMachine[]) line: 35  
    EarDeployment(BaseDeployment).activate(DeploymentContext) line: 258 
    EarDeployment.activate(DeploymentContext) line: 61  
    DeploymentStateChecker.activate(DeploymentContext) line: 165    
    AppContainerInvoker.activate(DeploymentContext) line: 79    
    RedeployOperation(AbstractOperation).activate(Deployment) line: 582 
    RedeployOperation(ActivateOperation).activateDeployment() line: 148 
    RedeployOperation(ActivateOperation).doCommit() line: 114   
    RedeployOperation(AbstractOperation).commit() line: 335 
    DeploymentManager.handleDeploymentCommit(Deployment, AbstractOperation) line: 844   
    DeploymentManager.activateDeploymentList(ArrayList, DeploymentManager$DeploymentRequestInfo) line: 1253 
    DeploymentManager.handleCommit(DeploymentContext) line: 440 
    DeploymentServiceDispatcher.commit(DeploymentContext) line: 163 
    DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentContext) line: 195   
    DeploymentReceiverCallbackDeliverer.access$100(DeploymentReceiverCallbackDeliverer, DeploymentContext) line: 13 
    DeploymentReceiverCallbackDeliverer$2.run() line: 68    
    SelfTuningWorkManagerImpl$WorkAdapterImpl.run() line: 545   
    ExecuteThread.execute(Runnable) line: 256   
    ExecuteThread.run() line: 221   
Daemon线程[[ACTIVE]ExecuteThread:'0'用于队列:'weblogic.kernel.Default(自调优)'(挂起(CacheStartupListener中第30行的断点))(不同步)
CacheStartupListener_m3hhum_NoIntfViewImpl(CacheStartupListener)。()行:30(不同步)
CacheStartupListener_m3hhum_NoIntfViewImpl.(SingletonLocalObject)行:不可用
NativeConstructorAccessorImpl.newInstance0(构造函数,对象[])行:不可用[本机方法]
NativeConstructorAccessorImpl.newInstance(对象[])行:57
DelegatingConstructorAccessorImpl.newInstance(对象[])行:45
构造函数.newInstance(对象…)行:525
SingletonEJBLocalHomeImpl.allocateBI(类)行:45
SingletonEJBLocalHomeImpl.prepare()行:30
SingletonSessionBeanInfoImpl(SessionBeanInfoImpl).prepare()行:458
SingletonSessionBeanInfoImpl.prepare()行:115
EJBDeployer.setupBeanInfos()行:767
准备(VirtualJarFile,EjbDescriptorBean)行:920
EJBModule.prepare()行:419
ScopedModuleDriver.prepare()行:188
ExtensibleModuleWrapper.prepare()行:83
ModuleListenerInvoker.prepare()行:100
ModuleStateDriver$1。下一(模块)行:172
ModuleStateDriver$1。下一行(对象)167
StateMachineDriver.nextState(StateChange,StateMachine[])行:35
ModuleStateDriver.准备(模块[])行:38
部署调用回流。准备(模块[])行:139
DeploymentCallbackFlow.prepare()行:55
BaseDeployment$1。下一(对象)行:706
StateMachineDriver.nextState(StateChange,StateMachine[])行:35
EarDeployment(BaseDeployment).准备(DeploymentContext)行:237
EarDeployment.prepare(DeploymentContext)行:61
DeploymentStateChecker.prepare(DeploymentContext)行:158
AppContainerInvoker.prepare(DeploymentContext)行:60
RedeployOperation.createAndPrepareContainer()行:104
RedeployOperation.doPrepare()行:138
重新部署操作(AbstractOperation).prepare()行:229
DeploymentManager.handleDeploymentPrepare(部署,DeploymentManager$DeploymentRequestInfo)行:747
DeploymentManager.prepareDeploymentList(ArrayList,DeploymentContext)行:1216
DeploymentManager.handlePrepare(DeploymentContext)行:250
DeploymentServiceDispatcher.prepare(DeploymentContext)行:159
DeploymentReceiverCallbackDeliver.doPrepareCallback(DeploymentContext)行:171
DeploymentReceiverCallbackDeliver.access$000(DeploymentReceiverCallbackDeliver,DeploymentContext)行:13
DeploymentReceiverCallbackDeliver$1.run()行:46
SelfTuningWorkManagerImpl$WorkAdapterImpl.run()行:545
ExecuteThread.execute(可运行)行:256
ExecuteThread.run()行:221
下面是第二次实例化的堆栈跟踪:

Daemon Thread [[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'] (Suspended (breakpoint at line 30 in CacheStartupListener)) (out of synch)   
    CacheStartupListener_m3hhum_NoIntfViewImpl(CacheStartupListener).<init>() line: 30 (out of synch)   
    CacheStartupListener_m3hhum_NoIntfViewImpl.<init>(SingletonLocalObject) line: not available 
    NativeConstructorAccessorImpl.newInstance0(Constructor, Object[]) line: not available [native method]   
    NativeConstructorAccessorImpl.newInstance(Object[]) line: 57    
    DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 45    
    Constructor<T>.newInstance(Object...) line: 525 
    SingletonEJBLocalHomeImpl.allocateBI(Class<T>) line: 45 
    SingletonEJBLocalHomeImpl.prepare() line: 30    
    SingletonSessionBeanInfoImpl(SessionBeanInfoImpl).prepare() line: 458   
    SingletonSessionBeanInfoImpl.prepare() line: 115    
    EJBDeployer.setupBeanInfos() line: 767  
    EJBDeployer.prepare(VirtualJarFile, EjbDescriptorBean) line: 920    
    EJBModule.prepare() line: 419   
    ScopedModuleDriver.prepare() line: 188  
    ExtensibleModuleWrapper.prepare() line: 83  
    ModuleListenerInvoker.prepare() line: 100   
    ModuleStateDriver$1.next(Module) line: 172  
    ModuleStateDriver$1.next(Object) line: 167  
    StateMachineDriver<StateMachine>.nextState(StateChange<StateMachine>, StateMachine[]) line: 35  
    ModuleStateDriver.prepare(Module[]) line: 38    
    DeploymentCallbackFlow.prepare(Module[]) line: 139  
    DeploymentCallbackFlow.prepare() line: 55   
    BaseDeployment$1.next(Object) line: 706 
    StateMachineDriver<StateMachine>.nextState(StateChange<StateMachine>, StateMachine[]) line: 35  
    EarDeployment(BaseDeployment).prepare(DeploymentContext) line: 237  
    EarDeployment.prepare(DeploymentContext) line: 61   
    DeploymentStateChecker.prepare(DeploymentContext) line: 158 
    AppContainerInvoker.prepare(DeploymentContext) line: 60 
    RedeployOperation.createAndPrepareContainer() line: 104 
    RedeployOperation.doPrepare() line: 138 
    RedeployOperation(AbstractOperation).prepare() line: 229    
    DeploymentManager.handleDeploymentPrepare(Deployment, DeploymentManager$DeploymentRequestInfo) line: 747    
    DeploymentManager.prepareDeploymentList(ArrayList, DeploymentContext) line: 1216    
    DeploymentManager.handlePrepare(DeploymentContext) line: 250    
    DeploymentServiceDispatcher.prepare(DeploymentContext) line: 159    
    DeploymentReceiverCallbackDeliverer.doPrepareCallback(DeploymentContext) line: 171  
    DeploymentReceiverCallbackDeliverer.access$000(DeploymentReceiverCallbackDeliverer, DeploymentContext) line: 13 
    DeploymentReceiverCallbackDeliverer$1.run() line: 46    
    SelfTuningWorkManagerImpl$WorkAdapterImpl.run() line: 545   
    ExecuteThread.execute(Runnable) line: 256   
    ExecuteThread.run() line: 221   
Daemon Thread [[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'] (Suspended (breakpoint at line 30 in CacheStartupListener)) (out of synch)   
    CacheStartupListener_m3hhum_Impl(CacheStartupListener).<init>() line: 30 (out of synch) 
    CacheStartupListener_m3hhum_Impl.<init>() line: not available   
    NativeConstructorAccessorImpl.newInstance0(Constructor, Object[]) line: not available [native method]   
    NativeConstructorAccessorImpl.newInstance(Object[]) line: 57    
    DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 45    
    Constructor<T>.newInstance(Object...) line: 525 
    WeldConstructorImpl<T>.newInstance(Object...) line: 204 
    ConstructorInjectionPoint<T>.newInstance(BeanManagerImpl, CreationalContext<?>) line: 117   
    ExtendedSessionBean(SessionBean<T>).createInstance(CreationalContext<T>) line: 212  
    ExtendedSessionBean.derivedCreateInstance(CreationalContext) line: 35   
    WeldEjbBeanManager$ExtendedInjectionTarget.produce(CreationalContext) line: 131 
    WeldEjbBeanManager.newBeanInstance(String) line: 78 
    InjectionBasedEjbComponentCreator.getBean(String, Class, boolean) line: 75  
    SingletonSessionManager(BaseEJBManager).createNewBeanInstance() line: 209   
    SingletonSessionManager.constructAndInitBean() line: 353    
    SingletonSessionManager.access$300(SingletonSessionManager) line: 63    
    SingletonSessionManager$SingletonLifecycleManager.doActualInit() line: 798  
    SingletonSessionManager$SingletonLifecycleManager.initInternal(boolean) line: 744   
    SingletonSessionManager$SingletonLifecycleManager.init() line: 631  
    SingletonSessionManager.init() line: 280    
    SingletonSessionManager.perhapsInit() line: 276 
    EJBDeployer.initializeBeans() line: 1287    
    EJBDeployer.start() line: 1174  
    EJBModule.start() line: 590 
    ModuleStateDriver$3.next(Module) line: 213  
    ModuleStateDriver$3.next(Object) line: 208  
    StateMachineDriver<StateMachine>.nextState(StateChange<StateMachine>, StateMachine[]) line: 35  
    ModuleStateDriver.start(Module[]) line: 70  
    ScopedModuleDriver.start() line: 212    
    ExtensibleModuleWrapper.start() line: 111   
    ModuleListenerInvoker.start() line: 124 
    ModuleStateDriver$3.next(Module) line: 213  
    ModuleStateDriver$3.next(Object) line: 208  
    StateMachineDriver<StateMachine>.nextState(StateChange<StateMachine>, StateMachine[]) line: 35  
    ModuleStateDriver.start(Module[]) line: 70  
    StartModulesFlow.activate() line: 24    
    BaseDeployment$2.next(Object) line: 729 
    StateMachineDriver<StateMachine>.nextState(StateChange<StateMachine>, StateMachine[]) line: 35  
    EarDeployment(BaseDeployment).activate(DeploymentContext) line: 258 
    EarDeployment.activate(DeploymentContext) line: 61  
    DeploymentStateChecker.activate(DeploymentContext) line: 165    
    AppContainerInvoker.activate(DeploymentContext) line: 79    
    RedeployOperation(AbstractOperation).activate(Deployment) line: 582 
    RedeployOperation(ActivateOperation).activateDeployment() line: 148 
    RedeployOperation(ActivateOperation).doCommit() line: 114   
    RedeployOperation(AbstractOperation).commit() line: 335 
    DeploymentManager.handleDeploymentCommit(Deployment, AbstractOperation) line: 844   
    DeploymentManager.activateDeploymentList(ArrayList, DeploymentManager$DeploymentRequestInfo) line: 1253 
    DeploymentManager.handleCommit(DeploymentContext) line: 440 
    DeploymentServiceDispatcher.commit(DeploymentContext) line: 163 
    DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentContext) line: 195   
    DeploymentReceiverCallbackDeliverer.access$100(DeploymentReceiverCallbackDeliverer, DeploymentContext) line: 13 
    DeploymentReceiverCallbackDeliverer$2.run() line: 68    
    SelfTuningWorkManagerImpl$WorkAdapterImpl.run() line: 545   
    ExecuteThread.execute(Runnable) line: 256   
    ExecuteThread.run() line: 221   
Daemon线程[[ACTIVE]ExecuteThread:'0'用于队列:'weblogic.kernel.Default(自调优)'(挂起(CacheStartupListener中第30行的断点))(不同步)
CacheStartupListener_m3hhum_Impl(CacheStartupListener)。()行:30(不同步)
CacheStartupListener_m3hhum_Impl.()行:不可用
NativeConstructorAccessorImpl.newInstance0(构造函数,对象[])行:不可用[本机方法]
NativeConstructorAccessorImpl.newInstance(对象[])行:57
DelegatingConstructorAccessorImpl.newInstance(对象[])行:45
构造函数.newInstance(对象…)行:525
WeldConstructorImpl.newInstance(对象…)行:204
ConstructorInjectionPoint.newInstance(BeanManagerImpl,CreationContext)行:117
ExtendedSessionBean(SessionBean).createInstance(CreationContext)行:212
ExtendedSessionBean.derivedCreateInstance(CreationContext)行:35
WeldEjbBeanManager$ExtendedInjectionTarget.Product(CreationContext)行:131
WeldEjbBeanManager.newBeanInstance(字符串)行:78
InjectionBasedEjbComponentCreator.getBean(字符串、类、布尔值)行:75
SingletonSessionManager(BaseJBManager).createNewBeanInstance()行:209
SingletonSessionManager.constructAndInitBean()行:353
SingletonSessionManager.access$300(SingletonSessionManager)行:63
SingletonSessionManager$SingletonLifecycleManager.doActualInit()行:798
SingletonSessionManager$SingletonLifecycleManager.initInternal(布尔)行:744
SingletonSessionManager$SingletonLifecycleManager.init()行:631
SingletonSessionManager.init()行:280
SingletonSessionManager.perhapsInit()行:276
EJBDeployer.initializeBeans()行:1287
EJBDeployer.start()行:1174
EJBModule.start()行:590
ModuleStateDriver$3。下一行(模块)代码:213
ModuleStateDriver$3。下一行(对象)208
StateMachineDriver.nextState(StateChange,StateMachine[])行:35
ModuleStateDriver.开始(模块[])行:70
ScopedModuleDriver.start()行:212
ExtensibleModuleWrapper.start()行:111
ModuleListenerInvoker.start()行:124
ModuleStateDriver$3。下一行(模块)代码:213
ModuleStateDriver$3.next(对象)