С какими maven-зависимостями я могу создать автономный JMS-клиент для Glassfish? - PullRequest
7 голосов
/ 15 апреля 2011

Я хочу создать очень простой автономный клиент JMS для темы JMS, размещенной на моем сервере Glassfish.

Мой проект построен с использованием maven.

Я знаю, что, похоже, что-то вроде беспорядка в отношении зависимостей JMS для использования, поэтому, какие зависимости я должен использовать в моем pom для

  1. Подключиться к моему контексту JNDI
  2. Уметь читать мою тему 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>

Ответы [ 4 ]

5 голосов
/ 21 апреля 2011

ОК, это было довольно сложно.

После некоторых поисков и попыток я удалил зависимости сварного шва (чтобы вернуться к более классическому основному).

Затем я заменилмоя (в старом стиле) 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, которыеочевидно, делает много jar (надеюсь, что есть метод для оптимизации числа jar, хотя мы все знаем о преждевременной оптимизации).

Так что, как только это будет сделано, вполне возможно использовать EJBудаленный интерфейс, но не JMS (по непонятным причинам).Чтобы заставить JMS работать с gf-клиентом, нужно создать maven-зависимости для imqjmsra.jar и imqbroker.jar, которые расположены в %GLASSFISH3_INSTALL_DIR%/glassfish/lib/install/applications/jmsra.Кроме того, поскольку imqjmsra.jar внутренне использует imqbroker.jar, я рекомендую вам создать следующие помпы:

<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 "страница загрузки артефакта".

Как только это будет сделано,Мои зависимости 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.

1 голос
/ 15 февраля 2013

Ну, для меня то, что сработало, это добавление gf-client.jar из папки установки glassfish, но добавление gf-client из репозиториев maven не сработало.

При использовании зависимостей maven я обнаружил, что это работает: https://stackoverflow.com/a/10123034/516188

<dependency>
    <groupId>org.glassfish.main.extras</groupId>
    <artifactId>glassfish-embedded-all</artifactId>
    <version>3.1.2</version>
</dependency>

Это делает для окончательного файла JAR 62 Мб, но это работает. Затем я решил эту проблему, использовав System.exit (0) для этого: Отправка сообщения с JMS зависает при выходе

1 голос
/ 15 апреля 2011

Я конвертирую из GF 2.1 в 3.1, и я еще не получил клиентское программное обеспечение (оно определенно в моем списке), но, насколько я могу судить, вам нужно установить большую часть glassfish с GF 3.1, чтобы получить клиент для запуска. (С GF 2.1 это было 15+ МБ включаемых файлов)

"gf-client.jar относится ко многим другим файлам .jars из установочного каталога GlassFish, поэтому лучше обращаться к нему из самого установочного каталога, а не копировать его (и все другие .jars) в другое место" EJB FAQ

Вы можете либо использовать автоматически созданный запуск веб-запуска с Application Client Container, либо вы можете упаковать свой клиент и развернуть его вручную. Руководство Glassfish 3.0, ACC

0 голосов
/ 05 октября 2011

Вы можете получить imqbroker, добавив это:

    <dependency>
        <groupId>com.sun.messaging.mq</groupId>
        <artifactId>imqbroker</artifactId>
        <version>4.5.1-b03</version>
    </dependency>
...