]
Arcadiy Ivanov commented on WFLY-6300:
--------------------------------------
[~jamezp] That's the point. A user would not use batching at all. My problem is that
OSGI-capable module deploys, but because classloader for the Batch Extension does not find
JobOperator service provider, the Batch Extension indicates failure and the module's
entire deployment is marked as failed. This is not an appropriate behavior as there is no
reason for Batch Extension to assume that a module classloader would provide the
JobOperator service provider.
This is even more generic than JBOSGI - if anyone creates a module that has a classloading
hierarchy that does not possess JobOperator service provider, the Batch Extension will
fail that module's deployment.
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?