Weblogic NPE

25 views
Skip to first unread message

Zdeněk Henek

unread,
Jan 3, 2023, 2:53:50 PM1/3/23
to javamelody
Hi,

I run into this issue:

NPE exception
DEBUG <2023-Jan-03 17:28:39.797> [[STANDBY] ExecuteThread: '15' for queue: 'weblogic.kernel.Default (self-tuning)'] net.bull.javamelody JavaMelody version: 1.91.0
DEBUG <2023-Jan-03 17:28:39.797> [[STANDBY] ExecuteThread: '15' for queue: 'weblogic.kernel.Default (self-tuning)'] net.bull.javamelody JavaMelody classes loaded from: file:...truncated..../war/WEB-INF/lib/javamelody-core-1.91.0.jar
DEBUG <2023-Jan-03 17:28:39.797> [[STANDBY] ExecuteThread: '15' for queue: 'weblogic.kernel.Default (self-tuning)'] net.bull.javamelody Application type: Classic
DEBUG <2023-Jan-03 17:28:39.800> [[STANDBY] ExecuteThread: '15' for queue: 'weblogic.kernel.Default (self-tuning)'] net.bull.javamelody Application version: null
DEBUG <2023-Jan-03 17:28:39.800> [[STANDBY] ExecuteThread: '15' for queue: 'weblogic.kernel.Default (self-tuning)'] net.bull.javamelody Host: w5...@127.0.1.1
DEBUG <2023-Jan-03 17:28:39.800> [[STANDBY] ExecuteThread: '15' for queue: 'weblogic.kernel.Default (self-tuning)'] net.bull.javamelody parameter defined: no-database=true
DEBUG <2023-Jan-03 17:28:39.800> [[STANDBY] ExecuteThread: '15' for queue: 'weblogic.kernel.Default (self-tuning)'] net.bull.javamelody parameter defined: system-actions-enabled=false
DEBUG <2023-Jan-03 17:28:39.814> [[STANDBY] ExecuteThread: '15' for queue: 'weblogic.kernel.Default (self-tuning)'] net.bull.javamelody log listeners initialized
DEBUG <2023-Jan-03 17:28:39.814> [[STANDBY] ExecuteThread: '15' for queue: 'weblogic.kernel.Default (self-tuning)'] net.bull.javamelody Datasource needs unwrap: java:comp/env/jdbc/sqlPool of class weblogic.jdbc.common.internal.RmiDataSource
DEBUG <2023-Jan-03 17:28:39.815> [[STANDBY] ExecuteThread: '15' for queue: 'weblogic.kernel.Default (self-tuning)'] net.bull.javamelody Datasource unwrapped: java:comp/env/jdbc/sqlPool
DEBUG <2023-Jan-03 17:28:39.815> [[STANDBY] ExecuteThread: '15' for queue: 'weblogic.kernel.Default (self-tuning)'] net.bull.javamelody rebinding initial datasources failed, skipping
java.lang.NullPointerException: null
        at net.bull.javamelody.JdbcWrapper.unwrap(JdbcWrapper.java:691) ~[javamelody-core-1.91.0.jar:1.91.0]
        at net.bull.javamelody.JdbcWrapper.unwrapDataSource(JdbcWrapper.java:678) ~[javamelody-core-1.91.0.jar:1.91.0]
        at net.bull.javamelody.JdbcWrapper.stop(JdbcWrapper.java:648) [javamelody-core-1.91.0.jar:1.91.0]
        at net.bull.javamelody.FilterContext.<init>(FilterContext.java:115) [javamelody-core-1.91.0.jar:1.91.0]
        at net.bull.javamelody.MonitoringFilter.init(MonitoringFilter.java:148) [javamelody-core-1.91.0.jar:1.91.0]
        at weblogic.servlet.internal.FilterManager$FilterInitAction.run(FilterManager.java:400) [com.oracle.weblogic.servlet.jar:14.1.1.0]
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:344) [com.oracle.weblogic.security.subject.jar:14.1.1.0]
        at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197) [com.oracle.weblogic.security.subject.jar:14.1.1.0]
        at weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203) [com.oracle.weblogic.servlet.jar:14.1.1.0]
        at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71) [com.oracle.weblogic.servlet.jar:14.1.1.0]
        at weblogic.servlet.internal.FilterManager.initFilter(FilterManager.java:130) [com.oracle.weblogic.servlet.jar:14.1.1.0]
        at weblogic.servlet.internal.FilterManager.loadFilter(FilterManager.java:92) [com.oracle.weblogic.servlet.jar:14.1.1.0]
        at weblogic.servlet.internal.FilterManager.preloadFilters(FilterManager.java:72) [com.oracle.weblogic.servlet.jar:14.1.1.0]
        at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1963) [com.oracle.weblogic.servlet.jar:14.1.1.0]
        at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3254) [com.oracle.weblogic.servlet.jar:14.1.1.0]
        at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1879) [com.oracle.weblogic.servlet.jar:14.1.1.0]
        at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:934) [com.oracle.weblogic.servlet.jar:14.1.1.0]
        at weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:360) [com.oracle.weblogic.application.jar:14.1.1.0]
        at weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:356) [com.oracle.weblogic.application.jar:14.1.1.0]
        at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45) [com.oracle.weblogic.application.jar:14.1.1.0]
        at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:138) [com.oracle.weblogic.application.jar:14.1.1.0]
        at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124) [com.oracle.weblogic.application.jar:14.1.1.0]
        at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:233) [com.oracle.weblogic.application.jar:14.1.1.0]
        at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:228) [com.oracle.weblogic.application.jar:14.1.1.0]
        at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45) [com.oracle.weblogic.application.jar:14.1.1.0]
        at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:78) [com.oracle.weblogic.application.jar:14.1.1.0]
        at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:52) [com.oracle.weblogic.application.jar:14.1.1.0]
        at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:752) [com.oracle.weblogic.application.jar:14.1.1.0]
        at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45) [com.oracle.weblogic.application.jar:14.1.1.0]
        at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:262) [com.oracle.weblogic.application.jar:14.1.1.0]
        at weblogic.application.internal.EarDeployment.activate(EarDeployment.java:66) [com.oracle.weblogic.application.jar:14.1.1.0]
        at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:165) [com.oracle.weblogic.application.jar:14.1.1.0]
        at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:90) [com.oracle.weblogic.deploy.jar:14.1.1.0]
        at weblogic.deploy.internal.targetserver.BasicDeployment.activate(BasicDeployment.java:274) [com.oracle.weblogic.deploy.jar:14.1.1.0]
        at weblogic.deploy.internal.targetserver.BasicDeployment.activateFromServerLifecycle(BasicDeployment.java:507) [com.oracle.weblogic.deploy.jar:14.1.1.0]
        at weblogic.management.deploy.internal.DeploymentAdapter$1.doActivate(DeploymentAdapter.java:53) [com.oracle.weblogic.deploy.jar:14.1.1.0]
        at weblogic.management.deploy.internal.DeploymentAdapter.activate(DeploymentAdapter.java:202) [com.oracle.weblogic.deploy.jar:14.1.1.0]
        at weblogic.management.deploy.internal.AppTransition$2.transitionAppInternal(AppTransition.java:53) [com.oracle.weblogic.deploy.jar:14.1.1.0]
        at weblogic.management.deploy.internal.AppTransition.transitionApp(AppTransition.java:138) [com.oracle.weblogic.deploy.jar:14.1.1.0]
        at weblogic.management.deploy.internal.ConfiguredDeployments$2.doItem(ConfiguredDeployments.java:741) [com.oracle.weblogic.deploy.jar:14.1.1.0]
        at weblogic.management.deploy.internal.parallel.BucketInvoker$2.run(BucketInvoker.java:95) [com.oracle.weblogic.deploy.jar:14.1.1.0]
        at weblogic.work.ContextWrap.run(ContextWrap.java:46) [com.oracle.weblogic.workmanager-context.jar:14.1.1.0]
        at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:677) [com.bea.core.weblogic.workmanager.jar:14.1.1.0]
        at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:352) [com.bea.core.utils.full.jar:14.1.1.0]
        at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:337) [com.bea.core.utils.full.jar:14.1.1.0]
        at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:57) [com.oracle.weblogic.work.jar:14.1.1.0]
        at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41) [com.bea.core.weblogic.workmanager.jar:14.1.1.0]
        at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:651) [com.bea.core.weblogic.workmanager.jar:14.1.1.0]
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:420) [com.bea.core.weblogic.workmanager.jar:14.1.1.0]
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:360) [com.bea.core.weblogic.workmanager.jar:14.1.1.0]


