2016-10-13 36 views
2

私はGoogleに疲れて、このようになった。これらのリンクは、jboss eap 6を参照しています。JBoss EAP 7でJMSを設定する方法は?

1. jboss eap 7でJMSを設定する方法は?

2.Jboss eap 7にはJMSが組み込まれていますか?手動で設定する必要がありますか?

3.サンプルJboss eap 7を使用したアプリケーション?

答えて

8

多くの苦闘の末、私は答えを得ました。

JBoss EAP 7サーバーでは、Apache ActiveMQ Artemisをサポートしています。 JBoss EAP 7サーバーに組み込まれているJBoss EAP 7サーバーには、Apache ActiveMQ Artemisが含まれていない場合があります。Messaging-ActiveMQがjbossサブシステムにあります。このためには、standalone.xmlファイルで手動で設定する必要があります。 以下の設定手順に従ってください。

ステップ-1

JBossを起動EAP 7サーバー

ステップ-2 CD/PATH/TO/JBossの-EAP-からランアドオンuser.batファイル•

7.0/bin。

•Linuxサーバの場合は、./add-user.shコマンドが必要です。 実行後、cmdが表示されます。

cmdが表示されます。ここで新しいアプリケーションユーザーを追加する必要があります。 お使いましょう:

ユーザ名: JMSUSER、 パスワード:123 @ JMSUSER、 ユーザーの役割:ゲスト使って簡単なJMSキューの作成

What type of user do you wish to add? 
a) Management User (mgmt-users.properties) 
b) Application User (application-users.properties) 
(a): b 

Enter the details of the new user to add. 
Using realm 'ApplicationRealm' as discovered from the existing property files. 
Username : jmsuser 
User 'jmsuser' already exists and is enabled, would you like to... 
a) Update the existing user password and roles 
b) Disable the existing user 
c) Type a new username 
(a): a 
Password recommendations are listed below. To modify these restrictions edit the add-user.properties configuration file. 
- The password should be different from the username 
- The password should not be one of the following restricted values {root, admin, administrator} 
- The password should contain at least 8 characters, 1 alphabetic character(s), 1 digit(s), 1 non-alphanumeric symbol(s) 
Password : 
Re-enter Password : 
What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[guest]: guest 
Updated user 'jmsuser' to file '/Users/jsensharma/NotBackedUp/Installed/wildfly-10.0.0.CR3-SNAPSHOT/standalone/configuration/application-users.properties' 
Updated user 'jmsuser' to file '/Users/jsensharma/NotBackedUp/Installed/wildfly-10.0.0.CR3-SNAPSHOT/domain/configuration/application-users.properties' 
Updated user 'jmsuser' with groups guest to file '/Users/jsensharma/NotBackedUp/Installed/wildfly-10.0.0.CR3-SNAPSHOT/standalone/configuration/application-roles.properties' 
Updated user 'jmsuser' with groups guest to file '/Users/jsensharma/NotBackedUp/Installed/wildfly-10.0.0.CR3-SNAPSHOT/domain/configuration/application-roles.properties' 
Is this new user going to be used for one AS process to connect to another AS process? 
e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls. 
yes/no? yes 
To represent the user add the following to the server-identities definition <secret value="am1zdXNlckAxMjM=" /> 

SETP-3 をJBoss CLIコマンドラインユーティリティ。 JNDI名には "java:/ jboss/exported"という接頭辞が含まれている必要があります。そうしないと、JMSキューをリモートでルックアップできません。 ここで聞かせてあなたのキュー名は、TestQ

$ cd /PATH/TO/JBoss-eap-7.0/bin 
$ ./jboss-cli.sh -c 

[[email protected]:9990 /] /subsystem=messaging-activemq/server=default/jms-queue=TestQ/:add(entries=["java:/jboss/exported/jms/queue/TestQ"]) 
    {"outcome" => "success"} 

[[email protected]:9990 /] :reload 
    { 
    "outcome" => "success", 
    "result" => undefined 
    } 

ステップ-4 ある今、XMLコードの下に生成されたかどうか、あなたのstandalone.xmlファイルをチェック生成されないならば、以下のコードをコピーして、貼り付けてください。

<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0"> 
    <server name="default"> 
     <security-setting name="#"> 
      <role name="guest" delete-non-durable-queue="true" create-non-durable-queue="true" consume="true" send="true"/> 
     </security-setting> 
     <address-setting name="#" message-counter-history-day-limit="10" page-size-bytes="2097152" max-size-bytes="10485760" expiry-address="jms.queue.ExpiryQueue" dead-letter-address="jms.queue.DLQ"/> 
     <http-connector name="http-connector" endpoint="http-acceptor" socket-binding="http"/> 
     <http-connector name="http-connector-throughput" endpoint="http-acceptor-throughput" socket-binding="http"> 
      <param name="batch-delay" value="50"/> 
     </http-connector> 
     <in-vm-connector name="in-vm" server-id="0"/> 
     <http-acceptor name="http-acceptor" http-listener="default"/> 
     <http-acceptor name="http-acceptor-throughput" http-listener="default"> 
      <param name="batch-delay" value="50"/> 
      <param name="direct-deliver" value="false"/> 
     </http-acceptor> 
     <in-vm-acceptor name="in-vm" server-id="0"/> 
     <jms-queue name="ExpiryQueue" entries="java:/jms/queue/ExpiryQueue"/> 
     <jms-queue name="DLQ" entries="java:/jms/queue/DLQ"/> 

     <!-- Newly added JMS Queue is Here --> 
     <jms-queue name="TestQ" entries="java:/jboss/exported/jms/queue/TestQ"/> 

     <connection-factory name="InVmConnectionFactory" entries="java:/ConnectionFactory" connectors="in-vm"/> 
     <connection-factory name="RemoteConnectionFactory" entries="java:jboss/exported/jms/RemoteConnectionFactory" connectors="http-connector"/> 
     <pooled-connection-factory name="activemq-ra" transaction="xa" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="in-vm"/> 
    </server> 
</subsystem> 

注:スタンドアロンの場合。xmlファイルは enter image description here

あなたはstandalone.xmlファイルに手動で追加する必要があり、その後<extension module="org.wildfly.extension.messaging-activemq"/><extensions>内部のタグが含まれていないステップ-5 今キューが追加されているかどうかをチェックするために管理コンソールにアクセスしてみてください。 URL - http://localhost:9990/console/App.html enter image description here

設定完了。

のMavenプロジェクト のpom.xmlの通常のスタンドアロンプ​​ログラム

enter image description here

OR

依存関係のためにJAVA

