2017-02-05 1 views
0

Скажем, у меня есть веб-приложение, которое я развертываю в TomEE (Plume 7.0.2). Для этого приложения я хочу создать центральный класс, ответственный за отправку сообщений через JMS. Моя первая мысль была создать сервлет без отображения, который получает необходимые поля впрыскиваются:Как создать центральный класс, отправляющий сообщения через JMS в веб-приложении в TomEE?

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); 
    } 
} 

Однако для того, чтобы получить доступ к этому методу из остальной части приложения я бы нужен либо сделать метод и поле статическим или каким-то образом получить экземпляр этого сервлета. Поскольку я не могу (или не должен) выполнять инъекцию зависимостей в статических полях, я пытаюсь найти решение для второго варианта. Вот моя попытка:

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"); 
    } 
} 

Поскольку у меня нет каких-либо отображения для этого сервлета и загружается его через <load-on-startup/> должен существовать только один экземпляр. Но я все еще чувствую себя некомфортно с этим решением. Мне кажется грязным, по крайней мере потому, что getInstance может вернуть null.

Было бы проще (если возможно) отказаться от инъекции зависимостей и использовать JNDI для получения ConnectionFactory и Queue? Могут ли быть другие решения?

+0

Какую версию TomEE вы используете? –

+0

@SteveC Последний стабильный Plume 7.0.2 –

ответ

0

Почему нет класса JMSService с инъекциями и методом send (xxx) и инъекции этого класса, где вам нужно (сервлет, jaxrs-сервис, MDB, другие ...)?

CDI сделает его более чистым IMO, чем полагаться на сервлеты

Смежные вопросы