Skip to content

NullPointerException in EJBWARRuntimeImpl when dynamically updating server configuration #20353

Description

@tkburroughs

Describe the bug
NullPointerException may occur when dynamically updating server configuration as follows

>Stack Dump = java.lang.NullPointerException
> at com.ibm.ws.ejbcontainer.war.internal.EJBWARRuntimeImpl.getEJBModuleMetaData(EJBWARRuntimeImpl.java:53)
> at com.ibm.ws.ejbcontainer.war.internal.EJBWARRuntimeImpl.moduleStopped(EJBWARRuntimeImpl.java:77)
> at com.ibm.ws.container.service.state.internal.ModuleStateManager.fireStopped(ModuleStateManager.java:71)
> at com.ibm.ws.container.service.state.internal.StateChangeServiceImpl.fireModuleStopped(StateChangeServiceImpl.java:95)
> at com.ibm.ws.app.manager.module.internal.ModuleHandlerBase.undeployModule(ModuleHandlerBase.java:143)
> at com.ibm.ws.app.manager.module.internal.DeployedModuleInfoImpl.uninstallModule(DeployedModuleInfoImpl.java:64)
> at com.ibm.ws.app.manager.module.internal.SimpleDeployedAppInfoBase.uninstallApp(SimpleDeployedAppInfoBase.java:672)
> at com.ibm.ws.app.manager.war.internal.WARApplicationHandlerImpl.uninstall(WARApplicationHandlerImpl.java:81)
> at com.ibm.ws.app.manager.internal.statemachine.StopAction.execute(StopAction.java:83)
> at com.ibm.ws.app.manager.internal.statemachine.ApplicationStateMachineImpl.enterState(ApplicationStateMachineImpl.java:1382)
> at com.ibm.ws.app.manager.internal.statemachine.ApplicationStateMachineImpl.performAction(ApplicationStateMachineImpl.java:1222)
> at com.ibm.ws.app.manager.internal.statemachine.ApplicationStateMachineImpl.run(ApplicationStateMachineImpl.java:909)
> at com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper.run(ExecutorServiceImpl.java:245)
> at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
> at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
> at java.base/java.lang.Thread.run(Thread.java:866)

Steps to Reproduce
1 - start the liberty server with a WAR application
2 - modify server.xml configuration in a way that will restart the WAR application, such as updating a datasource used by the WAR application.

Expected behavior
The WAR application should restart and continue working normally.

Diagnostic information:

  • OpenLiberty Version: 22.0.0.3
  • Affected feature(s): servlet-4.0, ejbLite-3.2
  • Java Version: IBM Semeru Runtime Open Edition (11.0.12+7)
  • server.xml configuration (WITHOUT sensitive information like passwords)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<server>
   <featureManager>
       <feature>servlet-4.0</feature>
       <feature>jndi-1.0</feature>
       <feature>cdi-2.0</feature>
       <feature>ejb-3.2</feature>
   </featureManager>
   <application location="transaction.war"/>
   <jdbcDriver libraryRef="DerbyLib" id="DerbyEmbedded"/>
   <library filesetRef="DerbyFileset" id="DerbyLib"/>
   <fileset dir="${shared.resource.dir}derby" includes="derby.jar" id="DerbyFileset"/>
   <dataSource jdbcDriverRef="DerbyEmbedded" jndiName="jdbc/tranlogDataSource" transactional="false" id="tranlogDataSource">
       <properties databaseName="${shared.resource.dir}/data/tranlogdb" createDatabase="create"/>
   </dataSource>
   <logging isoDateFormat="false" traceSpecification="Transaction=all"/>
   <include location="../fatTestPorts.xml"/>
   <transaction heuristicRetryInterval="10" recoverOnStartup="true" waitForRecovery="false" dataSourceRef="tranlogDataSource"/>
   <javaPermission className="java.security.AllPermission" codebase="${shared.resource.dir}/derby/derby.jar"/>
   <javaPermission className="java.security.AllPermission" codebase="${shared.resource.dir}/derby2/derby.jar"/>
   <javaPermission className="java.security.AllPermission" codebase="${server.config.dir}/apps/transaction.war"/>
   <javaPermission className="java.lang.RuntimePermission" name="getClassLoader" codebase="${server.config.dir}/apps/transaction.war"/>
   <javaPermission className="java.lang.RuntimePermission" name="modifyThread" codebase="${server.config.dir}/apps/transaction.war"/>
   <javaPermission className="java.lang.RuntimePermission" name="setContextClassLoader" codebase="${server.config.dir}/apps/transaction.war"/>
   <javaPermission actions="read" className="java.util.PropertyPermission" name="java.util.concurrent.ForkJoinPool.*" codebase="${server.config.dir}/apps/transaction.war"/>
</server>
  • If it would be useful, upload the messages.log file found in $WLP_OUTPUT_DIR/messages.log

Additional context
None

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions