- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很高兴改进我在 Apache Tomcat 上运行的网络应用程序。添加了一个 ActiveMQ JMS 服务器来发送和接收消息。
我添加了一个 ServletContextListener 来持续收听我的消息。但是,我不确定这是否适合生产。欢迎任何建议。
网络.xml
<listener>
<listener-class>com.test.JMSContextListener</listener-class>
</listener>
听众:
public class JMSContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent arg0) {
JMSConnector.startListening();
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
//Nothing
}
}
连接:
public class JMSConnector {
static Context context;
static QueueConnectionFactory factory;
static {
try {
context = new InitialContext();
factory = (QueueConnectionFactory) context.lookup("java:comp/env/jms/ConnectionFactory");
} catch (NamingException ex) {
//TODO
}
}
public static void startListening() {
try {
Connection connection = factory.createConnection();
Queue queue = (javax.jms.Queue) context.lookup("java:comp/env/jms/Queue");
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
MessageConsumer consumer = session.createConsumer(queue);
//This MessageListener will do stuff with the message
MessageListenerImpl messageListener = new MessageListenerImpl();
consumer.setMessageListener(messageListener);
connection.start();
// Start connection or nothing will happen!!!
connection.start();
} catch (JMSException ex) {
//TODO
} catch (NamingException ex) {
//TODO
}
}
}
这是一种推荐的方法还是应该改进?
热烈感谢所有帮助。谢谢。
最佳答案
我添加了一个带有线程的改进解决方案。
仍然欢迎额外的帮助:-)
网络.xml
<listener>
<listener-class>com.test.JMSContextListener</listener-class>
</listener>
听众:
public class JMSContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent arg0) {
Thread thread = new Thread(new JMSConnector());
thread.start();
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
//Nothing
}
}
连接:
public class JMSConnector implements Runnable {
public void run() {
try {
Context context = new InitialContext();
QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup("java:comp/env/jms/ConnectionFactory");
Connection connection = factory.createConnection();
Queue queue = (javax.jms.Queue) context.lookup("java:comp/env/jms/serverQueue");
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
MessageConsumer consumer = session.createConsumer(queue);
//This MessageListener will do stuff with the message
MessageListenerImpl messageListener = new MessageListenerImpl();
consumer.setMessageListener(messageListener);
connection.start();
// Start connection or nothing will happen!!!
connection.start();
} catch (JMSException ex) {
//TODO
} catch (NamingException ex) {
//TODO
}
}
}
这是一种推荐的方法还是应该改进?
热烈感谢所有帮助。谢谢。
关于java - 如何实现 ServletContextListener 来监听一个消息队列? (Tomcat, ActiveMQ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31671383/
我使用 Eclipse Maven 插件创建一个 Java EE 7 项目。我的问题是,当我运行应用程序时,不会调用实现 SerlvetContextListener 的类。是什么导致了这个问题? @
我在 Web 应用程序启动阶段 (contextInitialized()) 读取了一个属性文件,并开始考虑如何使这些设置对 servlet“可见”。我是否需要循环遍历键并将每个键添加到上下文中,就像
有什么原因不能在 Java ServletContextListener 中创建变量并且它的值设置和获取与其他任何变量一样。我所拥有的是 SCL 中的 ArrayList 和另一个类中的方法经常使用
实际上,我需要执行一个方法,每次机器重启都需要几个小时才能完成。我已经在 apache tomcat 上部署了我的 Web 应用程序,并且启用了 Apache tomcat 的自动启动。为此,我在 S
我正在研究servlet,我从书中做了一个例子,但我得到了nullpointerexception。 这是我的类(class): package chala; public class Dog { p
我正在尝试在部署我的 war 文件时初始化一个流对象。 我编写了一个实现 ServletContextListener 的 Initializer 类,并向我的 web.xml 添加了一个监听器类标记
如果我有多个 ServletContextListener 并且其中一些在部署描述符中声明而其他带有注释 (@WebListener),如何定义由于应用程序初始化而执行的 ServletContext
我正在尝试使用 servletContainerInitializer 注册一个 servlet,但它似乎不起作用,也许这是我的代码(请查看它),但我开始想知道 ServletContainerIni
我正在阅读有关“Servlet 3.0 中的异步处理支持”的专家(?)教程(http://www.javaworld.com/javaworld/jw-02-2009/jw-02-servlet3.h
我有一个 ServletContextListener 来初始化我的数据库。我已将其添加到我的 web.xml 中: util.MySessionListener 当我启动服务器时,一切都很
我需要有一个可通过 JSP 应用程序中的应用程序使用的对象。该对象必须实例化一次,然后在应用程序的生命周期中应使用同一个实例。 我只是 jsp 的初学者,所以我看到了两种实现此目的的方法: 我有一个
ApplicationListener 和 ServletContextListener 有什么区别?你什么时候使用它们? implements ApplicationListener impleme
我已经使用 JAX-WS 开发了一个 Web 服务,并且在 web.xml 中我注册了这个 servlet 上下文监听器。 com.sun.xml.ws.transport.http.ser
我正在创建一个 war 文件 (progressReporter.war) 并将其部署在 Jetty7.2.2.v20101205 上。我在 contextInitialized 方法上有一个系统输出
我制作了基本的 Web 应用程序,其中我采用了一个扩展 TimerTask 的 POJO 类和一个实现 ServletContextListener 的 servlet 类。现在我关心的是我想在控制台
我有一个处理特定传入请求的 servlet。我们将其称为“UpdateUserStats”。我希望调用速度快,但我还需要请求来完成一项相当昂贵的任务。我认为,如果我让 UpdateUserStats
我们在重新加载上下文时遇到多个内存泄漏(在 catalina.out 中发现)。 为了清理这些线程,我创建了 ServletContextListener 的实现。 创建上下文时成功调用了 conte
我想运行一些简单的后台进程计算,但我似乎无法弄清楚。无论我做什么,它都会阻塞。 public class WorkThreadManagerContextLoaderListener implemen
我有一个 InitApp 类 @Component public class InitApp implements ServletContextListener { @Autowired Config
我知道什么是 ServletContextListener 以及如何在 web.xml 中实现/注册它。 但问题如下。在 Web 应用程序开始时,会为每个 javaVM 创建一个监听器实例。然后调用其
我是一名优秀的程序员,十分优秀!