]
Arcadiy Ivanov resolved WFLY-6300.
----------------------------------
Resolution: Won't Fix
Workaround found.
Batch extension fails module deployment if JobOperator provider not
found
-------------------------------------------------------------------------
Key: WFLY-6300
URL:
https://issues.jboss.org/browse/WFLY-6300
Project: WildFly
Issue Type: Bug
Components: Class Loading
Affects Versions: 9.0.2.Final
Reporter: Arcadiy Ivanov
Assignee: James Perkins
I'm a maintainer for JBOSGI, trying to bring the plugin up to 9.x and 10.x.
Unfortunately, WildFly batch extension assumes that ANY module being inspected will have
a classloader capable of finding a JobOperator provider, and if it doesn't the module
will not be deployed.
This assumption is, obviously, wrong.
Generally the error looks like this:
{noformat}
15:55:56,679 INFO [org.jboss.as.server] (management-handler-thread - 3) WFLYSRV0010:
Deployed "arquillian-service" (runtime-name : "arquillian-service")
15:55:57,049 INFO [org.jboss.as.repository] (management-handler-thread - 4) WFLYDR0001:
Content added at location
/Users/arcivanov/Documents/src/jbosgi/jbosgi/wildfly/build/target/wildfly-9.0.2.Final/standalone/data/content/13/040c763e3f044cd7bbf3475a137bb620158bc1/content
15:55:57,055 INFO [org.jboss.as.server.deployment] (MSC service thread 1-7) WFLYSRV0027:
Starting deployment of "simple-bundle" (runtime-name:
"simple-bundle")
15:55:57,070 INFO [org.jboss.osgi.framework] (MSC service thread 1-7) JBOSGI011001:
Bundle installed: simple-bundle:0.0.0
15:55:57,112 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-6) MSC000001:
Failed to start service jboss.deployment.unit.simple-bundle.batch.job-operator:
org.jboss.msc.service.StartException in service
jboss.deployment.unit.simple-bundle.batch.job-operator: Failed to start service
at
org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: javax.batch.operations.BatchRuntimeException: The ServiceLoader was unable to
find an implemenation for JobOperator. Check classpath for
META-INF/services/javax.batch.operations.JobOperator file.
at javax.batch.runtime.BatchRuntime.getJobOperator(BatchRuntime.java:73)
at
org.wildfly.extension.batch.deployment.JobOperatorService.start(JobOperatorService.java:90)
at
org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
at
org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
... 3 more
15:55:57,112 INFO [org.jboss.as.arquillian] (MSC service thread 1-8) Arquillian
deployment detected:
ArquillianConfig[service=jboss.arquillian.config.simple-bundle,unit=simple-bundle,tests=[org.jboss.test.osgi.build.SimpleBundleLifecycleTestCase]]
15:55:57,118 INFO [org.jboss.osgi.framework] (MSC service thread 1-4) JBOSGI011002:
Bundle started: simple-bundle:0.0.0
15:55:57,120 ERROR [org.jboss.as.controller.management-operation]
(management-handler-thread - 4) WFLYCTL0013: Operation ("deploy") failed -
address: ([("deployment" => "simple-bundle")]) - failure
description: {"WFLYCTL0080: Failed services" =>
{"jboss.deployment.unit.simple-bundle.batch.job-operator" =>
"org.jboss.msc.service.StartException in service
jboss.deployment.unit.simple-bundle.batch.job-operator: Failed to start service
{noformat}
In more detail, the error looks like this:
The HostBundleClassLoader is asked by BatchRuntime to enumerate JobOperator services via
ServiceLoader.load, returning no providers which triggers an exception.
{noformat}
2016-02-29 15:55:57,110 TRACE [org.wildfly.extension.batch] (MSC service thread 1-1)
Processing deployment 'simple-bundle' for the batch deployment resources.
2016-02-29 15:55:57,111 TRACE [org.jboss.modules] (MSC service thread 1-8) Finding class
org.jboss.as.arquillian.service.ArquillianConfig from Module
"deployment.arquillian-service:main" from Service Module Loader
2016-02-29 15:55:57,111 TRACE [org.jboss.modules] (MSC service thread 1-8) Finding local
class org.jboss.as.arquillian.service.ArquillianConfig from Module
"deployment.arquillian-service:main" from Service Module Loader
2016-02-29 15:55:57,111 TRACE [org.jboss.security] (MSC service thread 1-2) PBOX00337:
nextState for action getPolicyConfiguration: open
2016-02-29 15:55:57,111 TRACE [org.jboss.modules] (MSC service thread 1-8) Loading class
org.jboss.as.arquillian.service.ArquillianConfig locally from Module
"deployment.arquillian-service:main" from Service Module Loader
2016-02-29 15:55:57,111 DEBUG [org.jboss.security] (MSC service thread 1-2) PBOX00307:
Constructing JBossPolicyConfiguration with contextID simple-bundle
2016-02-29 15:55:57,111 TRACE [org.jboss.as.naming] (MSC service thread 1-5) Bound
resource env into naming store org.jboss.as.naming.ServiceBasedNamingStore@63739568
(service name service jboss.naming.context.java.app.simple-bundle.env)
2016-02-29 15:55:57,111 TRACE [org.jboss.as.naming] (MSC service thread 1-7) Bound
resource env into naming store org.jboss.as.naming.ServiceBasedNamingStore@63739568
(service name service jboss.naming.context.java.module.simple-bundle.simple-bundle.env)
2016-02-29 15:55:57,111 TRACE [org.jboss.security] (MSC service thread 1-2) PBOX00337:
nextState for action getPolicyConfiguration: open
2016-02-29 15:55:57,111 DEBUG [org.jboss.as.security] (MSC service thread 1-2) Cannot
create permissions with 'null' metaData for id=simple-bundle
2016-02-29 15:55:57,111 TRACE [org.jboss.modules] (MSC service thread 1-8) Attempting to
define class org.jboss.as.arquillian.service.ArquillianConfig in Module
"deployment.arquillian-service:main" from Service Module Loader
2016-02-29 15:55:57,111 TRACE [org.jboss.osgi.framework] (MSC service thread 1-4)
LockManager locked: (START) [simple-bundle:0.0.0, simple-bundle:0.0.0]
2016-02-29 15:55:57,111 TRACE [org.jboss.modules] (MSC service thread 1-6) Attempting to
find all resources META-INF/services/javax.batch.operations.JobOperator in Module
"deployment.simple-bundle:main" from Service Module Loader
2016-02-29 15:55:57,111 DEBUG [org.jboss.osgi.framework] (MSC service thread 1-4)
Starting bundle: simple-bundle:0.0.0
2016-02-29 15:55:57,111 TRACE [org.jboss.security] (MSC service thread 1-2) PBOX00314:
commit, contextID: simple-bundle
2016-02-29 15:55:57,111 TRACE [org.jboss.osgi.framework] (MSC service thread 1-6) Class
[META-INF/services/javax.batch.operations.JobOperator] does not match
Dynamic-ImportPackage patterns
2016-02-29 15:55:57,112 TRACE [org.jboss.modules] (MSC service thread 1-8) Defined class
org.jboss.as.arquillian.service.ArquillianConfig in Module
"deployment.arquillian-service:main" from Service Module Loader
2016-02-29 15:55:57,111 TRACE [org.jboss.security] (MSC service thread 1-2) PBOX00337:
nextState for action commit: inService
2016-02-29 15:55:57,112 TRACE [org.jboss.osgi.framework] (MSC service thread 1-4)
changeState: simple-bundle:0.0.0 -> STARTING
2016-02-29 15:55:57,113 TRACE [org.jboss.osgi.deployment] (MSC service thread 1-4)
Invoke: [org.jboss.as.osgi.web.WebContextLifecycleInterceptor,order=1000] with state
STARTING on simple-bundle
2016-02-29 15:55:57,112 INFO [org.jboss.as.arquillian] (MSC service thread 1-8)
Arquillian deployment detected:
ArquillianConfig[service=jboss.arquillian.config.simple-bundle,unit=simple-bundle,tests=[org.jboss.test.osgi.build.SimpleBundleLifecycleTestCase]]
2016-02-29 15:55:57,112 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-6)
MSC000001: Failed to start service jboss.deployment.unit.simple-bundle.batch.job-operator:
org.jboss.msc.service.StartException in service
jboss.deployment.unit.simple-bundle.batch.job-operator: Failed to start service
at
org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: javax.batch.operations.BatchRuntimeException: The ServiceLoader was unable to
find an implemenation for JobOperator. Check classpath for
META-INF/services/javax.batch.operations.JobOperator file.
at javax.batch.runtime.BatchRuntime.getJobOperator(BatchRuntime.java:73)
at
org.wildfly.extension.batch.deployment.JobOperatorService.start(JobOperatorService.java:90)
at
org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
at
org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
... 3 more
{noformat}
The questions, therefore, are:
# Any way for module to indicate it doesn't want to be inspected by WildFly Batch
Extension?
# Should this behavior be fixed in principle?