- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建简单的Web应用程序来演示在Servlet容器(tomcat)中使用WMQ 7.5。我的 webbap 基于独立的 WMQ 示例应用程序。我的独立应用程序运行良好。
测试用例也很好。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class MQMessageTest {
/**
* Message count fot test
*/
private static final int MESSAGE_COUNT = 25;
/**
* Setting Environment for getting properties
*/
@Autowired
private Environment environment;
/**
* MQMessageSender for sending messages
*/
@Autowired
private MQMessageSender mqMessageSender;
/**
* JmsTemplate of Spring JMS
*/
@Autowired
private JmsTemplate jmsTemplate;
@Test
public void testEqualsOfSentAndReceivedMessages() {
/*Sending messages to Queue*/
for (int i = 0; i < MESSAGE_COUNT; i++) {
mqMessageSender.send("Message with" + System.nanoTime());
}
/*Container for received messages*/
Set<TextMessage> messages = new HashSet<TextMessage>();
/*Receiving messages from report Queue*/
for (int i = 0; i < MESSAGE_COUNT; i++) {
TextMessage message = (TextMessage) jmsTemplate.receive(environment.getRequiredProperty("wmq.queue.test.input.2"));
messages.add(message);
}
assertEquals(messages.size(), MESSAGE_COUNT);
}
}
但是当我启动 tomcat 时遇到以下问题:
org.springframework.web.context.support.AnnotationConfigWebApplicationContext loadBeanDefinitions
INFO: Registering annotated classes: [class by.iba.config.AppConfig]
июн 08, 2015 9:29:11 AM org.apache.catalina.core.ApplicationContext log
SEVERE: StandardWrapper.Throwable
**java.lang.NoClassDefFoundError: com/ibm/mq/jms/MQConnectionFactory**
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2615)
at java.lang.Class.getDeclaredMethods(Class.java:1860)
at org.springframework.core.type.StandardAnnotationMetadata.getAnnotatedMethods(StandardAnnotationMetadata.java:140)
... 30 more
июн 08, 2015 9:29:11 AM org.apache.catalina.core.StandardContext loadOnStartup
**SEVERE: Servlet /mqservice-webapp threw load() exception
java.lang.ClassNotFoundException: com.ibm.mq.jms.MQConnectionFactory**
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
......
请告诉我出了什么问题。我该如何解决?何时需要修复:在 tomcat 或 websphere MQ 或 spring jms 中?我试图与 jetty 合作,但失败了。
我的 POM
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>by.iba</groupId>
<artifactId>mqservice-webapp</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>Web MQ Module</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<websphereMq.version>7.5.0.2</websphereMq.version>
<wmq.jars>${basedir}/lib</wmq.jars>
<spring.version>4.0.6.RELEASE</spring.version>
</properties>
<dependencies>
<!--Websphere MQ dependencies-->
<dependency>
<groupId>com.ibm</groupId>
<artifactId>com.ibm.mqjms</artifactId>
<version>${websphereMq.version}</version>
<scope>system</scope>
<systemPath>${wmq.jars}/com.ibm.mqjms.jar</systemPath>
</dependency>
<dependency>
<groupId>com.ibm</groupId>
<artifactId>com.ibm.mq.headers</artifactId>
<version>${websphereMq.version}</version>
<scope>system</scope>
<systemPath>${wmq.jars}/com.ibm.mq.headers.jar</systemPath>
</dependency>
<dependency>
<groupId>com.ibm</groupId>
<artifactId>com.ibm.mq.jmqi</artifactId>
<version>${websphereMq.version}</version>
<scope>system</scope>
<systemPath>${wmq.jars}/com.ibm.mq.jmqi.jar</systemPath>
</dependency>
<dependency>
<groupId>com.ibm</groupId>
<artifactId>com.ibm.dhbcore</artifactId>
<version>${websphereMq.version}</version>
<scope>system</scope>
<systemPath>${wmq.jars}/dhbcore.jar</systemPath>
</dependency>
<!--Spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jms_1.1_spec</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--Javax Servlet API-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--Junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.6</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Jetty Plugin -->
<!--<plugin>-->
<!--<groupId>org.mortbay.jetty</groupId>-->
<!--<artifactId>maven-jetty-plugin</artifactId>-->
<!--<version>6.1.10</version>-->
<!--</plugin>-->
<!-- Set JDK Compiler Level -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<!-- Tomcat Plugin -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<server>local_tomcat</server>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<warName>mqservice-webapp</warName>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
</project>
WebConfig
@Configuration
@ComponentScan({"..."})
@PropertySource(value = {"classpath:by.iba/wmq.properties"})
public class AppConfig {
/**
* Logger is using for tracing status of the application configuration
*/
public static final Logger LOGGER = Logger.getLogger(AppConfig.class.getName());
/**
* Environment Bean for working with properties
*/
@Autowired
private Environment environment;
/**
* Method provides setting up the MQConnectionFactory Bean in Binding mode
*
* @return MQConnectionFactory is set up in binding mode
* @throws JMSException if setting up MQConnectionFactory failed
*/
@Bean
public MQConnectionFactory mqBindingConnectionFactory() {
MQConnectionFactory connectionFactory = new MQConnectionFactory();
try {
connectionFactory.setHostName(environment.getRequiredProperty("wmq.qmgr.host"));
connectionFactory.setPort(environment.getProperty("wmq.qmgr.port", Integer.class));
connectionFactory.setQueueManager(environment.getRequiredProperty("wmq.qmgr.name"));
connectionFactory.setTransportType(environment.getProperty("wmq.qmgr.transport.type.binding", Integer.class));
connectionFactory.setCCSID(environment.getProperty("wmq.qmgr.ccsid", Integer.class));
} catch (JMSException e) {
LOGGER.severe("Cannot set up binding connection factory" + e.getMessage());
}
return connectionFactory;
}
/**
* Method provides setting up the MQConnectionFactory Bean in Client mode
*
* @return MQConnectionFactory is set up in client mode
* @throws JMSException if setting up MQConnectionFactory failed
*/
@Bean
public MQConnectionFactory mqClientConnectionFactory() {
MQConnectionFactory connectionFactory = new MQConnectionFactory();
try {
connectionFactory.setHostName(environment.getRequiredProperty("wmq.qmgr.host"));
connectionFactory.setPort(environment.getProperty("wmq.qmgr.port", Integer.class));
connectionFactory.setQueueManager(environment.getRequiredProperty("wmq.qmgr.name"));
connectionFactory.setTransportType(environment.getProperty("wmq.qmgr.transport.type.client", Integer.class));
connectionFactory.setCCSID(environment.getProperty("wmq.qmgr.ccsid", Integer.class));
connectionFactory.setChannel(environment.getRequiredProperty("wmq.qmgr.channel"));
} catch (JMSException je) {
LOGGER.severe("Cannot set up client connection factory" + je.getMessage());
}
return connectionFactory;
}
/**
* Method provides setting up Single Connection Factory Bean for using in Binding mode
*
* @return SingleConnectionFactory
*/
@Bean
public SingleConnectionFactory jmsQueueConnectionFactory() {
SingleConnectionFactory singleConnectionFactory = new SingleConnectionFactory();
singleConnectionFactory.setTargetConnectionFactory(mqBindingConnectionFactory());
singleConnectionFactory.setReconnectOnException(true);
return singleConnectionFactory;
}
/**
* Method provides setting up UserCredentialsConnectionFactoryAdapter Bean for using in Client mode
*
* @return UserCredentialsConnectionFactoryAdapter
*/
@Bean
public UserCredentialsConnectionFactoryAdapter jmsQueueConnectionFactorySecured() {
UserCredentialsConnectionFactoryAdapter connectionFactoryAdapter = new UserCredentialsConnectionFactoryAdapter();
connectionFactoryAdapter.setTargetConnectionFactory(mqClientConnectionFactory());
connectionFactoryAdapter.setUsername(environment.getRequiredProperty("wmq.qmgr.username"));
connectionFactoryAdapter.setPassword(environment.getRequiredProperty("wmq.qmgr.password"));
return connectionFactoryAdapter;
}
/**
* Method provides setting up CachingConnectionFactory Bean to organize connection pool
*
* @return CachingConnectionFactory
*/
@Bean
public CachingConnectionFactory cachingConnectionFactory() {
CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
cachingConnectionFactory.setTargetConnectionFactory(jmsQueueConnectionFactorySecured());
cachingConnectionFactory.setCacheConsumers(true);
cachingConnectionFactory.setCacheProducers(true);
cachingConnectionFactory.setSessionCacheSize(5);
return cachingConnectionFactory;
}
/**
* Method provides setting up DynamicDestinationResolver Bean
*
* @return DynamicDestinationResolver
*/
@Bean
public DynamicDestinationResolver destinationResolver() {
return new DynamicDestinationResolver();
}
/**
* Method provides setting up JmsTemplate Bean
*
* @return DynamicDestinationResolver
*/
@Bean
public JmsTemplate jmsQueueTemplate() {
JmsTemplate jmsTemplate = new JmsTemplate();
jmsTemplate.setConnectionFactory(jmsQueueConnectionFactorySecured()); // optionally switching client mode
// jmsTemplate.setConnectionFactory(jmsQueueConnectionFactory()); // optionally switching binding mode
jmsTemplate.setDestinationResolver(destinationResolver());
jmsTemplate.setReceiveTimeout(10000);
return jmsTemplate;
}
/**
* Method provides setting up MQMessageListener Bean for getting messages
* from Websphere MQ and his personal settings
*
* @return MQMessageListener
*/
@Bean
public MQMessageListener mqMessageListener() {
return new MQMessageListener();
}
/**
* Method provides MQMessageSender Bean for sending messages
* to Websphere MQ and his personal settings
*
* @return @MQMessageSender
*/
@Bean
public MQMessageSender mqMessageSender() {
MQMessageSender mqMessageSender = new MQMessageSender();
mqMessageSender.setDestinationQueue(environment.getRequiredProperty("wmq.queue.test.input.1"));
mqMessageSender.setForwardQueue(environment.getRequiredProperty("wmq.queue.test.input.2"));
return mqMessageSender;
}
/**
* Method provides DefaultMessageListenerContainer Bean for sending messages
*
* @return DefaultMessageListenerContainer
*/
@Bean
public DefaultMessageListenerContainer jmsListenerContainer() {
DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer();
try {
dmlc.setConnectionFactory(mqClientConnectionFactory()); // optionally switching client mode
// dmlc.setConnectionFactory(mqBindingConnectionFactory()); // optionally switching binding mode
dmlc.setConcurrentConsumers(environment.getProperty("wmq.listener.concurrent.consumers", Integer.class));
dmlc.setMessageListener(mqMessageListener());
dmlc.setDestination(new MQDestination(environment.getRequiredProperty("wmq.queue.test.input.1")));
} catch (JMSException je) {
LOGGER.severe(je.getMessage());
}
return dmlc;
}
}
WEB 初始化程序
public class WebInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(AppConfig.class);
ctx.setServletContext(servletContext);
ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
servlet.setLoadOnStartup(1);
servlet.addMapping("/");
}
}
非常感谢。对不起我的英语
最佳答案
最终 war 包含 MQ jar 文件吗?我认为这是构建问题,缺少 IBM MQ jar 文件,因此出现 ClassNotFoundException。
我建议,使用 Maven 的文件系统存储库,而不是使用系统路径直接链接到源。请参阅Maven: add a dependency to a jar by relative path 。将 MQ Jars 添加到此存储库并将它们添加为 POM 中的依赖项。
另一个选择是使用catalina.properties 中的共享类加载器。在这里,您可以直接从/opt/mqm/java/lib 加载 MQ jar。
关于java - ClassNotFoundException : com. ibm.mq.jms.MQConnectionFactory(Websphere MQ 7.5 + spring jms + maven tomcat 7 插件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30710138/
我们目前使用 MQ Explorer 来管理 Z/OS 上的 WebSphere MQ V7。前几天误删了一个队列。后来我想回顾一下历史并查看一些日志以了解它究竟发生在何时。我的问题是,MQ Expl
默认情况下是否安装了扩展事务客户端?如何验证是否已安装?我如何安装这个? 最佳答案 在先前版本的 MQ 客户端中,它当然不包含在标准客户端中(事务客户端具有成本/许可影响)。 但是,从 WMQ v7.
我有 2 个队列,比如 Q1 和 Q2。当我使用 MQPUT 将消息插入 Q1 时,有什么方法可以将此消息复制到 Q2 中吗? WMQ 是否支持队列复制? 注意:队列驻留在不同的队列管理器上。 谢谢,
我有一个进程,它使用 JMSTemplate 根据 JMS header 值有选择地从 MQ 队列中出列。 当出队查询匹配队列前面的消息时,出队速率约为 60-70 条消息/秒。但是,当查询仅匹配 5
Source LogPrimaryFiles=3|2-254 (Windows)|2-510 (UNIX systems) The log files allocated when the queue
在Websphere MQ系列中,队列管理器的命令级别是701。它实际上指定了什么? 最佳答案 WebSphere 产品使用“[版本].[发行版].[修改].[修订包]”命名约定。例如,7.0.1.6
在哪里可以找到 IBM MQ 版本 V8.0.0.5 和 V9.0 之间的区别?我试图在 IBM 网站上查找它,但没有成功。 最佳答案 IBM 的 v9 知识中心页面“What's new in Ve
我已经在我的机器上安装了 MQ(已经用 regedit32 检查过)但是当我在命令提示符下键入“runmqsc”时出现错误“无法识别命令”(为 mqjms.jar 设置了环境变量)我是什么失踪 ?我想
我在我的系统中安装了 MQ V8.0.0.2,我正在应用修复包以使用静默安装方法将其升级到 8.0.0.5。它运行成功并完成,但 dspmqver仍然说版本为 8.0.0.2。 它在 64 位的 Wi
我们有一个场景,我们希望 node.js 应用程序使用来自后端系统的消息,该后端系统当前将消息放入 Websphere MQ 队列(通过 SAP PI)。 在 MQ 8.0.0.3 中,有一个 AMQ
我们有消息通过 WebSphere MQ 队列传入。我们需要很长时间才能收到消息。 是否有一种简单易行的方法来跟踪收到/提取消息的时间? 最佳答案 发送消息后,您可以请求确认交货。当消息被消费时,一条
我想将文件系统中的文件加载到 WebSphere MQ 队列。有几个支持 pacs - Q Program和 MO03: WebSphere MQ Queue Load / Unload Utilit
有人使用过 RPG 中的 MQ 吗?问题如下。队列中有几条消息。它们都带有 RFH2 header 。每个 header 都包含一组 NameValueData。我正在创建消息句柄并将其传递给 MQG
我有一组 IBM MQ 队列管理器,想知道其中一个何时重新启动或何时自动故障转移到备用实例。 队列管理器位于 AIX 上 问候, 最佳答案 您可以从 AMQERR01.LOG 中找到此信息。队列管理器
作为我们应用程序安装的一部分,我需要将一堆 xml 消息放入一个 MQ 队列中。为了使它更复杂,消息需要设置 RFH2 header 的 usr 文件夹。 我发现 mqput2.exe来自 IBM R
我一直在研究变幻莫测的 channel 状态、它们如何进入这些状态以及如何停止或启动它们。我现在已经有了相当扎实的理解,但是一位同事提出了 channel 重置的话题。 当我无法解释发生了什么时,我偶
我从 MQ 安全演示文稿中看到一项建议,如果您不需要命令服务器,它会关闭它。我的问题是如何确定我是否真的需要它。 从我的角度来看,如果没有运行目标 QMGR 的管理程序,例如 MQ Explorer
是否可以保留已检索且不再位于队列中的消息历史记录(包含消息内容将是完美的)? 在应用程序中,我可以看到发送者何时尝试将消息放入队列以及接收者何时尝试拾取消息,但我想查看消息何时真正到达队列以及消息何时
有没有办法找到在特定时间段内通过 IBM websphere MQ 队列管理器的消息总数? 最佳答案 这听起来像是 MQ 记帐和统计功能的完美使用。除此之外,这些功能还记录消息数量(具有持久和非持久计
我正在向远程队列发送消息,但我无法控制该队列。 我发送一个 xml 文件作为消息,但是当应用程序读取消息时,它会得到一个消息头,例如 jms_text \0\0\0lqueue:///TEST128
我是一名优秀的程序员,十分优秀!