Details
-
Bug
-
Resolution: Done
-
Major
-
7.4.4.GA
-
False
-
None
-
False
-
+
-
Description
Specifying use-java-context for a datasource as an expression (for example, use-java-context="${env.db_java_context}") results in an IllegalArgumentException for the following console commands:
- test-connection-in-pool
- flush-*
- dump-queued-threads-in-pool
Here is a stack trace for test-connection-in-pool:
09:19:24,271 ERROR [org.jboss.as.controller.management-operation] (management-handler-thread - 1) WFLYCTL0013: Operation ("test-connection-in-pool") failed - address: ([ ("subsystem" => "datasources"), ("data-source" => "ExampleDS") ]): java.lang.IllegalArgumentException at org.jboss.dmr@1.5.0.Final-redhat-1//org.jboss.dmr.ModelValue.asBoolean(ModelValue.java:69) at org.jboss.dmr@1.5.0.Final-redhat-1//org.jboss.dmr.ModelNode.asBoolean(ModelNode.java:324) at org.jboss.as.connector@7.2.0.GA-redhat-00005//org.jboss.as.connector.subsystems.datasources.Util.getJndiName(Util.java:49) at org.jboss.as.connector@7.2.0.GA-redhat-00005//org.jboss.as.connector.subsystems.common.pool.PoolOperations.execute(PoolOperations.java:72) at org.jboss.as.controller@6.0.11.Final-redhat-00001//org.jboss.as.controller.AbstractOperationContext.executeStep(AbstractOperationContext.java:999) at org.jboss.as.controller@6.0.11.Final-redhat-00001//org.jboss.as.controller.AbstractOperationContext.processStages(AbstractOperationContext.java:743) at org.jboss.as.controller@6.0.11.Final-redhat-00001//org.jboss.as.controller.AbstractOperationContext.executeOperation(AbstractOperationContext.java:467) at org.jboss.as.controller@6.0.11.Final-redhat-00001//org.jboss.as.controller.OperationContextImpl.executeOperation(OperationContextImpl.java:1411) at org.jboss.as.controller@6.0.11.Final-redhat-00001//org.jboss.as.controller.ModelControllerImpl.internalExecute(ModelControllerImpl.java:423) at org.jboss.as.controller@6.0.11.Final-redhat-00001//org.jboss.as.controller.ModelControllerImpl.lambda$execute(ModelControllerImpl.java:243) at org.wildfly.security.elytron-private@1.6.1.Final-redhat-00001//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:265) at org.wildfly.security.elytron-private@1.6.1.Final-redhat-00001//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:231) at org.jboss.as.controller@6.0.11.Final-redhat-00001//org.jboss.as.controller.ModelControllerImpl.execute(ModelControllerImpl.java:243) at org.jboss.as.controller@6.0.11.Final-redhat-00001//org.jboss.as.controller.remote.ModelControllerClientOperationHandler$ExecuteRequestHandler.doExecute(ModelControllerClientOperationHandler.java:240) at org.jboss.as.controller@6.0.11.Final-redhat-00001//org.jboss.as.controller.remote.ModelControllerClientOperationHandler$ExecuteRequestHandler.access(ModelControllerClientOperationHandler.java:138) at org.jboss.as.controller@6.0.11.Final-redhat-00001//org.jboss.as.controller.remote.ModelControllerClientOperationHandler$ExecuteRequestHandler.run(ModelControllerClientOperationHandler.java:162) at org.jboss.as.controller@6.0.11.Final-redhat-00001//org.jboss.as.controller.remote.ModelControllerClientOperationHandler$ExecuteRequestHandler.run(ModelControllerClientOperationHandler.java:158) at org.wildfly.security.elytron-private@1.6.1.Final-redhat-00001//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:289) at org.wildfly.security.elytron-private@1.6.1.Final-redhat-00001//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:246) at org.jboss.as.controller@6.0.11.Final-redhat-00001//org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:254) at org.jboss.as.controller@6.0.11.Final-redhat-00001//org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:225) at org.jboss.as.controller@6.0.11.Final-redhat-00001//org.jboss.as.controller.remote.ModelControllerClientOperationHandler$ExecuteRequestHandler.execute(ModelControllerClientOperationHandler.java:158) at org.jboss.as.protocol@6.0.11.Final-redhat-00001//org.jboss.as.protocol.mgmt.ManagementRequestContextImpl.doExecute(ManagementRequestContextImpl.java:70) at org.jboss.as.protocol@6.0.11.Final-redhat-00001//org.jboss.as.protocol.mgmt.ManagementRequestContextImpl$AsyncTaskRunner.run(ManagementRequestContextImpl.java:160) at org.jboss.threads@2.3.2.Final-redhat-1//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) at org.jboss.threads@2.3.2.Final-redhat-1//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985) at org.jboss.threads@2.3.2.Final-redhat-1//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487) at org.jboss.threads@2.3.2.Final-redhat-1//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378) at java.base/java.lang.Thread.run(Thread.java:829) at org.jboss.threads@2.3.2.Final-redhat-1//org.jboss.threads.JBossThread.run(JBossThread.java:485)
The problem seems to be in org.jboss.as.connector.subsystems.datasources.Util.getJndiName() which only treats the use-java-context attribute as a boolean.
public static String getJndiName(final OperationContext context, final ModelNode modelNode) throws OperationFailedException { final String rawJndiName = JNDI_NAME.resolveModelAttribute(context, modelNode).asString(); return cleanJndiName(rawJndiName, modelNode.hasDefined(USE_JAVA_CONTEXT.getName()) && modelNode.get(USE_JAVA_CONTEXT.getName()).asBoolean()); }
Switching the asBoolean() statement to something like modelNode.get(USE_JAVA_CONTEXT.getName()).asExpression().resolveBoolean() seems to fix the issue.
Regular datasource access from an application does not seem to be affected because getJndiName() is not called.
This seems to affect all versions of EAP 7.x.
Attachments
Issue Links
- is cloned by
-
WFLY-16272 Using an expression in use-java-context for a datasource results in IllegalArgumentException for certain console commands
- Closed