Использование модулей Wildfly вместо зависимостей wildfly-X-client-bom

У меня есть два сервера Wildfly. Сервер A подключается к темам JMS и EJB на сервере B. Они оба являются Wildfly 8.2.0.Final.

Клиент (.war) на сервере A имеет следующие зависимости maven:

  <dependency>
     <groupId>org.wildfly</groupId>
     <artifactId>wildfly-ejb-client-bom</artifactId>
     <version>8.2.0.Final</version>
     <type>pom</type>
  </dependency>
  <dependency>
     <groupId>org.wildfly</groupId>
     <artifactId>wildfly-jms-client-bom</artifactId>
     <version>8.2.0.Final</version>
     <type>pom</type>
  </dependency>

Можно ли избавиться от них и просто запросить загрузку определенных модулей Wildfly в jboss-deployment-structure.xml? Похоже, что эти зависимости Maven увеличат размер моего .war.

Спасибо!

Изменить:

Для поиска EJB на сервере B я использую метод "1. Клиентская библиотека EJB", описанный здесь: http://blog.akquinet.de/2014/09/26/jboss-eap-wildfly-three-ways-to-invoke-remote-ejbs/. Мой код очень похож на пример:

Properties prop = new Properties();
prop.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
Context context = new InitialContext(prop);

И:

remote.connections=default
remote.connection.default.host=127.0.0.1
remote.connection.default.port=8080
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT=false
remote.connection.default.connect.options.org.xnio.Options.SASL_DISALLOWED_MECHANISMS=${host.auth:JBOSS-LOCAL-USER}

remote.connection.default.username=${username}
remote.connection.default.password=${password}

И: context.lookup("ejb:/myapp/remote/calculator!de.akquinet.jbosscc.ejb.Calculator");

Чтобы подключиться к теме JMS на сервере B, я использую:

     final InitialContext initialContext = new InitialContext( m_jndiProperties );
     final ConnectionFactory connectionFactory = getConnectionFactory( initialContext );
     final Connection connection = connectionFactory.createConnection( m_clientKey.getUsername(), m_clientKey.getPassword() );

     try
     {
        final Topic updateTopic = getUpdateTopic( initialContext );
        final TopicSubscriber subscriber;

        if( m_isDurableSubscription )
        {
           connection.setClientID( m_clientKey.getJmsClientId() );
           connection.setExceptionListener( m_exceptionListener );
           final Session subscriberSession = connection.createSession( false, Session.AUTO_ACKNOWLEDGE );
           subscriber = subscriberSession.createDurableSubscriber( updateTopic, m_clientKey.getJmsSubscriptionId() );
        }
        else
        {
           connection.setExceptionListener( m_exceptionListener );
           final Session subscriberSession = connection.createSession( false, Session.AUTO_ACKNOWLEDGE );
           subscriber = ( (TopicSession)subscriberSession ).createSubscriber( updateTopic );
        }

        connection.stop();
        subscriber.setMessageListener( m_msgListener );

        m_connection = connection;

        maybeLogMessage( m_logger, GenericLogLevel.INFO, "Successfully subscribed to topic: '" + topicName + "'." );
     }
     catch( JMSException | NamingException e )
     {
        //noinspection ThrowableResultOfMethodCallIgnored
        JMSCloser.close( connection );
        throw e;
     }

Код для этого поиска находится в библиотеке maven, которую использует мой .war. Библиотека как обычно помещается в WEB-INF/lib/.


person Jon Onstott    schedule 24.07.2015    source источник


Ответы (3)


Вам действительно не нужно ни то, ни другое, если вы пишете стандартный код EE. Если вы используете стандартный EJB или JMS, Wildfly автоматически обнаружит его и загрузит модули для вас.

Большинству проектов нужно только это:

<dependency>
    <groupId>org.jboss.spec</groupId>
    <artifactId>jboss-javaee-7.0</artifactId>
    <version>1.0.2.Final</version>
    <scope>provided</scope>
    <type>pom</type>
</dependency>
person teacurran    schedule 24.07.2015
comment
Я так и думал (и у меня есть эта зависимость в предоставленной области), но я получаю интересное разнообразие исключений ClassNotFound без этих клиентских баз. Я добавил часть кода, который использую. - person Jon Onstott; 25.07.2015
comment
Поскольку вы не используете @MessageDriven или другие аннотации ejb3, подсистема ejb3 может не загружаться для вашего приложения. у вас есть файл ejb-jar.xml в вашем развертывании? - person teacurran; 25.07.2015
comment
У меня нет файла ejb-jar.xml; Я попытаюсь загрузить подсистему ejb3 с помощью jboss-deployment-structure.xml. - person Jon Onstott; 28.07.2015

Я смог решить эту проблему, добавив зависимости в jboss-deployment-structure.xml, чтобы загружались дополнительные модули JBoss.

Чтобы быть EJB-клиентом: <module name="org.jboss.remote-naming"/> (ваш пробег может варьироваться в зависимости от того, как вы ищете EJB).

Чтобы стать клиентом JMS: <module name="org.hornetq"/>

person Jon Onstott    schedule 28.07.2015

это сработало для меня:

Я заменил wildfly-jms-client-bom :

<dependency>
    <groupId>org.jboss.eap</groupId>
    <artifactId>wildfly-jms-client-bom</artifactId>
    <version>7.1.0.GA-redhat-11</version>
    <type>pom</type>
</dependency>

с javaee-api:

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
    <scope>provided</scope>
</dependency>

и добавлена ​​явная зависимость от модуля org.apache.activemq.artemis (следующее в конечном итоге добавляет Dependencies: org.apache.activemq.artemis в META-INF/MANIFEST.MF внутри файла war):

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.2.3</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <archive>
            <manifestEntries>
                <Dependencies>org.apache.activemq.artemis</Dependencies>
            </manifestEntries>
        </archive>
    </configuration>
</plugin>
person Tommasso Borgato    schedule 20.02.2020