Angenommen, ich habe eine Webanwendung auf einem TomEE (Plume 7.0.2) bereitgestellt. Für diese Anwendung möchte ich eine zentrale Klasse erstellen, die für das Senden von Nachrichten über JMS zuständig ist. Meine erste Idee war ein Servlet ohne Zuordnung zu erstellen, die die erforderlichen Felder gespritzt bekommt:Wie erstellt man eine zentrale Klasse, die Nachrichten über JMS in einer Webanwendung in TomEE sendet?
public class JMSSendingServlet extends HttpServlet {
@Resource(mappedName = "jms/logging")
private Queue loggingQueue;
@Resource
private ConnectionFactory connectionFactory;
public void sendMessage(String text) throws JMSException {
Connection connection = connectionFactory.createConnection();
//and so on...
producer.send(message);
}
}
Um jedoch diese Methode aus dem Rest der Anwendung zuzugreifen, würde ich entweder muß das Verfahren und die Felder statisch machen oder um die Instanz dieses Servlets irgendwie zu bekommen. Da ich die Abhängigkeitsinjektion bei statischen Feldern nicht durchführen kann (oder sollte), versuche ich eine Lösung für die zweite Option zu finden. Hier ist mein Versuch:
public class JMSSendingServlet extends HttpServlet {
private static JMSSendingServlet instance;
//...
@Override
public void init(ServletConfig config) throws ServletException {
instance = this;
super.init(config);
}
public static JMSSendingServlet getInstance() {
return instance;
}
}
//usage:
public class SomeClass {
public void someMethod() {
JMSSendingServlet.getInstance().sendMessage("Hello");
}
}
Da ich keine Zuordnungen nicht für dieses Servlet haben, und es wird sie über <load-on-startup/>
geladen es sollte nur eine Instanz davon existieren. Aber ich fühle mich immer noch unwohl bei dieser Lösung. Es sieht für mich schmutzig aus, zumindest weil getInstance
null zurückgeben kann.
Wäre es sauberer (wenn möglich), Abhängigkeitsinjektion aufzugeben und JNDI zu verwenden, um eine ConnectionFactory
und eine Queue
zu erhalten? Gibt es andere vielleicht bessere Lösungen?
Welche Version von TomEE verwenden Sie? –
@SteveC Der neueste stabile Plume 7.0.2 –