[
https://issues.apache.org/jira/browse/BROOKLYN-410?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15764150#comment-15764150
]
ASF GitHub Bot commented on BROOKLYN-410:
-----------------------------------------
Github user neykov commented on a diff in the pull request:
https://github.com/apache/brooklyn-server/pull/490#discussion_r93231467
--- Diff:
core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindIteration.java ---
@@ -988,7 +988,7 @@ protected void setCatalogItemId(BrooklynObject item,
String catalogItemId) {
} catch (Exception e) {
Exceptions.propagateIfFatal(e);
}
- return new
ClassLoaderUtils(reflections.getClassLoader()).loadClass(jType);
+ return new ClassLoaderUtils(reflections.getClassLoader(),
managementContext).loadClass(jType);
--- End diff --
Got it.
> Rebind fails in karaf, with app creating location from class in bundle
> ----------------------------------------------------------------------
>
> Key: BROOKLYN-410
> URL: https://issues.apache.org/jira/browse/BROOKLYN-410
> Project: Brooklyn
> Issue Type: Bug
> Reporter: Aled Sage
>
> With brooklyn 0.10.0-SNAPSHOT...
> A customer has an advanced/unusual Java-based app that programmatically adds
> a location to an entity. They are switching to using karaf.
> The app deploys successfully. However, on rebind it fails because it fails to
> instantiate the location (fails to load the class for the location).
> I reproduced this with a simpler test case - output shown below:
> {noformat}
> 2016-12-14 13:49:16,912 WARN Rebind: continuing after problem creating
> LOCATION pjt0hzet8u of type com.acme.autobrick:com.acme.location.MyLocation
> org.apache.brooklyn.util.exceptions.PropagatedRuntimeException:
> at
> org.apache.brooklyn.util.exceptions.Exceptions.propagate(Exceptions.java:129)
> ~[classes/:na]
> Caused by: java.lang.ClassNotFoundException: Class
> com.acme.autobrick:com.acme.location.MyLocation not found on the application
> class path, nor in the bundle white list.
> at
> org.apache.brooklyn.util.core.ClassLoaderUtils.loadClass(ClassLoaderUtils.java:155)
> ~[classes/:na]
> ...
> org.apache.brooklyn.util.exceptions.PropagatedRuntimeException: Failure
> rebinding: problem creating LOCATION pjt0hzet8u of type
> com.acme.autobrick:com.acme.location.MyLocation: ClassNotFoundException:
> Class com.acme.autobrick:com.acme.location.MyLocation not found on the
> application class path, nor in the bundle white list.
> at
> org.apache.brooklyn.util.exceptions.Exceptions.propagate(Exceptions.java:129)
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindManagerImpl.rebind(RebindManagerImpl.java:513)
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindTestUtils.rebindAll(RebindTestUtils.java:457)
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindTestUtils.rebind(RebindTestUtils.java:334)
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindTestFixture.rebind(RebindTestFixture.java:303)
> at
> org.apache.brooklyn.camp.brooklyn.AbstractYamlRebindTest.rebind(AbstractYamlRebindTest.java:87)
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindTestFixture.rebind(RebindTestFixture.java:238)
> at
> org.apache.brooklyn.camp.brooklyn.catalog.CatalogOsgiVersionMoreEntityRebindTest.testFoo(CatalogOsgiVersionMoreEntityRebindTest.java:143)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:606)
> at
> org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
> at org.testng.internal.Invoker.invokeMethod(Invoker.java:643)
> at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)
> at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)
> at
> org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
> at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
> at org.testng.TestRunner.privateRun(TestRunner.java:782)
> at org.testng.TestRunner.run(TestRunner.java:632)
> at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
> at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)
> at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
> at org.testng.SuiteRunner.run(SuiteRunner.java:268)
> at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
> at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
> at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)
> at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
> at org.testng.TestNG.run(TestNG.java:1064)
> at
> org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
> at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:236)
> at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:81)
> Caused by: java.util.concurrent.ExecutionException:
> org.apache.brooklyn.util.exceptions.PropagatedRuntimeException: Failure
> rebinding: problem creating LOCATION pjt0hzet8u of type
> com.acme.autobrick:com.acme.location.MyLocation: ClassNotFoundException:
> Class com.acme.autobrick:com.acme.location.MyLocation not found on the
> application class path, nor in the bundle white list.
> at java.util.concurrent.FutureTask.report(FutureTask.java:122)
> at java.util.concurrent.FutureTask.get(FutureTask.java:188)
> at
> com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:63)
> at org.apache.brooklyn.util.core.task.BasicTask.get(BasicTask.java:361)
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindManagerImpl.rebind(RebindManagerImpl.java:511)
> ... 30 more
> Caused by: org.apache.brooklyn.util.exceptions.PropagatedRuntimeException:
> Failure rebinding: problem creating LOCATION pjt0hzet8u of type
> com.acme.autobrick:com.acme.location.MyLocation: ClassNotFoundException:
> Class com.acme.autobrick:com.acme.location.MyLocation not found on the
> application class path, nor in the bundle white list.
> at
> org.apache.brooklyn.util.exceptions.Exceptions.create(Exceptions.java:432)
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindExceptionHandlerImpl.onDoneImpl(RebindExceptionHandlerImpl.java:497)
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindExceptionHandlerImpl.onDone(RebindExceptionHandlerImpl.java:413)
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindIteration.run(RebindIteration.java:268)
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindManagerImpl.rebindImpl(RebindManagerImpl.java:558)
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindManagerImpl$3.call(RebindManagerImpl.java:508)
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindManagerImpl$3.call(RebindManagerImpl.java:506)
> at
> org.apache.brooklyn.util.core.task.BasicExecutionManager$SubmissionCallable.call(BasicExecutionManager.java:522)
> at java.util.concurrent.FutureTask.run(FutureTask.java:262)
> 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: java.lang.IllegalStateException: problem creating LOCATION
> pjt0hzet8u of type com.acme.autobrick:com.acme.location.MyLocation
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindExceptionHandlerImpl.onCreateFailed(RebindExceptionHandlerImpl.java:265)
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindIteration.instantiateLocationsAndEntities(RebindIteration.java:441)
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindIteration.doRun(RebindIteration.java:240)
> at
> org.apache.brooklyn.core.mgmt.rebind.InitialFullRebindIteration.doRun(InitialFullRebindIteration.java:69)
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindIteration.run(RebindIteration.java:266)
> ... 8 more
> Caused by: org.apache.brooklyn.util.exceptions.PropagatedRuntimeException:
> ClassNotFoundException: Class com.acme.autobrick:com.acme.location.MyLocation
> not found on the application class path, nor in the bundle white list.
> at
> org.apache.brooklyn.util.exceptions.Exceptions.propagate(Exceptions.java:129)
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindIteration$BrooklynObjectInstantiator.loadClass(RebindIteration.java:999)
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindIteration$BrooklynObjectInstantiator.newLocation(RebindIteration.java:1007)
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindIteration.instantiateLocationsAndEntities(RebindIteration.java:438)
> ... 11 more
> Caused by: java.lang.ClassNotFoundException: Class
> com.acme.autobrick:com.acme.location.MyLocation not found on the application
> class path, nor in the bundle white list.
> at
> org.apache.brooklyn.util.core.ClassLoaderUtils.loadClass(ClassLoaderUtils.java:155)
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindIteration$BrooklynObjectInstantiator.loadClass(RebindIteration.java:991)
> at
> org.apache.brooklyn.core.mgmt.rebind.RebindIteration$BrooklynObjectInstantiator.loadClass(RebindIteration.java:997)
> ... 13 more
> {noformat}
> Looking at the persisted state for the location, it looks good:
> {{<type>com.acme.autobrick:com.acme.location.MyLocation</type>}} and
> {{<catalogItemId>with-private-location:1.0</catalogItemId>}}.
> Looking at the code path in the stacktrace above, the loading of locations
> differs from entities. That calls
> {{RebindIteration.BrooklynObjectInstantiator.load()}}, which tries to use the
> catalog id. However, for locations it calls straight to
> {{RebindIteration.BrooklynObjectInstantiator.loadClass()}}, which does not
> respect the catalog id.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)