javax.jms.IllegalStateException: This method.

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi,

ich habe folgende Situation, wobei ich nicht weiß, ob die auftretende Exception ein Bug ist.

Als Applikationserver verwende ich JBoss 4.2.2 GA.

Situation:
Ich habe eine Webapplikation bei der sich der Benutzer einloggen kann. Loggt er sich ein, soll ein selbstgeschriebenes TrayIcon auf dem Rechner des Benutzers gestartet werden.
Soweit so gut.
Da das TrayIcon auf eingehende Nachrichten (welche per JMS versendet werden) reagieren soll, ist es notwendig, dass das TrayIcon sich an dem Topic anmeldet und einen MessageListener verwendet, um auf den Eingang der Nachricht zu reagieren:

Code:
//meldet sich an dem Topic an
try {
            connection = connectionFactory.createTopicConnection();
            session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
            TopicSubscriber topicSubscriber = null;
    		try {
    			topic = (Topic) jndiContext.lookup("topic/testTopic");
    			topicSubscriber = session.createSubscriber(topic);
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
            topicSubscriber.setMessageListener(listener);

Problem:
Nach dem Setzen des MessageListeners erhalte ich folgende Meldung:
Code:
INFO  [STDOUT] Exception occurred: javax.jms.IllegalStateException: This method is not applicable inside the application server. See the J2EE spec, e.g. J2EE1.4 Section 6.6

Kennt sich vielleicht jemand mit dem JBoss aus und konnte ebenfalls dasselbe Problem beobachten?
 
Gibt es nicht, oder? Da steht haarklein, dass du gegen die Spec verstößt und wo in der Spec steht, was du nicht machen darfst... und du fragst wo das Problem ist? Antwort: es sitzt davor!

Annahme: du hast keine Ahnung, was du da treibst bzw. was eine Enterpriseapplikation eigentlich ist.
Lösung: MDB.
 
Dann kannst du mir bestimmt das was man unter einer Enterpriseapplikation versteht. Ich verstehe darunter eine verteilte, mehrschichtige Anwendung.

Leider hab ich einen Denkfehler begannen. Wenn der Client sich an ein JMS Topic des Servers anmeldet funktinierts auch 😉.
 
Einschuldigung über mein deutsche Sprache. Es ist längst, dass ich kein Deutsch schreibe aber vielleicht I kann euch helfen.

Das Problem ist die Implementation des JMS von J2EE:

http://www.devwebsphere.com/devwebsphere/2003/11/why_are_jms_api.html

Die Lösung ist, die JBoss Implementation zu benutzen:

http://docs.jboss.org/admin-devel/Chap6.html

Das bedeutet, stat:

InitialContext iniCtx = new InitialContext();

Object tmp = iniCtx.lookup("TopicConnectionFactory");

dieses Code benutzen:

InitialContext iniCtx = new InitialContext();

Object tmp = iniCtx.lookup("ConnectionFactory");

Ich hatte gleiches Problem (ich glaube) und das funktionierte.

Grüsse!
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben