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 <adelbout...@live.com> 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 <rob.j.godf...@gmail.com>
> Sent: Thursday, December 1, 2016 5:08:15 PM
> To: users@qpid.apache.org
> 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 <adelbout...@live.com> 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
> >
> >
>

Reply via email to