TomEE(Plume 7.0.2)にデプロイするWebアプリケーションがあります。このアプリケーションでは、JMS経由でメッセージを送信する責任がある中央クラスを作成したいと考えています。私の最初のアイデアは、注入された必要なフィールドを取得した、マッピングなしのサーブレットを作成することでした。TomEEのWebアプリケーションでJMS経由でメッセージを送信する中央クラスを作成する方法は?
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);
}
}
しかし残りのアプリケーションからこのメソッドにアクセスするために、私はどちらかの必要があるだろう方法とフィールドは静的にします何らかの形でそのサーブレットのインスタンスを取得することができます。私は静的フィールドに依存性注入を行うことはできないので(またはすべきではありません)、私は第2のオプションの解決策を見つけようとしています。私はこのサーブレットのすべてのマッピングを持っていないと、それは<load-on-startup/>
経由でロードされるので、それのインスタンスを1つだけ存在する必要があります
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");
}
}
:ここに私の試みです。しかし、私はまだその解決策に不快感を感じています。 getInstance
はnullを返すことができるので、少なくとも私には汚れているように見えます。
依存性注入を放棄し、JNDIを使用してConnectionFactory
とQueue
を取得することは可能ですか?他に多分良い解決策がありますか?
どのTomieのバージョンを使用していますか? –
@SteveC最新の安定したプルーム7.0.2 –