Problem mit javax.jms

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Problem mit javax.jms

    Guten Abend liebe Community,

    ich wurde damit konfrontiert einen Java Messaging Service zu implementieren. Keine Angst, es ist nur eine Aufgabe für die Hochschule ;)
    Wir haben dazu ein paar Code-Fetzen bekommen. Ich habe nun Java Message Queue 4.3 installiert und einen Broker angelegt. Ich versuche nun mit einem kleinen Producer-Programm eine Nachricht hineinzuschreiben. Jedoch weiß ich nicht, welche Eigenschaften ich für den InitialContext angeben muss. Ich konnte auch in der Doku nicht besonders viel finden.
    Vielleicht hat hier jemand eine Idee?

    Quellcode

    1. import javax.jms.*;
    2. import javax.naming.*;
    3. import java.util.Properties;
    4. public class Producer {
    5. private QueueConnectionFactory qFactory = null;
    6. private QueueConnection qConnect = null;
    7. private QueueSession qSession = null;
    8. private Queue sQueue = null;
    9. private QueueSender qSender = null;
    10. private String username = null;
    11. private String password = null;
    12. /* Constructor. Establish the Producer */
    13. public Producer(String broker, String username, String password) throws Exception {
    14. // Obtain a JNDI connection
    15. Properties env = new Properties();
    16. env.put("java.naming.factory.initial","com.sun.jndi.fscontext.RefFSContextFactory");
    17. env.put("java.naming.provider.url", "localhost:7676");
    18. env.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
    19. // ... specify the JNDI properties sprecific to the
    20. // provider
    21. InitialContext jndi = new InitialContext(env);
    22. this.username = username;
    23. this.password = password;
    24. // Look up a JMS QueueConnectionFactory
    25. qFactory = (QueueConnectionFactory) jndi.lookup(broker);
    26. // Create a JMS QueueConnection object
    27. qConnect = qFactory.createQueueConnection(username, password);
    28. // Create one JMS QueueSession object
    29. qSession = qConnect.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);
    30. // Look up for a JMS Queue hello
    31. sQueue = (Queue) jndi.lookup("hello");
    32. // Create a sender
    33. qSender = qSession.createSender(sQueue);
    34. // Start the Connection
    35. qConnect.start();
    36. }
    37. /* Create and send message using qSender */
    38. protected void sendMessage() throws JMSException {
    39. // Create message
    40. TextMessage message = qSession.createTextMessage();
    41. // Set payload
    42. message.setText(username + " Hello");
    43. // Send Message
    44. qSender.send(message);
    45. }
    46. /* Close the JMS connection */
    47. public void close() throws JMSException {
    48. qConnect.close();
    49. }
    50. /* Run the Producer */
    51. public static void main(String args[]) {
    52. String broker, username, password;
    53. if (args.length == 3) {
    54. broker = args[0];
    55. username = args[1];
    56. password = args[2];
    57. } else {
    58. System.out.println("Bitte Parameter angeben (broker username password)");
    59. return;
    60. }
    61. // Create Producer
    62. try {
    63. System.out.println("Hier bin ich schonma");
    64. Producer producer = new Producer(broker, username, password);
    65. System.out.println("hier auch");
    66. // Send the message
    67. producer.sendMessage();
    68. System.out.println("so, jetzt Nachricht gesendet");
    69. // Close connection
    70. producer.close();
    71. } catch (Exception e) {
    72. System.out.println("Fehler: "+e);
    73. }
    74. }
    75. }
    Alles anzeigen


    Danke im Voraus!
  • Um das ganze einmal aufzulösen, falls noch jemand auf dieses Problem stößt.

    Schrittfolge:
    1. OpenMQ
    1.1. Broker anlegen
    1.2. ObjectStroe anlgen
    1.3. ConnectionFactory anlegen
    1.4 Target anlegen
    2. mit Java auf genau diese Objekte zugreifen

    Ein Beispiel Quelltext:

    Quellcode

    1. import javax.jms.*;
    2. import javax.naming.*;
    3. import java.util.Properties;
    4. public class Producer {
    5. private QueueConnectionFactory qFactory = null;
    6. private QueueConnection qConnect = null;
    7. private QueueSession qSession = null;
    8. private Queue sQueue = null;
    9. private QueueSender qSender = null;
    10. private String broker = null;
    11. private String username = null;
    12. private String password = null;
    13. /* Run the Producer */
    14. public static void main(String args[]) {
    15. String broker, username, password;
    16. if (args.length == 3) {
    17. broker = args[0];
    18. username = args[1];
    19. password = args[2];
    20. } else {
    21. broker = "MyQueueConnectionFactory";
    22. username = "admin";
    23. password = "admin";
    24. System.out.println("Nächstes Mal bitte Parameter angeben (broker username password)");
    25. System.out.println("Broker: " + broker);
    26. System.out.println("Username: " + username);
    27. System.out.println("Password: " + password);
    28. }
    29. // Create Producer
    30. try {
    31. System.out.println("Hier bin ich schonma");
    32. Producer producer = new Producer(broker, username, password);
    33. System.out.println("hier auch");
    34. // Send the message
    35. producer.sendMessage();
    36. System.out.println("so, jetzt Nachricht gesendet");
    37. // Close connection
    38. producer.close();
    39. } catch (Exception e) {
    40. System.out.println("Fehler: "+e);
    41. }
    42. }
    43. /* Constructor. Establish the Producer */
    44. public Producer(String broker, String username, String password) throws Exception {
    45. Properties env = new Properties();
    46. // JNDI-Properties
    47. env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
    48. env.put(Context.PROVIDER_URL, "file:///C:/Temp");
    49. // Netzwerkverbindung zum Namensserver
    50. InitialContext jndi = new InitialContext(env);
    51. //InitialContext jndi = new InitialContext();
    52. this.username = username;
    53. this.password = password;
    54. // Look up a JMS QueueConnectionFactory
    55. qFactory = (QueueConnectionFactory) jndi.lookup(broker);
    56. // Create a JMS QueueConnection object
    57. qConnect = qFactory.createQueueConnection(username, password);
    58. // Create one JMS QueueSession object
    59. qSession = qConnect.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);
    60. // Look up for a JMS Queue hello
    61. sQueue = (Queue) jndi.lookup("MyQueue");
    62. // Create a sender
    63. qSender = qSession.createSender(sQueue);
    64. // Start the Connection
    65. qConnect.start();
    66. }
    67. /* Create and send message using qSender */
    68. protected void sendMessage() throws JMSException {
    69. // Create message
    70. TextMessage message = qSession.createTextMessage();
    71. // Set payload
    72. message.setText(username + " Hello");
    73. // Send Message
    74. qSender.send(message);
    75. }
    76. /* Close the JMS connection */
    77. public void close() throws JMSException {
    78. qConnect.close();
    79. }
    80. }
    Alles anzeigen


    Mehr Infos dazu direkt bei Java MQ: docs.sun.com/app/docs/coll/1307.6 (Achtung! In der PDF-Version des Guides gibt es detailliertere Informationen als in der HTML-Version)