One other problem with the implementation: you provided a MessageListener
of your own definition, which doesn't do anything, which means your
consumer has no way to get the messages. A better alternative would be to
have your register method take the MessageListener object (of the
consumer's definition, not your own) as an argument.

Tim

On Aug 18, 2017 1:02 PM, "Justin Bertram" <jbert...@redhat.com> wrote:

> > I can't see any reason why anyone would ever not want to use ActiveMQ  ;)
>
> I agree.  However, based on his code he's using 5.x right now, and I can
> imagine a day when he'd want to move to ActiveMQ Artemis.  :)
>
>
> Justin
>
> On Fri, Aug 18, 2017 at 1:59 PM, Timothy Bish <tabish...@gmail.com> wrote:
>
> > On 08/18/2017 02:49 PM, Justin Bertram wrote:
> >
> >> I see a couple of potential problems with this code:
> >>
> >> 1) It's littered with non-JMS code (e.g. ActiveMQConnectionFactory,
> >> ActiveMQConnection).  You may not care about that if this application
> will
> >> only ever integrate with ActiveMQ, but if you think you'll ever want to
> >> use
> >> any other kind of JMS broker then you'll have to rewrite some of this
> >> stuff
> >> when you migrate.  APIs are standardized for a reason.  Deviate at your
> >> own
> >> risk.
> >>
> >
> > I can't see any reason why anyone would ever not want to use ActiveMQ  ;)
> >
> >
> >
> >> 2) Every time you invoke register() you create a new Connection,
> Session,
> >> Consumer, etc.  This is an anti-pattern.  Connection objects are "heavy"
> >> and are meant to be shared.
> >>
> >> 3) You do not keep track of any of the resources you create (i.e.
> >> Connection, Session, Consumer) so you have no way to clean them up.
> >>
> >>   > maybe the strcture is not good at all
> >>
> >> I'd agree with that.
> >>
> >>
> >> Justin
> >>
> >> On Fri, Aug 18, 2017 at 12:59 PM, Juleian <julian.herb...@gmx.net>
> wrote:
> >>
> >> That sounds reasonable actually. The only problem I also somehow have is
> >>> when
> >>> register is called the method "is stuck" in the thread that is opened
> or
> >>> not? I do not see how I can return a value with this structure (maybe
> the
> >>> strcture is not good at all, its my first real programming task).
> >>>
> >>> public  register(String topicName) {
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>                  try {
> >>>
> >>>                          // create connection to Broker, create Session
> >>> and
> >>> Consumer
> >>>
> >>>                          ActiveMQConnectionFactory connectionFactory =
> >>> new
> >>> ActiveMQConnectionFactory(
> >>>                      "tcp://localhost:61616");
> >>>                          ActiveMQConnection connection =
> >>> (ActiveMQConnection)
> >>> connectionFactory.createConnection();
> >>>                          connection.start();
> >>>                          Session session =
> connection.createSession(false
> >>> ,
> >>> Session.AUTO_ACKNOWLEDGE);
> >>>                          Topic topicObject =
> >>> session.createTopic(topicName)
> >>> ;
> >>>                          MessageConsumer consumer =
> >>> session.createConsumer(
> >>> topicObject);
> >>>
> >>>
> >>>                          //check if topic is available on Broker
> >>>
> >>>
> >>>
> >>>                          DestinationSource ds = connection.
> >>> getDestinationSource();
> >>>
> >>>                      Set<ActiveMQTopic>  topics = ds.getTopics();
> >>>                          String compare = topicName;
> >>>                          int count = 0;
> >>>
> >>>                      for(ActiveMQTopic topic : topics){
> >>>
> >>>
> >>>
> >>>                              if(compare.equals(topic.getTopicName()))
> {
> >>>
> >>>                                  System.out.println("Found " +
> >>> topic.getTopicName());
> >>>                                  count = count + 1;
> >>>
> >>>
> >>>                              }
> >>>
> >>>                      }
> >>>
> >>>                      if(count == 0){
> >>>
> >>>
> >>>                                  System.out.println("The topic you want
> >>> to
> >>> subscribe to is not
> >>> found.");
> >>>                                  System.out.println("Please try again
> >>> with
> >>> a valid topic name.");
> >>>
> >>>                                  return;
> >>>
> >>>                      }
> >>>
> >>>
> >>>
> >>>
> >>>                          //register Component at mongoDB
> >>>
> >>>
> >>>
> >>>                          MessageListener listner = new
> MessageListener()
> >>> {
> >>>
> >>>                                  @Override
> >>>                                   public void onMessage(Message
> message)
> >>> {
> >>>                      try {
> >>>                          if (message instanceof TextMessage) {
> >>>                              TextMessage textMessage = (TextMessage)
> >>> message;
> >>>                              System.out.println("Received message : "
> >>>                                      + textMessage.getText() + "'");
> >>>                          }
> >>>                      } catch (JMSException e) {
> >>>                          System.out.println("Caught:" + e);
> >>>                      }
> >>>                  }
> >>>              };
> >>>              consumer.setMessageListener(listner);
> >>>
> >>>              try {
> >>>                  System.in.read();
> >>>              } catch (IOException e) {
> >>>              }
> >>>
> >>>          } catch (JMSException ex) {
> >>>              // Logger.getLogger(Consumer.class.getName()).log(Level.
> >>> SEVERE,
> >>> null, ex);
> >>>
> >>>          }
> >>>
> >>>
> >>>
> >>>          }
> >>>
> >>>
> >>>
> >>>
> >>> --
> >>> View this message in context: http://activemq.2283324.n4.
> >>> nabble.com/Close-message-listener-decoupled-tp4729814p4729816.html
> >>> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
> >>>
> >>>
> > --
> > Tim Bish
> > twitter: @tabish121
> > blog: http://timbish.blogspot.com/
> >
> >
>

Reply via email to