activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Clebert Suconic <clebert.suco...@gmail.com>
Subject Re: Pure JMS management
Date Fri, 19 May 2017 12:39:23 GMT
Create a JIRA as well.  Thanks.
On Fri, May 19, 2017 at 2:21 AM Guillaume Nodet <gnodet@apache.org> wrote:

> It seems to work well for me.
> I'll run a full build and will create a PR.
>
> 2017-05-19 8:03 GMT+02:00 Guillaume Nodet <gnodet@apache.org>:
>
> > I'm enhancing a layer in OSGi to support Artemis, and I'd like to avoid
> > adding package dependencies.
> > That's why I'm using the connection's classloader to load the needed
> > class, as it's not available from the class which defines this code.
> >
> > To refine my question further: could the reply be typed as a text message
> > rather than not typed ? This would allow retrieving the json body as a
> > string.
> > Basically, I'm proposing the following patch:
> >
> > *---
> >
> a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/impl/ManagementServiceImpl.java*
> >
> > *+++
> >
> b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/impl/ManagementServiceImpl.java*
> >
> > @@ -370,6 +370,7 @@ public class ManagementServiceImpl implements
> > ManagementService {
> >
> >        message = message.toCore();
> >
> >        // a reply message is sent with the result stored in the message
> > body.
> >
> >        CoreMessage reply = new CoreMessage(storageManager.generateID(),
> > 512);
> >
> > +      reply.setType(Message.TEXT_TYPE);
> >
> >        reply.setReplyTo(message.getReplyTo());
> >
> >
> >
> >        String resourceName = message.getStringProperty(
> > ManagementHelper.HDR_RESOURCE_NAME);
> >
> >
> > 2017-05-19 3:10 GMT+02:00 Clebert Suconic <clebert.suconic@gmail.com>:
> >
> >> @Tim Bain: yes.. Artemis from what I see on the class Names (I also
> >> spoke to him gnodet on the IRC channel earlier today).
> >>
> >> @gnodet: I am not understanding why you would need to use reflection.
> >> You can just simply use JMSManagementHelper directly. they are all
> >> static methods...
> >>
> >>
> >> This example here, part of distribution under
> >> examples/features/standard/management shows how it was intended to be
> >> used:
> >>
> >>
> >> https://github.com/apache/activemq-artemis/blob/master/examp
> >> les/features/standard/management/src/main/java/org/apache/ac
> >> tivemq/artemis/jms/example/ManagementExample.java
> >>
> >>
> >>
> >> Maybe I"m misunderstanding your question?
> >>
> >> On Thu, May 18, 2017 at 6:23 PM, Guillaume Nodet <gnodet@apache.org>
> >> wrote:
> >> > I'm trying do perform management operation with pure JMS api.
> >> > To retrieve the list of queues, I'm currently using the following
> code:
> >> >
> >> > QueueSession session = ((QueueConnection)
> >> > connection).createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
> >> > Queue managementQueue = session.createQueue("activemq.management");
> >> > QueueRequestor requestor = new QueueRequestor(session,
> managementQueue);
> >> > connection.start();
> >> > TextMessage m = session.createTextMessage();
> >> > m.setStringProperty("_AMQ_ResourceName", "broker");
> >> > m.setStringProperty("_AMQ_OperationName", "getQueueNames");
> >> > m.setText("[\"" + routing + "\"]");
> >> > Message reply = requestor.request(m);
> >> > Class<?> mgmtHelperClass =
> >> > connection.getClass().getClassLoader().loadClass("org.apache
> >> .activemq.artemis.api.jms.management.JMSManagementHelper");
> >> > Method getResultsMethod = mgmtHelperClass.getMethod("getResults",
> >> > Message.class);
> >> > Object[] results = (Object[]) getResultsMethod.invoke(null, reply);
> >> > List<String> names = new ArrayList<>();
> >> > for (Object o : (Object[]) (results[0])) {
> >> >     names.add(o.toString());
> >> > }
> >> > return names;
> >> >
> >> >
> >> > It works, but I think I should not have to use reflection to access
> the
> >> > result message, hence the use of reflection to access the
> >> > JMSManagementHelper methods.
> >> > It seems to me the reply should be of type TextMessage, but it's
> >> currently
> >> > untyped, so I can't use TextMessage#getText to retrieve the json
> result,
> >> > and I can't find a way to retrieve it another way.
> >> > Do I miss anything ?
> >> >
> >> > --
> >> > ------------------------
> >> > Guillaume Nodet
> >>
> >>
> >>
> >> --
> >> Clebert Suconic
> >>
> >
> >
> >
> > --
> > ------------------------
> > Guillaume Nodet
> >
> >
>
>
> --
> ------------------------
> Guillaume Nodet
>
-- 
Clebert Suconic

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message