ジャーを使用してJMSにアクセスする方法

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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>org.jboss.quickstarts.eap</groupId> 
    <artifactId>jboss-helloworld-jms</artifactId> 
    <version>7.0.0.GA</version> 
    <packaging>jar</packaging> 
    <name>JBoss EAP Quickstart: helloworld-jms</name> 
    <description>helloworld-jms: Helloworld JMS external producer/consumer client</description> 
    <url>http://www.jboss.org/products/eap</url> 

    <licenses> 
     <license> 
      <name>Apache License, Version 2.0</name> 
      <distribution>repo</distribution> 
      <url>http://www.apache.org/licenses/LICENSE-2.0.html</url> 
     </license> 
    </licenses> 

    <!-- Activate JBoss Product Maven repository. 

     NOTE: Configuring the Maven repository in the pom.xml file is not a recommended procedure 
     and is only done here to make it easier to use the quickstarts. 

     For more information about how to configure Maven for your application, 
     see the section entitled 'Use the Maven Repository' 
     in the Development Guide for Red Hat JBoss Enterprise Application Platform located here: 

     https://access.redhat.com/documentation/en/jboss-enterprise-application-platform/ 
    --> 
    <repositories> 
     <repository> 
      <id>jboss-enterprise-maven-repository</id> 
      <url>https://maven.repository.redhat.com/ga/</url> 
      <releases> 
       <enabled>true</enabled> 
      </releases> 
      <snapshots> 
       <enabled>false</enabled> 
      </snapshots> 
     </repository> 
    </repositories> 

    <pluginRepositories> 
     <pluginRepository> 
      <id>jboss-enterprise-maven-repository</id> 
      <url>https://maven.repository.redhat.com/ga/</url> 
      <releases> 
       <enabled>true</enabled> 
      </releases> 
      <snapshots> 
       <enabled>false</enabled> 
      </snapshots> 
     </pluginRepository> 
    </pluginRepositories> 

    <properties> 
     <!-- Explicitly declaring the source encoding eliminates the following message: --> 
     <!-- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered 
      resources, i.e. build is platform dependent! --> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 

     <!-- EAP component version management BOM --> 
     <version.jboss.bom.eap>7.0.0.GA</version.jboss.bom.eap> 

     <!-- WildFly Maven plug-in to deploy your WAR to a local JBoss EAP container --> 
     <version.wildfly.maven.plugin>1.0.2.Final</version.wildfly.maven.plugin> 

     <!-- other plug-in versions --> 
     <version.jar.plugin>2.2</version.jar.plugin> 
     <version.exec.plugin>1.2.1</version.exec.plugin> 

     <!-- maven-compiler-plugin --> 
     <maven.compiler.target>1.8</maven.compiler.target> 
     <maven.compiler.source>1.8</maven.compiler.source> 
    </properties> 

    <dependencyManagement> 
     <dependencies> 
      <!-- JBoss distributes a complete set of Java EE APIs including a Bill 
       of Materials (BOM). A BOM specifies the versions of a "stack" (or a collection) 
       of artifacts. We use this here so that we always get the correct versions 
       of artifacts. Here we use the jboss-eap-javaee7 stack (you can 
       read this as the JBoss stack of the Java EE APIs and related components. --> 
      <dependency> 
       <groupId>org.jboss.bom</groupId> 
       <artifactId>jboss-eap-javaee7</artifactId> 
       <version>${version.jboss.bom.eap}</version> 
       <type>pom</type> 
       <scope>import</scope> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 

    <dependencies> 
     <dependency> 
      <groupId>org.jboss.eap</groupId> 
      <artifactId>wildfly-jms-client-bom</artifactId> 
      <type>pom</type> 
     </dependency> 
    </dependencies> 

    <build> 
     <finalName>${project.artifactId}</finalName> 
     <plugins> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>exec-maven-plugin</artifactId> 
       <version>${version.exec.plugin}</version> 
       <configuration> 
        <mainClass>org.jboss.as.quickstarts.jms.HelloWorldJMSClient1</mainClass> 
        <systemProperties> 
         <systemProperty> 
          <key>java.logging.config.file</key> 
          <value>./helloworld-jms-logging.properties</value> 
         </systemProperty> 
        </systemProperties> 
       </configuration> 
      </plugin> 
      <plugin> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>${version.jar.plugin}</version> 
       <configuration> 
       </configuration> 
      </plugin> 
      <!-- WildFly plug-in to deploy the WAR --> 
      <plugin> 
       <groupId>org.wildfly.plugins</groupId> 
       <artifactId>wildfly-maven-plugin</artifactId> 
       <version>${version.wildfly.maven.plugin}</version> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

HelloWorldJMSProducer.java

import java.util.Properties; 
import java.util.logging.Logger; 

import javax.jms.ConnectionFactory; 
import javax.jms.Destination; 
import javax.jms.JMSContext; 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 

public class HelloWorldJMSProducer{ 

    private static final Logger log = Logger.getLogger(HelloWorldJMSProducer.class.getName()); 

    // Set up all the default values 
    private static final String DEFAULT_MESSAGE = "Hello, World! successfull"; 
    private static final String DEFAULT_CONNECTION_FACTORY = "jms/RemoteConnectionFactory"; 
    private static final String DEFAULT_DESTINATION = "jms/queue/TestQ"; 
    private static final String DEFAULT_MESSAGE_COUNT = "1"; 
    private static final String DEFAULT_USERNAME = "jmsuser"; 
    private static final String DEFAULT_PASSWORD = "[email protected]"; 
    private static final String INITIAL_CONTEXT_FACTORY = "org.jboss.naming.remote.client.InitialContextFactory"; 
    private static final String PROVIDER_URL = "http-remoting://127.0.0.1:8888"; 

    public static void main(String[] args) { 

     Context namingContext = null; 

     try { 
      String userName = System.getProperty("username", DEFAULT_USERNAME); 
      String password = System.getProperty("password", DEFAULT_PASSWORD); 

      // Set up the namingContext for the JNDI lookup 
      final Properties env = new Properties(); 
      env.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY); 
      env.put(Context.PROVIDER_URL, System.getProperty(Context.PROVIDER_URL, PROVIDER_URL)); 
      env.put(Context.SECURITY_PRINCIPAL, userName); 
      env.put(Context.SECURITY_CREDENTIALS, password); 
      namingContext = new InitialContext(env); 

      // Perform the JNDI lookups 
      String connectionFactoryString = System.getProperty("connection.factory", DEFAULT_CONNECTION_FACTORY); 
      ConnectionFactory connectionFactory = (ConnectionFactory) namingContext.lookup(connectionFactoryString); 

      String destinationString = System.getProperty("destination", DEFAULT_DESTINATION); 
      Destination destination = (Destination) namingContext.lookup(destinationString); 

      int count = Integer.parseInt(System.getProperty("message.count", DEFAULT_MESSAGE_COUNT)); 
      String content = System.getProperty("message.content", DEFAULT_MESSAGE); 

      try (JMSContext context = connectionFactory.createContext(userName, password)) { 
       // Send the specified number of messages 
       for (int i = 0; i < count; i++) { 
        context.createProducer().send(destination, content); 
       } 

       System.out.println("Sent..."); 
      } 
     } catch (NamingException e) { 
      e.printStackTrace(); 
      log.severe(e.getMessage()); 
     } finally { 
      if (namingContext != null) { 
       try { 
        namingContext.close(); 
       } catch (NamingException e) { 
        log.severe(e.getMessage()); 
       } 
      } 
     } 
    } 
} 

