weblogic.Deployer无法重新部署应用程序

时间:2014-12-01 20:59:35

标签: ejb-3.1 weblogic12c ejb-2.x

我正在尝试部署到Weblogic 12c(v12.1.1)服务器,当我尝试重新部署和更新ear时,我遇到了这个异常:

Task 5 initiated: [Deployer:149026]deploy application wjade [Version=2.0-SNAPSHOT-20141201135918] on AdminServer.
Task 5 failed: [Deployer:149026]deploy application wjade [Version=2.0-SNAPSHOT-20141201135918] on AdminServer.
Target state: redeploy failed on Server AdminServer
java.lang.NullPointerException
java.lang.NullPointerException
    at weblogic.ejb.container.timer.EJBTimerManager.undeploy(EJBTimerManager.java:386)
    at weblogic.ejb.container.manager.BaseEJBManager.undeployTimerManager(BaseEJBManager.java:429)
    at weblogic.ejb.container.manager.BaseEJBManager.undeploy(BaseEJBManager.java:411)
    at weblogic.ejb.container.manager.StatelessManager.undeploy(StatelessManager.java:384)
    at weblogic.ejb.container.deployer.EJBDeployer.deactivate(EJBDeployer.java:1489)
    at weblogic.ejb.container.deployer.EJBModule.doDeactivate(EJBModule.java:1020)
    at weblogic.ejb.container.deployer.EJBModule.activate(EJBModule.java:477)
    at weblogic.application.internal.flow.ModuleStateDriver$2.next(ModuleStateDriver.java:192)
    at weblogic.application.internal.flow.ModuleStateDriver$2.next(ModuleStateDriver.java:187)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:35)
    at weblogic.application.internal.flow.ModuleStateDriver.activate(ModuleStateDriver.java:58)
    at weblogic.application.internal.flow.ScopedModuleDriver.activate(ScopedModuleDriver.java:206)
    at weblogic.application.internal.ExtensibleModuleWrapper.activate(ExtensibleModuleWrapper.java:97)
    at weblogic.application.internal.flow.ModuleListenerInvoker.activate(ModuleListenerInvoker.java:114)
    at weblogic.application.internal.flow.ModuleStateDriver$2.next(ModuleStateDriver.java:192)
    at weblogic.application.internal.flow.ModuleStateDriver$2.next(ModuleStateDriver.java:187)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:35)
    at weblogic.application.internal.flow.ModuleStateDriver.activate(ModuleStateDriver.java:58)
    at weblogic.application.internal.flow.DeploymentCallbackFlow.activate(DeploymentCallbackFlow.java:145)
    at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:729)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:35)
    at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:258)
    at weblogic.application.internal.EarDeployment.activate(EarDeployment.java:61)
    at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:165)
    at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:79)
    at weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:582)
    at weblogic.deploy.internal.targetserver.operations.ActivateOperation.activateDeployment(ActivateOperation.java:148)
    at weblogic.deploy.internal.targetserver.operations.ActivateOperation.doCommit(ActivateOperation.java:114)
    at weblogic.deploy.internal.targetserver.operations.AbstractOperation.commit(AbstractOperation.java:335)
    at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit(DeploymentManager.java:844)
    at weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList(DeploymentManager.java:1253)
    at weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit(DeploymentManager.java:440)
    at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit(DeploymentServiceDispatcher.java:163)
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:195)
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$100(DeploymentReceiverCallbackDeliverer.java:13)
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$2.run(DeploymentReceiverCallbackDeliverer.java:68)
    at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:545)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)

如果我删除了我从耳中发现的一个TimedObject,它将重新部署。这是带有2.x EJB的旧代码。这是一个已知问题,已在更新版本的Weblogic中得到解决吗?我还没有找到这个问题的文档。

提前致谢!

新信息:

根据项目的pom文件中的maven-compiler-plugin ejbVersion,将ejb代码编译为3.1。我尝试使用@Schedule注释来查看使计时器成为自动计时器是否会影响重新部署,但到目前为止还没有运气......如上所述的异常。

以下是我进行初始部署的方式:

java weblogic.Deployer -adminurl t3:// localhost:7001 -username xxxxxxxx -password xxxxxxxx -deploy -name wjade -source /tmp/onesystem-app-2.0-SNAPSHOT-20141202152000.ear

以下是我在重建应用并更新其中的版本之后进行重新部署的方式:

java weblogic.Deployer -adminurl t3:// localhost:7001 -username xxxxxxxx -password xxxxxxxx -redeploy -name wjade -source /tmp/onesystem-app-2.0-SNAPSHOT-20141202152232.ear

如果我使用weblogic.Deployer的-listapps选项,我会看到列出的早期版本的应用程序显示为活动状态,更新版本显示为非活动状态。我可以无错误地取消部署活动或非活动应用程序中的任何一个或两个。在取消部署非活动和活动版本的情况下,我可以无错误地部署更新的应用程序。只有在重新部署期间才会抛出异常。

这种重新部署适用于我的问题档案中没有EJB计时器的其他应用程序。

另一个更新:

正如所建议的,我测试了-source选项的相同值,如下所示:

java weblogic.Deployer -adminurl t3:// localhost:7001 -username xxxxxxxx -password xxxxxxxx -deploy -name wjade -source /tmp/onesystem-app-2.0-SNAPSHOT.ear

重新构建应用并在其中更新了耳机的版本:

java weblogic.Deployer -adminurl t3:// localhost:7001 -username xxxxxxxx -password xxxxxxxx -redeploy -name wjade -source /tmp/onesystem-app-2.0-SNAPSHOT.ear

使用EJB计时器对耳朵进行相同的Exception失败,并且对于没有EJB计时器的应用程序工作正常。

1 个答案:

答案 0 :(得分:0)

根本原因不是答案,而是针对我的特定用例的可行解决方法......

问题EAR只包含一个实现TimedObject的EJB。我删除了EJB的Timer元素并修改了一个现有的类,它提供了一个main来激活/停用定时对象。我修改了类以简单地执行先前定时对象的重要处理方法。我可以安排从cron调用它。