我想为托管在我的 Glassfish 服务器上的 JMS 主题创建一个非常简单的 JMS 独立客户端。
我的项目是使用 maven 构建的。
我知道关于要使用的 JMS 依赖项似乎有些困惑,所以,我应该在我的 pom 中使用哪些依赖项
我的 Java 测试方法是
/** Thanks to WELD CDI, this method is not static */
public void main(@Observes ContainerInitialized event) throws Throwable {
Context context = new InitialContext();
ConnectionFactory factory = (ConnectionFactory) context.lookup(JMSNotifierConstants.CONNECTION_FACTORY_NAME);
Connection connection = factory.createConnection();
Topic topic = (Topic) context.lookup(JMSNotifierConstants.NOTIFICATION_TOPIC);
Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
MessageConsumer consumer = session.createConsumer(topic);
connection.start();
while (true) {
Message received = consumer.receive();
System.out.println(received);
}
}
我的 pom 目前包含以下依赖项
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.0-SP1</version>
</dependency>
<dependency>
<groupId>org.jboss.weld</groupId>
<artifactId>weld-se</artifactId>
<version>1.0.1-Final</version>
</dependency>
<dependency>
<groupId>org.jboss.weld</groupId>
<artifactId>weld-logger</artifactId>
<version>1.0.0-CR2</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.jms</artifactId>
<version>3.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.glassfish.extras</groupId>
<artifactId>appserv-rt</artifactId>
<version>3.1</version>
</dependency>
请您参考如下方法:
好的,这个比较棘手。
经过一番搜索和尝试,我删除了焊接依赖项(为了回到更经典的 main)。
然后,我更换了我的(旧式)appserv-rt.jar
依赖于
<dependency>
<groupId>org.glassfish.appclient</groupId>
<artifactId>gf-client</artifactId>
<version>3.1</version>
<type>pom</type>
<scope>compile</scope>
</dependency>
这是 不是 稍作改动,如
gf-client
拉
全部 Glassfish 的 jars,这显然会产生很多 jars(希望有
a method 来优化 jar 号,尽管我们都知道过早优化)。
因此,一旦完成,完全可以使用 EJB 远程接口(interface),但是 不是 JMS(由于无法理解的原因)。为了使 JMS 与 gf-client 一起工作,必须为
imqjmsra.jar
创建 maven 依赖项。和
imqbroker.jar
, 均位于
%GLASSFISH3_INSTALL_DIR%/glassfish/lib/install/applications/jmsra
.此外,如
imqjmsra.jar
内部使用
imqbroker.jar
,我建议您创建以下 pom :
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.glassfish.external.jms</groupId>
<artifactId>imqjmsra</artifactId>
<version>3.1.0</version>
<description>POM was created by Sonatype Nexus</description>
<dependencies>
<dependency>
<groupId>org.glassfish.external.jms</groupId>
<artifactId>imqbroker</artifactId>
<version>3.1.0</version>
</dependency>
</dependencies>
</project>
关联到
imqjmsra.jar
和
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.glassfish.external.jms</groupId>
<artifactId>imqbroker</artifactId>
<version>3.1.0</version>
<description>POM was created by Sonatype Nexus</description>
</project>
关联到
imqbroker.jar
.
显然,当我使用 Nexus 存储库管理时,我更容易使用 Nexus“上传 Artifact 页面”在我们公司的第 3 方本地存储库中创建这些依赖项。
完成后,我的 POM 依赖项现在是
<dependency>
<groupId>org.glassfish.appclient</groupId>
<artifactId>gf-client</artifactId>
<version>3.1</version>
<type>pom</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.glassfish.external.jms</groupId>
<artifactId>imqjmsra</artifactId>
<version>3.1.0</version>
</dependency>
我可以完全轮询我的 JMS 队列。