我想为托管在我的 Glassfish 服务器上的 JMS 主题创建一个非常简单的 JMS 独立客户端。

我的项目是使用 maven 构建的。

我知道关于要使用的 JMS 依赖项似乎有些困惑,所以,我应该在我的 pom 中使用哪些依赖项

  • 连接到我的 JNDI 上下文
  • 能够阅读我的 JMS 主题吗?

  • 我的 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 队列。


    评论关闭
    IT干货网

    微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!