John, I appreciate your suggestions! I will try to put them to work today.

Perhaps they can help me resolve a runtime error I'm getting from
embeddedActiveMQ.start()? the stacktrace looks something like this:

[23-Jan-10 14:16:50:330] [INFO] [BrokerInitializer:197] - Embedded Artemis
Broker being started
java.lang.NoClassDefFoundError:
org/apache/commons/beanutils/BeanIntrospector
   at
org.apache.activemq.artemis.utils.critical.CriticalAnalyzerPolicy.<clinit>(CriticalAnalyzerPolicy.java:28)
   at
org.apache.activemq.artemis.api.config.ActiveMQDefaultConfiguration.<clinit>(ActiveMQDefaultConfiguration.java:593)
   at
org.apache.activemq.artemis.core.config.impl.ConfigurationImpl.<init>(ConfigurationImpl.java:111)
   at
org.apache.activemq.artemis.core.config.impl.FileConfiguration.<init>(FileConfiguration.java:34)
   at
org.apache.activemq.artemis.core.server.embedded.EmbeddedActiveMQ.initStart(EmbeddedActiveMQ.java:125)
   at
org.apache.activemq.artemis.core.server.embedded.EmbeddedActiveMQ.start(EmbeddedActiveMQ.java:115)
   at
com.pdxinc.eps.jms.broker.BrokerInitializer.createBroker(BrokerInitializer.java:198)
   ...
   ...
Caused by: java.lang.ClassNotFoundException:
org.apache.commons.beanutils.BeanIntrospector
   at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
   at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    ... 18 more


Any idea what dependency might be missing?


On Wed, Jan 11, 2023 at 8:53 AM Justin Bertram <jbert...@apache.org> wrote:

> > In particular, AMQ 5 let's you create several objects off the same
> Session and use them concurrently...
>
> For what it's worth, the JMS specification states that Session objects are
> *not* thread-safe so any concurrent use is a spec violation. You may find
> implementations where concurrent use happens to work or may, in fact, be
> explicitly designed to work, but relying on non-spec behavior is not
> recommended as it handicaps portability (as you have found).
>
>
> Justin
>
> On Tue, Jan 10, 2023 at 11:18 AM John Lilley
> <john.lil...@redpointglobal.com.invalid> wrote:
>
>> Michael,
>>
>> We have recently migrated from AMQ 5 to Artemis, and we used embedded
>> brokers for testing, so I might be able to help.
>>
>> Jolokia (web service API) is not available in the embedded brokers, we
>> migrated to using the queue-based management API instead for things like
>> queue counts and lists. But I think that absence of the web server is true
>> for both AMQ 5 and Artemis.
>>
>> We create the embedded broker using
>> EmbeddedActiveMQ broker = new EmbeddedActiveMQ();
>> broker.setConfigResourcePath("mybroker.xml");
>> broker.start();
>> where mybroker.xml is the Artemis broker.xml file stored as a top-level
>> java resource
>>
>> We found that Artemis is much more strict about prohibiting multi-thread
>> access to JMS objects than AMQ 5, and we had to refactor some code because
>> of that. In particular, AMQ 5 let's you create several objects off the same
>> Session and use them concurrently; Artemis does not, you must make a new
>> Session for each.
>>
>> Artemis clients use thread pooling; it is much more efficient and you can
>> create many more MessageListener instances without incurring a lot of idle
>> threads.
>>
>> We found that using session/producer pooling was more important with
>> Artemis than it was with AMQ 5, because of increased broker memory
>> footprint* for queues and sessions. That being said, pooling is awesome.
>>
>> Similarly, we found RPC reply-to queue pooling to also be important.
>>
>>    - We did not measure this directly with controlled testing. Memory
>>    observations came from production systems running load tests and there
>>    could have been other factors such as session leakage.
>>
>>
>>
>> [image: rg] <https://www.redpointglobal.com/>
>>
>> John Lilley
>>
>> Data Management Chief Architect, Redpoint Global Inc.
>>
>> 888 Worcester Street, Suite 200 Wellesley, MA 02482
>>
>> *M: *+1 7209385761 <+1%207209385761> | john.lil...@redpointglobal.com
>>
>> -----Original Message-----
>> From: Michael Brennock <mbrenn...@gmail.com>
>> Sent: Friday, January 6, 2023 12:50 PM
>> To: users@activemq.apache.org
>> Subject: Re: Looking for guidance on conversion from embedded activemq to
>> artemis
>>
>> *** [Caution] This email is from an external source. Please use caution
>> responding, opening attachments or clicking embedded links. ***
>>
>> Thank you for your feedback Justin. I will be more specific in my
>> descriptions.
>>
>>    - First, the activeMQ application creates an instance of
>>    BrokerService from BrokerFactory.createBroker(), with a 
>> activemq-config.xml
>>    for its argument
>>    - Next, the queues themselves are loaded one at a time by locating
>>    their beans. The beans are wired in the classic spring fashion from
>>    eps.broker.xml. The connected are created with ConnectionFactory and
>>    started with start()
>>       - (I'm perfectly happy to update this to the Artemis configuration
>>       file method instead)
>>
>> If I understand correctly, I need to replace the references to
>> activemq-broker-initializer with EmbeddedActiveMQ, which comes from
>> Artemis. Next, I need to use ConnectionFactory and Queue classes from JMS
>> to add the message queues to the embedded server I created with
>> EmbeddedActiveMQ. Is that at least heading in the right direction?
>>
>> Thanks again for your help,
>>
>> Michael
>>
>> On Fri, Jan 6, 2023 at 11:16 AM Justin Bertram <jbert...@apache.org>
>> wrote:
>>
>> > There's just not enough detail in what you've stated to provide any
>> > concrete help with your migration.
>> >
>> > You said, "...it looks like BrokerService is used throughout the
>> > application," but you've provided no details about *how* BrokerService
>> > is used. Most applications using an embedded broker are pretty
>> > straightforward when it comes to broker configuration. They typically
>> > create a broker instance, configure it with a few endpoints (e.g.
>> > queues, topics, etc.), configure a couple of other parameters, start
>> > it, use it, and when the application is done it shuts the broker down.
>> > Does your application follow this basic pattern? Does it configure the
>> > broker programmatically or does it load configuration files? Does it
>> > rely on automatic creation of endpoints?
>> >
>> > In order to replace BrokerService with EmbeddedActiveMQ we need
>> > specific details about how BrokerService is being used.
>> >
>> > Hope that helps!
>> >
>> >
>> > Justin
>> >
>> > On Fri, Jan 6, 2023 at 12:21 PM Michael Brennock <mbrenn...@gmail.com>
>> > wrote:
>> >
>> > > Thanks for the quick reply!
>> > >
>> > > For a more specific question, it looks like BrokerService is used
>> > > throughout the application, as well as the active-mq-initializer
>> > > bean
>> > from
>> > > activeMQ.
>> > > To clarify, I inherited this project from other developers who are
>> > > long gone. I started working on this because I briefly worked on a
>> > > message
>> > queue
>> > > system before.
>> > >
>> > > On Thu, Jan 5, 2023, 8:41 PM Justin Bertram <jbert...@apache.org>
>> wrote:
>> > >
>> > > > EmbeddedActiveMQ is the class you want to use for embedding
>> > > > ActiveMQ Artemis. The BrokerService is a class from ActiveMQ
>> > > > "Classic". It is
>> > used
>> > > > in the ActiveMQ Artemis code-base only for testing purposes. You
>> > > > won't
>> > > use
>> > > > it at all when migrating.
>> > > >
>> > > > For additional help you'll have to ask more specific questions.
>> > > >
>> > > >
>> > > > Justin
>> > > >
>> > > > On Thu, Jan 5, 2023 at 4:45 PM Michael Brennock
>> > > > <mbrenn...@gmail.com>
>> > > > wrote:
>> > > >
>> > > > > Good afternoon,
>> > > > > I've been tasked to migrate an existing application's message
>> > > > > broker
>> > > from
>> > > > > ActiveMQ to Artemis. I was wondering if I could get some help
>> > > > > troubleshooting my solution?
>> > > > >
>> > > > > We had some initial success replacing our embedded activeMQ
>> > > > > broker
>> > > with a
>> > > > > standalone broker that runs outside the application and still
>> > > > > uses
>> > the
>> > > > > original message queues defined in activeMQ. I tried to follow
>> > > > > the information in this guide for creating either an
>> > > > > EmbeddedActiveMQ or
>> > a
>> > > > > BrokerService. Something about the intended design path is
>> > > > > unclear to
>> > > me,
>> > > > > even after reading the manual (1) and scouring the code from the
>> > github
>> > > > > page for answers (2)
>> > > > >
>> > > > > Can anyone offer advice on how to migrate from embedded ActiveMQ
>> > > > > to embedded Artemis? I feel like I missed something important in
>> > > > > the
>> > > > migration
>> > > > > documentation
>> > > > >
>> > > > > (1)
>> > > > >
>> > > > >
>> > > >
>> > >
>> > https://activemq.apache.org/components/artemis/documentation/latest/em
>> > bedding-activemq.html
>> > > > >
>> > > > >
>> > > > > (2)
>> > https://github.com/apache/activemq-artemis/search?q=brokerService
>> > > > >
>> > > >
>> > >
>> >
>> PLEASE NOTE: This e-mail from Redpoint Global Inc. (“Redpoint”) is
>> confidential and is intended solely for the use of the individual(s) to
>> whom it is addressed. If you believe you received this e-mail in error,
>> please notify the sender immediately, delete the e-mail from your computer
>> and do not copy, print or disclose it to anyone else. If you properly
>> received this e-mail as a customer, partner or vendor of Redpoint, you
>> should maintain its contents in confidence subject to the terms and
>> conditions of your agreement(s) with Redpoint.
>>
>

Reply via email to