HelloWorldJMSConsumer.java

import java.util.Properties; 
import java.util.logging.Logger; 

import javax.jms.ConnectionFactory; 
import javax.jms.Destination; 
import javax.jms.JMSConsumer; 
import javax.jms.JMSContext; 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 

public class HelloWorldJMSConsumer { 

    private static final Logger log = Logger.getLogger(HelloWorldJMSConsumer.class.getName()); 

    // Set up all the default values 
    private static final String DEFAULT_CONNECTION_FACTORY = "jms/RemoteConnectionFactory"; 
    private static final String DEFAULT_DESTINATION = "jms/queue/TestQ"; 
    private static final String DEFAULT_USERNAME = "jmsuser"; 
    private static final String DEFAULT_PASSWORD = "[email protected]"; 
    private static final String INITIAL_CONTEXT_FACTORY = "org.jboss.naming.remote.client.InitialContextFactory"; 
    private static final String PROVIDER_URL = "http-remoting://127.0.0.1:8888"; 

    public static void main(String[] args) { 

     Context namingContext = null; 

     try { 
      String userName = System.getProperty("username", DEFAULT_USERNAME); 
      String password = System.getProperty("password", DEFAULT_PASSWORD); 

      // Set up the namingContext for the JNDI lookup 
      final Properties env = new Properties(); 
      env.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY); 
      env.put(Context.PROVIDER_URL, System.getProperty(Context.PROVIDER_URL, PROVIDER_URL)); 
      env.put(Context.SECURITY_PRINCIPAL, userName); 
      env.put(Context.SECURITY_CREDENTIALS, password); 
      namingContext = new InitialContext(env); 

      // Perform the JNDI lookups 
      String connectionFactoryString = System.getProperty("connection.factory", DEFAULT_CONNECTION_FACTORY); 
      ConnectionFactory connectionFactory = (ConnectionFactory) namingContext.lookup(connectionFactoryString); 

      String destinationString = System.getProperty("destination", DEFAULT_DESTINATION); 
      Destination destination = (Destination) namingContext.lookup(destinationString); 

      try (JMSContext context = connectionFactory.createContext(userName, password)) { 
       System.out.println("Received..."); 
       // Create the JMS consumer 
       JMSConsumer consumer = context.createConsumer(destination); 
       // Then receive the same number of messages that were sent 
       for (int i = 0; i < count; i++) { 
        String text = consumer.receiveBody(String.class, 5000); 
        System.out.println(text); 
       } 

      } 
     } catch (NamingException e) { 
      e.printStackTrace(); 
      log.severe(e.getMessage()); 
     } finally { 
      if (namingContext != null) { 
       try { 
        namingContext.close(); 
       } catch (NamingException e) { 
        log.severe(e.getMessage()); 
       } 
      } 
     } 
    } 
} 
+0

素敵な一人...偉大な仕事 –

+0

ありがとう@Rj_Samson –

+0

私は簡単な質問がある、私はWebsphere Appサーバーでの作業経験があります.WASでは、JMS通信に異なるポート番号を使用していますが、これはJBossサーバーにも意味がありますか?このポート番号を設定できますか? –

関連する問題