OK - changed under QPID-7561 <https://issues.apache.org/jira/browse/QPID-7561>
-- Rob On 1 December 2016 at 17:04, Rob Godfrey <[email protected]> wrote: > Yeah - using the same mechanism as BDB would mean that you wouldn't be > able to create a Derby vhost / vhostnode if the library wasn't present... > We basically add a check on startup in the class to see if the necessary > preconditions for creating an object of the type are met. At that point > you'll no longer see the types in the drop downs in the web console. I'll > raise a JIRA and make a change on trunk. > > -- Rob > > On 1 December 2016 at 16:46, Adel Boutros <[email protected]> wrote: > >> Hello Rob, >> >> >> Having the same behavior as BerkleyDB is enough for me right now. >> >> >> I don't mind the broker not starting if a VirtualHostNode is missing >> jars. However, I don't like the fact that a management operation can make a >> running broker fail especially when you have a lot of messages being >> exchanged at the same moment. >> >> >> Regards, >> >> Adel >> >> ________________________________ >> From: Rob Godfrey <[email protected]> >> Sent: Thursday, December 1, 2016 5:08:15 PM >> To: [email protected] >> Subject: Re: [Qpid Java Broker] Remove Derby jar causes broker to crash >> when creating a VritualHost with Derby message store or config >> >> Just to be clear - the current behaviour of the broker when started with a >> BDB VirtualHost*Node* and the BDB jar missing is for the broker to fail to >> start. A JSON vitualhostnode with a BDB virtualhost will allow the boker >> to start up, but the virtualhostnode will be in the ERROR state. >> >> It would be relatively easy to have the same sort of behaviour for the >> Derby Virtual Host... It would be a bigger change if you were wanting the >> broker to start up with VirtualHostNodes which depend on missing >> libraries. >> >> Is this what you are looking for, or are you needing to have the broker >> start up even with virtual host nodes defined which cannot be created (if >> you are, I'm not sure there's actually an easy way to solve that) >> >> Cheers, >> Rob >> >> On 1 December 2016 at 15:21, Adel Boutros <[email protected]> wrote: >> >> > Hello, >> > >> > >> > For legal issues, we are unable to ship Derby in our product. So to be >> > able to use Qpid, I have removed the Derby jar and relaunched the broker >> > which had a "Memory" virtual host. >> > >> > >> > I tried to add a new VirtualHostNode/VirtualHost with config and message >> > store "DERBY" and it crashed. I was expecting it to behave just the way >> it >> > does for BerkleyDB when the jar is not present. >> > >> > >> > Is it possible to fix this? >> > >> > >> > Regards, >> > >> > Adel >> > >> > >> > Full Stack in broker log >> > >> > --------------------------------- >> > >> > >> > [Broker] BRK-1004 : Qpid Broker Ready >> > ############################################################ >> ############ >> > # >> > # Unhandled Exception org.apache.qpid.server.store.StoreException: >> Failed >> > to load driver org.apache.derby.jdbc.EmbeddedDriver in Thread >> > HttpManagement-HTTP-122 >> > # >> > # Exiting >> > # >> > ############################################################ >> ############ >> > org.apache.qpid.server.store.StoreException: Failed to load driver >> > org.apache.derby.jdbc.EmbeddedDriver >> > at org.apache.qpid.server.store.derby.DerbyUtils.loadDerbyDrive >> > r(DerbyUtils.java:65) >> > at org.apache.qpid.server.store.derby.DerbyConfigurationStore.o >> > penConfigurationStore(DerbyConfigurationStore.java:75) >> > at org.apache.qpid.server.virtualhostnode.AbstractStandardVirtu >> > alHostNode.activate(AbstractStandardVirtualHostNode.java:84) >> > at org.apache.qpid.server.virtualhostnode.AbstractVirtualHostNo >> > de.doActivate(AbstractVirtualHostNode.java:160) >> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> > at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce >> > ssorImpl.java:57) >> > at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe >> > thodAccessorImpl.java:43) >> > at java.lang.reflect.Method.invoke(Method.java:606) >> > at org.apache.qpid.server.model.AbstractConfiguredObject.attain >> > State(AbstractConfiguredObject.java:1266) >> > at org.apache.qpid.server.model.AbstractConfiguredObject.attain >> > State(AbstractConfiguredObject.java:1245) >> > at org.apache.qpid.server.model.AbstractConfiguredObject$8.onSu >> > ccess(AbstractConfiguredObject.java:864) >> > at org.apache.qpid.server.model.AbstractConfiguredObject$8.onSu >> > ccess(AbstractConfiguredObject.java:858) >> > at com.google.common.util.concurrent.Futures$6.run(Futures.java:1319) >> > at com.google.common.util.concurrent.MoreExecutors$DirectExecut >> > or.execute(MoreExecutors.java:457) >> > at com.google.common.util.concurrent.ExecutionList.executeListe >> > ner(ExecutionList.java:156) >> > at com.google.common.util.concurrent.ExecutionList.add(Executio >> > nList.java:101) >> > at com.google.common.util.concurrent.AbstractFuture.addListener >> > (AbstractFuture.java:170) >> > at com.google.common.util.concurrent.Futures.addCallback( >> > Futures.java:1322) >> > at com.google.common.util.concurrent.Futures.addCallback( >> > Futures.java:1258) >> > at org.apache.qpid.server.model.AbstractConfiguredObject.doAtta >> > inState(AbstractConfiguredObject.java:857) >> > at org.apache.qpid.server.model.AbstractConfiguredObject.access >> > $300(AbstractConfiguredObject.java:78) >> > at org.apache.qpid.server.model.AbstractConfiguredObject$6.exec >> > ute(AbstractConfiguredObject.java:756) >> > at org.apache.qpid.server.model.AbstractConfiguredObject$6.exec >> > ute(AbstractConfiguredObject.java:719) >> > at org.apache.qpid.server.model.AbstractConfiguredObject$2.exec >> > ute(AbstractConfiguredObject.java:521) >> > at org.apache.qpid.server.model.AbstractConfiguredObject$2.exec >> > ute(AbstractConfiguredObject.java:514) >> > at org.apache.qpid.server.configuration.updater.TaskExecutorImp >> > l$TaskLoggingWrapper.execute(TaskExecutorImpl.java:270) >> > at org.apache.qpid.server.configuration.updater.TaskExecutorImp >> > l.submitWrappedTask(TaskExecutorImpl.java:154) >> > at org.apache.qpid.server.configuration.updater.TaskExecutorImp >> > l.submit(TaskExecutorImpl.java:142) >> > at org.apache.qpid.server.model.AbstractConfiguredObject.doOnCo >> > nfigThread(AbstractConfiguredObject.java:513) >> > at org.apache.qpid.server.model.AbstractConfiguredObject.create >> > Async(AbstractConfiguredObject.java:718) >> > at org.apache.qpid.server.model.AbstractConfiguredObjectTypeFac >> > tory.createAsync(AbstractConfiguredObjectTypeFactory.java:76) >> > at org.apache.qpid.server.model.ConfiguredObjectFactoryImpl.cre >> > ateAsync(ConfiguredObjectFactoryImpl.java:125) >> > at org.apache.qpid.server.model.adapter.BrokerAdapter.createVir >> > tualHostNodeAsync(BrokerAdapter.java:598) >> > at org.apache.qpid.server.model.adapter.BrokerAdapter.addChildA >> > sync(BrokerAdapter.java:652) >> > at org.apache.qpid.server.model.AbstractConfiguredObject$18.exe >> > cute(AbstractConfiguredObject.java:1876) >> > at org.apache.qpid.server.model.AbstractConfiguredObject$18.exe >> > cute(AbstractConfiguredObject.java:1871) >> > at org.apache.qpid.server.model.AbstractConfiguredObject$2.exec >> > ute(AbstractConfiguredObject.java:521) >> > at org.apache.qpid.server.model.AbstractConfiguredObject$2.exec >> > ute(AbstractConfiguredObject.java:514) >> > at org.apache.qpid.server.configuration.updater.TaskExecutorImp >> > l$TaskLoggingWrapper.execute(TaskExecutorImpl.java:270) >> > at org.apache.qpid.server.configuration.updater.TaskExecutorImp >> > l$CallableWrapper$1.run(TaskExecutorImpl.java:342) >> > at java.security.AccessController.doPrivileged(Native Method) >> > at javax.security.auth.Subject.doAs(Subject.java:356) >> > at org.apache.qpid.server.configuration.updater.TaskExecutorImp >> > l$CallableWrapper.call(TaskExecutorImpl.java:335) >> > at java.util.concurrent.FutureTask.run(FutureTask.java:262) >> > at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPool >> > Executor.java:1145) >> > at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoo >> > lExecutor.java:615) >> > at java.lang.Thread.run(Thread.java:745) >> > Caused by: java.lang.ClassNotFoundException: >> > org.apache.derby.jdbc.EmbeddedDriver >> > at java.net.URLClassLoader$1.run(URLClassLoader.java:366) >> > at java.net.URLClassLoader$1.run(URLClassLoader.java:355) >> > at java.security.AccessController.doPrivileged(Native Method) >> > at java.net.URLClassLoader.findClass(URLClassLoader.java:354) >> > at java.lang.ClassLoader.loadClass(ClassLoader.java:425) >> > at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) >> > at java.lang.ClassLoader.loadClass(ClassLoader.java:358) >> > at java.lang.Class.forName0(Native Method) >> > at java.lang.Class.forName(Class.java:191) >> > at org.apache.qpid.server.store.derby.DerbyUtils.loadDerbyDrive >> > r(DerbyUtils.java:61) >> > ... 46 more >> > >> > >> > >