My javamelody configuration in web.xml is:
 <filter>
    <filter-name>monitoring</filter-name>
    <filter-class>com.*.*.servlet.JavaMelodyMonitoringFilter</filter-class>
    <init-param>
      <param-name>no-database</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>system-actions-enabled</param-name>
      <param-value>false</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>monitoring</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <listener>
    <listener-class>net.bull.javamelody.SessionListener</listener-class>
  </listener>

I use Weblogic 14.1

I was a bit surprised when I saw jdbc related error when the jdbc monitoring is disabled.

NPE in class JdbcWrapper
private void unwrap(Object parentObject, String fieldName, String unwrappedMessage)
            throws IllegalAccessException {
        final Object proxy = JdbcWrapperHelper.getFieldValue(parentObject, fieldName);
        if (Proxy.isProxyClass(proxy.getClass())) {

the proxy could be null if the WLDataSourceImpl driverInstance is null

I think there should be check the value is not null as it is in
rewrapWebLogicDataSource method of JdbcWrapper class
Object driverInstance = JdbcWrapperHelper.getFieldValue(dataSource, "driverInstance");
            if (driverInstance != null) {

I have tested with javamelody 1.91.0, 1.86.0 appears in both.

Is this correct fix? I could test locally and create PR if you are ok with suggested solution.

Thank you.

Regards,
Zdenek

Btw. I tried compile latest in main branch or 1.91 tag but I got error with dependencies. Do I have to use any specific maven repository?
I am compiling only javamelody-core.
Fixed by excluding jaxb-runtime from org.ehcache

<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>3.10.0</version>
<optional>true</optional>
<exclusions>
<exclusion>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
</exclusion>
</exclusions>

</dependency>
Reply all
Reply to author
Forward
0 new messages