2017-02-05 7 views
0

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を使用してConnectionFactoryQueueを取得することは可能ですか?他に多分良い解決策がありますか?

+0

どのTomieのバージョンを使用していますか? –

+0

@SteveC最新の安定したプルーム7.0.2 –

答えて

0

注射とsend(xxx)メソッドを持つJMSServiceクラスがなく、必要なところでこのクラスを注入しないのはなぜですか(サーブレット、jaxrsサービス、MDB、その他...)?

CDIはサーブレットに頼るよりも洗練されたIMOになります

関連する問題