[JAVA] jms en mdb queueprobleem

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • pachacuti
  • Registratie: Januari 2002
  • Laatst online: 14-09 12:40
Ik zit, voor mijn SCBCD studies, al heel de dag te zoeken op een vreemd probleem en ik kom er zelf niet uit, daarom hoop ik dat hier iemand mij een beetje verder kan helpen.

Ik probeer via jms een Message Driven Bean op te roepen in GlassFish. Probleem is dat glassfish precies een random queue uitpikt.

mijn code:

client:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void main(String[] args)throws Exception {
        InitialContext ctx = new InitialContext();
        ConnectionFactory cf = (ConnectionFactory)ctx.lookup("jms/aFactory");
        Destination destination = (Destination)ctx.lookup("jms/a");


        Connection conn = cf.createConnection();
        Session session = conn.createSession(false,Session.AUTO_ACKNOWLEDGE);
        MessageProducer producer = session.createProducer(destination);
        TextMessage message = session.createTextMessage();
        message.setText("Hello MDB!");
        producer.send(message);
        session.close();
        conn.close();
        System.exit(0);
    }


de bean waar het zou moeten toekomen:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@MessageDriven(mappedName = "jms/a", activationConfig =  {
        @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")           
    })
public class NewMessageBean implements MessageListener {
    
    public NewMessageBean() {
    }

    public void onMessage(Message message) {
        try {
            TextMessage msg = (TextMessage) message;
            System.out.println(msg.getText());
        } catch (JMSException ex) {
            Logger.getLogger(NewMessageBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }   
}


Een andere bean in mijn container:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
@MessageDriven(mappedName = "jms/b", activationConfig =  {
        @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
    })
public class TestBean implements MessageListener {
    
    public TestBean() {
    }

    public void onMessage(Message message) {
        System.out.println("message received!!!!!!!");
    }
}


Als ik nu mijn client run krijg ik 50% van de tijd "message received" als output en 50% "hello MDB" terwijl ik hier altijd "hello MDB" zou verwachten.

-Ik heb al @ActivationConfigProperty(propertyName="destinationName",propertyValue="jms/a")}) toegevoegd aan mijn mdbs, zonder succes.
-Ik heb al geprobeerd om mijn beans te deployen zonder de mappedName attribute maar daar kan Glassfish blijkbaar niet mee overweg.
-Ik heb al op google gezocht, zonder succes.
-ik heb in mijn client bij producer.send mijn destination meegegeven, zonder succes

Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

pachacuti schreef op zondag 02 augustus 2009 @ 17:48:
-Ik heb al @ActivationConfigProperty(propertyName="destinationName",propertyValue="jms/a")}) toegevoegd aan mijn mdbs, zonder succes.
Volgens mij heet die property 'destination', niet 'destinationName'.

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • pachacuti
  • Registratie: Januari 2002
  • Laatst online: 14-09 12:40
Confusion schreef op zondag 02 augustus 2009 @ 21:43:
[...]

Volgens mij heet die property 'destination', niet 'destinationName'.
Nee, die property noemt weldegelijk destinationName. Als ik deze wijzig naar destination krijg ik een deploymenterror in Glassfish.

Ik kan mijn probleem wel oplossen met het gebruik van messageSelector maar dat lijkt mij ook niet echt de bedoeling te zijn.

Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Vreemd; de jboss documentatie is het met me eens: http://www.jboss.org/file...Message_Driven_Beans.html (waarbij het eerste rijtje, waaronder 'destination', standaard JCA 1.5 properties zijn en dus in Glassfish hetzelfde zouden moeten zijn).

[ Voor 8% gewijzigd door Confusion op 03-08-2009 09:06 ]

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • pachacuti
  • Registratie: Januari 2002
  • Laatst online: 14-09 12:40
blijkbaar dan toch wel, thanks :-)
Het boek dat ik lees spreekt over destinationName (ejb3 in action) en op Google zijn ook voorbeelden te vinden met destinationName.

Als ik nu mijn code wijzig naar
Java:
1
2
3
4
5
6
7
8
9
10
11
@MessageDriven(mappedName = "jms/a", activationConfig =  {
        @ActivationConfigProperty(
       propertyName = "acknowledgeMode", 
       propertyValue = "Auto-acknowledge"),
        @ActivationConfigProperty(
       propertyName = "destinationType", 
       propertyValue = "javax.jms.Queue"),
       @ActivationConfigProperty(
       propertyName="destination",
       propertyValue="jms/a")
    })

dan wil Glassfish hem niet deployen.

Als ik mijn destination wijzig naar
Java:
1
2
3
4
5
6
7
8
9
10
11
@MessageDriven(mappedName = "jms/a", activationConfig =  {
        @ActivationConfigProperty(
       propertyName = "acknowledgeMode", 
       propertyValue = "Auto-acknowledge"),
        @ActivationConfigProperty(
       propertyName = "destinationType", 
       propertyValue = "javax.jms.Queue"),
       @ActivationConfigProperty(
       propertyName="destination",
       propertyValue="a")
    })

Dan deployt hij wel maar krijg ik helemaal geen messages binnen.