You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by ageannopoulos <gi...@git.apache.org> on 2017/05/11 15:05:26 UTC
[GitHub] qpid-jms pull request #7: Client+Server class additions - updated
GitHub user ageannopoulos opened a pull request:
https://github.com/apache/qpid-jms/pull/7
Client+Server class additions - updated
I made these classes more simplified but still demonstrative of JMS message interpretation, added the licenses, and cleaned up code.
I also made the client generate messages that could have one of three messages to show that the server will reply to the correct client via the TemporaryQueue.
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/ageannopoulos/qpid-jms client_server_additions
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/qpid-jms/pull/7.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #7
----
commit 7bd681339e322b0b776684211fb1a26c70760ab3
Author: Austin Geannopoulos <au...@gmail.com>
Date: 2017-05-08T17:35:08Z
Added two new example classes, Client and Server
commit 2474c859a757b475fba6e83afec6b18402dd9d4e
Author: Austin Geannopoulos <au...@gmail.com>
Date: 2017-05-11T15:00:20Z
Updated the client+server examples to be more straightforward and cleaned up code
----
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org
[GitHub] qpid-jms issue #7: Client+Server class additions - updated 5/15/17
Posted by gemmellr <gi...@git.apache.org>.
Github user gemmellr commented on the issue:
https://github.com/apache/qpid-jms/pull/7
Hi Austin,
I've squashed your chagnes into a single commit (https://github.com/apache/qpid-jms/commit/72c7bb0880b5cc7dd332c0220091f93d0de9a5a2) and put it in along with further commit (https://github.com/apache/qpid-jms/commit/8a1a498c6c8307da1e3079c09c3d4d2e0aff5776) to fix up some remaining indentation+tab issues and make some small simplification+clarification changes. Thanks for the contribution!
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org
[GitHub] qpid-jms pull request #7: Client+Server class additions - updated
Posted by gemmellr <gi...@git.apache.org>.
Github user gemmellr commented on a diff in the pull request:
https://github.com/apache/qpid-jms/pull/7#discussion_r116057472
--- Diff: qpid-jms-examples/src/main/java/org/apache/qpid/jms/example/Client.java ---
@@ -0,0 +1,106 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.jms.example;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.DeliveryMode;
+import javax.jms.Destination;
+import javax.jms.ExceptionListener;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+import javax.jms.TemporaryQueue;
+import javax.jms.TextMessage;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+
+public class Client {
+ private static final int DELIVERY_MODE = DeliveryMode.NON_PERSISTENT;
+
+ public static void main(String[] args) throws Exception {
+ try {
+ // The configuration for the Qpid InitialContextFactory has been supplied in
+ // a jndi.properties file in the classpath, which results in it being picked
+ // up automatically by the InitialContext constructor.
+ Context context = new InitialContext();
+
+ ConnectionFactory factory = (ConnectionFactory) context.lookup("myFactoryLookup");
+ Destination queue = (Destination) context.lookup("myQueueLookup");
+
+ Connection connection = factory.createConnection(System.getProperty("USER"), System.getProperty("PASSWORD"));
+ connection.setExceptionListener(new MyExceptionListener());
+ connection.start();
+
+ Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ //Creates a message and temporary queue to send to and from.
--- End diff --
Following the other examples would be better here, increasing consistency between them and serving to demonstrate sending multiple requests with the same producer as would typically be done. For example:
```
String[] requests = new String[] { "Twas brillig, and the slithy toves",
"Did gire and gymble in the wabe.",
"All mimsy were the borogroves,",
"And the mome raths outgrabe." };
for (String request : requests) {
TextMessage requestMessage = session.createTextMessage(request);
requestMessage.setJMSReplyTo(replyToQueue);
messageProducer.send(requestMessage, DeliveryMode.NON_PERSISTENT, Message.DEFAULT_PRIORITY, Message.DEFAULT_TIME_TO_LIVE);
}
```
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org
[GitHub] qpid-jms pull request #7: Client+Server class additions - updated
Posted by gemmellr <gi...@git.apache.org>.
Github user gemmellr commented on a diff in the pull request:
https://github.com/apache/qpid-jms/pull/7#discussion_r116064745
--- Diff: qpid-jms-examples/src/main/java/org/apache/qpid/jms/example/Server.java ---
@@ -0,0 +1,94 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.jms.example;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.DeliveryMode;
+import javax.jms.Destination;
+import javax.jms.ExceptionListener;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+import javax.jms.ObjectMessage;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import java.util.ArrayList;
+import java.util.Collections;
+
+public class Server {
+ public static void main(String[] args) throws Exception {
+ try {
--- End diff --
The try block and its contents are indented an extra level than it should be. Your editor should be able to fix the indent. Feel free to grab me on IRC for assistance if needed.
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org
[GitHub] qpid-jms issue #7: Client+Server class additions - updated 5/15/17
Posted by ageannopoulos <gi...@git.apache.org>.
Github user ageannopoulos commented on the issue:
https://github.com/apache/qpid-jms/pull/7
Robbie,
Thanks for all the feedback. I'm very new to the open source world and your suggestions and advice is very helpful for me. I updated the classes again following the suggestions- hopefully they're close to being if not already finalized!
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org
[GitHub] qpid-jms pull request #7: Client+Server class additions - updated 5/15/17
Posted by asfgit <gi...@git.apache.org>.
Github user asfgit closed the pull request at:
https://github.com/apache/qpid-jms/pull/7
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org
[GitHub] qpid-jms pull request #7: Client+Server class additions - updated
Posted by gemmellr <gi...@git.apache.org>.
Github user gemmellr commented on a diff in the pull request:
https://github.com/apache/qpid-jms/pull/7#discussion_r116053494
--- Diff: qpid-jms-examples/src/main/java/org/apache/qpid/jms/example/Client.java ---
@@ -0,0 +1,106 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.jms.example;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.DeliveryMode;
+import javax.jms.Destination;
+import javax.jms.ExceptionListener;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+import javax.jms.TemporaryQueue;
+import javax.jms.TextMessage;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+
+public class Client {
+ private static final int DELIVERY_MODE = DeliveryMode.NON_PERSISTENT;
+
+ public static void main(String[] args) throws Exception {
+ try {
+ // The configuration for the Qpid InitialContextFactory has been supplied in
+ // a jndi.properties file in the classpath, which results in it being picked
+ // up automatically by the InitialContext constructor.
+ Context context = new InitialContext();
+
+ ConnectionFactory factory = (ConnectionFactory) context.lookup("myFactoryLookup");
+ Destination queue = (Destination) context.lookup("myQueueLookup");
+
+ Connection connection = factory.createConnection(System.getProperty("USER"), System.getProperty("PASSWORD"));
+ connection.setExceptionListener(new MyExceptionListener());
+ connection.start();
+
+ Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ //Creates a message and temporary queue to send to and from.
+ int random = (int) (Math.random()*3);
+ TextMessage messageToBeSent;
+ if (random == 0) {
+ messageToBeSent = session.createTextMessage("first example message");
+ } else if (random == 1) {
+ messageToBeSent = session.createTextMessage("second example message");
+ } else {
+ messageToBeSent = session.createTextMessage("third example message");
+ }
+
+ TemporaryQueue tempQueue = session.createTemporaryQueue();
+ messageToBeSent.setJMSReplyTo(tempQueue);
+ MessageProducer messageProducer = session.createProducer(queue);
+
+ //Send the message
+ messageProducer.send(messageToBeSent, DELIVERY_MODE, Message.DEFAULT_PRIORITY, Message.DEFAULT_TIME_TO_LIVE);
+ System.out.println("[CLIENT] The message with text \"" + messageToBeSent.getText() +"\" has been sent.");
+
+ MessageConsumer messageConsumer = session.createConsumer(tempQueue);
--- End diff --
It would be better to move creation of the consumer on the response queue up to before sending any request, to ensure there is a listener ready for the message. It often wont matter, but there are some select cases it does so its best to have the examples show that.
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org
[GitHub] qpid-jms pull request #7: Client+Server class additions - updated
Posted by gemmellr <gi...@git.apache.org>.
Github user gemmellr commented on a diff in the pull request:
https://github.com/apache/qpid-jms/pull/7#discussion_r116048356
--- Diff: qpid-jms-examples/src/main/java/org/apache/qpid/jms/example/Client.java ---
@@ -0,0 +1,106 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.jms.example;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.DeliveryMode;
+import javax.jms.Destination;
+import javax.jms.ExceptionListener;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+import javax.jms.TemporaryQueue;
+import javax.jms.TextMessage;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+
+public class Client {
+ private static final int DELIVERY_MODE = DeliveryMode.NON_PERSISTENT;
+
+ public static void main(String[] args) throws Exception {
+ try {
+ // The configuration for the Qpid InitialContextFactory has been supplied in
+ // a jndi.properties file in the classpath, which results in it being picked
+ // up automatically by the InitialContext constructor.
+ Context context = new InitialContext();
+
+ ConnectionFactory factory = (ConnectionFactory) context.lookup("myFactoryLookup");
+ Destination queue = (Destination) context.lookup("myQueueLookup");
+
+ Connection connection = factory.createConnection(System.getProperty("USER"), System.getProperty("PASSWORD"));
+ connection.setExceptionListener(new MyExceptionListener());
+ connection.start();
+
+ Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ //Creates a message and temporary queue to send to and from.
+ int random = (int) (Math.random()*3);
+ TextMessage messageToBeSent;
+ if (random == 0) {
+ messageToBeSent = session.createTextMessage("first example message");
+ } else if (random == 1) {
+ messageToBeSent = session.createTextMessage("second example message");
+ } else {
+ messageToBeSent = session.createTextMessage("third example message");
+ }
+
+ TemporaryQueue tempQueue = session.createTemporaryQueue();
+ messageToBeSent.setJMSReplyTo(tempQueue);
+ MessageProducer messageProducer = session.createProducer(queue);
+
+ //Send the message
+ messageProducer.send(messageToBeSent, DELIVERY_MODE, Message.DEFAULT_PRIORITY, Message.DEFAULT_TIME_TO_LIVE);
+ System.out.println("[CLIENT] The message with text \"" + messageToBeSent.getText() +"\" has been sent.");
+
+ MessageConsumer messageConsumer = session.createConsumer(tempQueue);
+
+ //Receive the server response
+ TextMessage receivedMessage = (TextMessage) messageConsumer.receive(1000);
+ if (receivedMessage != null) {
+ System.out.println("[CLIENT] Response from server received.");
+ } else {
+ System.out.println("[CLIENT] Response not received within timeout, stopping.");
+ }
+
+ //Display response and close client.
+ System.out.println("[CLIENT] Here is the interpreted message:\n" + receivedMessage.getText() + "\n[CLIENT] Quitting Client.");
--- End diff --
I'd probably just print a single line showing the response text, and optionally the request text. E.g. other exampels show a line with "\<lowercase request\> --> \<uppercase response\>" style output.
I suggested a loop above to send multiple requests. You could also put the receive call in the loop, and that way it would act as more of a synchronous send-request ->receive-response example, which is commonly how this will be used.
Seperately, the receivedMessage object is referenced here even after it might have been found to be null earlier, which would throw a NullPointerException. Moving the output process up to within the if statement checking the response message will sort that out.
Although this would go away with the above suggestions, note that in the existing code the use of "\n" in the println isn't desirable since it is platform-specific. To ensure the output works consistently, you should either use multiple println calls, or get the platform-specific line separator (e.g. System.lineSeparator();) and use it rather than hard coding \n in the string. Alternatively, formatter strings can do the proper separator replacement.
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org
[GitHub] qpid-jms pull request #7: Client+Server class additions - updated
Posted by gemmellr <gi...@git.apache.org>.
Github user gemmellr commented on a diff in the pull request:
https://github.com/apache/qpid-jms/pull/7#discussion_r116069936
--- Diff: qpid-jms-examples/src/main/java/org/apache/qpid/jms/example/Server.java ---
@@ -0,0 +1,94 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.jms.example;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.DeliveryMode;
+import javax.jms.Destination;
+import javax.jms.ExceptionListener;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+import javax.jms.ObjectMessage;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import java.util.ArrayList;
+import java.util.Collections;
+
+public class Server {
+ public static void main(String[] args) throws Exception {
+ try {
+ // The configuration for the Qpid InitialContextFactory has been supplied in
+ // a jndi.properties file in the classpath, which results in it being picked
+ // up automatically by the InitialContext constructor.
+ Context context = new InitialContext();
+
+ ConnectionFactory factory = (ConnectionFactory) context.lookup("myFactoryLookup");
+ Destination queue = (Destination) context.lookup("myQueueLookup");
+
+ Connection connection = factory.createConnection(System.getProperty("USER"), System.getProperty("PASSWORD"));
+ connection.setExceptionListener(new MyExceptionListener());
+ connection.start();
+
+ Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ MessageConsumer messageConsumer = session.createConsumer(queue);
+ MessageProducer messageProducer = session.createProducer(null);
+
+ while (true) {
+ System.out.println("[SERVER] Awaiting Message...");
--- End diff --
The lines below this are indented an extra level, they should all be at this level. I also think we can simplify this section and improve the output a little by doing something like:
```
while (true) {
TextMessage receivedMessage = (TextMessage) messageConsumer.receive();
System.out.println("[SERVER] Received: " + receivedMessage.getText());
TextMessage responseMessage = session.createTextMessage(receivedMessage.getText().toUpperCase());
messageProducer.send(receivedMessage.getJMSReplyTo(), responseMessage, DeliveryMode.NON_PERSISTENT, Message.DEFAULT_PRIORITY, Message.DEFAULT_TIME_TO_LIVE);
}
```
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org
[GitHub] qpid-jms pull request #7: Client+Server class additions - updated
Posted by gemmellr <gi...@git.apache.org>.
Github user gemmellr commented on a diff in the pull request:
https://github.com/apache/qpid-jms/pull/7#discussion_r116052679
--- Diff: qpid-jms-examples/src/main/java/org/apache/qpid/jms/example/Client.java ---
@@ -0,0 +1,106 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.jms.example;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.DeliveryMode;
+import javax.jms.Destination;
+import javax.jms.ExceptionListener;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+import javax.jms.TemporaryQueue;
+import javax.jms.TextMessage;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+
+public class Client {
+ private static final int DELIVERY_MODE = DeliveryMode.NON_PERSISTENT;
+
+ public static void main(String[] args) throws Exception {
+ try {
+ // The configuration for the Qpid InitialContextFactory has been supplied in
+ // a jndi.properties file in the classpath, which results in it being picked
+ // up automatically by the InitialContext constructor.
+ Context context = new InitialContext();
+
+ ConnectionFactory factory = (ConnectionFactory) context.lookup("myFactoryLookup");
+ Destination queue = (Destination) context.lookup("myQueueLookup");
+
+ Connection connection = factory.createConnection(System.getProperty("USER"), System.getProperty("PASSWORD"));
+ connection.setExceptionListener(new MyExceptionListener());
+ connection.start();
+
+ Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ //Creates a message and temporary queue to send to and from.
+ int random = (int) (Math.random()*3);
+ TextMessage messageToBeSent;
+ if (random == 0) {
+ messageToBeSent = session.createTextMessage("first example message");
+ } else if (random == 1) {
+ messageToBeSent = session.createTextMessage("second example message");
+ } else {
+ messageToBeSent = session.createTextMessage("third example message");
+ }
+
+ TemporaryQueue tempQueue = session.createTemporaryQueue();
+ messageToBeSent.setJMSReplyTo(tempQueue);
+ MessageProducer messageProducer = session.createProducer(queue);
+
+ //Send the message
+ messageProducer.send(messageToBeSent, DELIVERY_MODE, Message.DEFAULT_PRIORITY, Message.DEFAULT_TIME_TO_LIVE);
+ System.out.println("[CLIENT] The message with text \"" + messageToBeSent.getText() +"\" has been sent.");
+
+ MessageConsumer messageConsumer = session.createConsumer(tempQueue);
+
+ //Receive the server response
+ TextMessage receivedMessage = (TextMessage) messageConsumer.receive(1000);
+ if (receivedMessage != null) {
+ System.out.println("[CLIENT] Response from server received.");
+ } else {
+ System.out.println("[CLIENT] Response not received within timeout, stopping.");
+ }
+
+ //Display response and close client.
+ System.out.println("[CLIENT] Here is the interpreted message:\n" + receivedMessage.getText() + "\n[CLIENT] Quitting Client.");
+ connection.close();
+ System.exit(1);
--- End diff --
The exit call should be removed. It is signalling an error return code when everything actually went ok. The example will exit itself naturally once the connection is closed.
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org