1

単純なJMS「Helloworld」アプリケーションを実行しようとしています。JBoss Application Server 7で試してみたいのですが、実行できません。HornetQとしてのJbossが埋め込まれており、次のコマンドを使用して開始しました。

standalone.bat --server-config=standalone-preview.xml

問題は、JBoss内でキューを設定した方法にある可能性が最も高いと思います。これが私がしたステップです。

  • キューを構成する

キュー名:testQueue JNDI名:キュー/テスト

キュー構成には「セレクター」のオプションがあります。これを空白のままにすることはできますか?そうでない場合、このフィールドには何が入りますか?

  • コード

これが私が送信者として使用しているコードです。最初にメッセージの送信を開始したいので、今のところ受信者のことは心配していません。

package jms.ex3;

import javax.naming.InitialContext;

import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.QueueSender;
import javax.jms.DeliveryMode;
import javax.jms.QueueSession;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;

public class Sender
{
    public static void main(String[] args) throws Exception
    {
       // get the initial context
       InitialContext ctx = new InitialContext();

       // lookup the queue object
       Queue queue = (Queue) ctx.lookup("queue/test");

       // lookup the queue connection factory
       QueueConnectionFactory connFactory = (QueueConnectionFactory) ctx.
           lookup("queue/connectionFactory");

       // create a queue connection
       QueueConnection queueConn = connFactory.createQueueConnection();

       // create a queue session
       QueueSession queueSession = queueConn.createQueueSession(false,
           Session.DUPS_OK_ACKNOWLEDGE);

       // create a queue sender
       QueueSender queueSender = queueSession.createSender(queue);
       queueSender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

       // create a simple message to say "Hello"
       TextMessage message = queueSession.createTextMessage("Hello");

       // send the message
       queueSender.send(message);

       // print what we did
       System.out.println("sent: " + message.getText());

       // close the queue connection
       queueConn.close();
    }
}

上記のクラスを実行すると、次のエラーが発生します。

java -classpath C:\Users\702723344\Downloads\glassfish-3.1.1\glassfish3\glassfish\lib\javaee.jar;. jms.ex3.Sender
Exception in thread "main" javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
        at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
        at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
        at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
        at javax.naming.InitialContext.lookup(Unknown Source)
        at jms.ex3.Sender.main(Sender.java:22)

上記のクラスは、Provider(JBoss)がローカルホストマシンで実行されていることをどの程度正確に認識していますか?どこかにIPアドレスを指定する必要はありませんか?何か案は?

編集

ほとんどのドキュメントはJBossAS6を参照しているようです。コードスニペットを更新して、以下を含めました。

Properties env = new Properties();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory" );
    env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
    env.put(Context.PROVIDER_URL, "jnp://localhost:1199");
    ctx = new InitialContext(env);

classNotFound例外が発生しています。クラスパスに追加するjarファイルが必要だと思いますが、どれですか?

java -classpath C:\Users\702723344\Downloads\glassfish-3.1.1\glassfish3\glassfish\lib\javaee.jar;. jms.ex3.Sender
    Exception in thread "main" javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]
            at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
            at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
            at javax.naming.InitialContext.init(Unknown Source)
            at javax.naming.InitialContext.<init>(Unknown Source)
            at jms.ex3.Sender.main(Sender.java:27)
    Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at java.lang.Class.forName0(Native Method)
            at java.lang.Class.forName(Unknown Source)
            at com.sun.naming.internal.VersionHelper12.loadClass(Unknown Source)
            ... 5 more
4

2 に答える 2

5

ClassNotFoundExceptionに答えます。

org.jnp.interfaces.NamingContextFactoryにありjboss-as-7.0.0.Final\modules\org\jboss\as\naming\main\jboss-as-naming-7.0.0.Final.jarます。

また、クラスパスにglassfish \ lib \ javaee.jarがあることに気づき、jboss/clientフォルダーから複数のjarをクラスパスに簡単に含める方法についてアドバイスを提供したいと考えました。しかし、おっと-JBossAS7.0にはそのようなフォルダはありません。

JBoss AS 7.0はリモートクライアントをまったくサポートしていないようです(少なくともEJBでは)。このスレッドを見てください:http://community.jboss.org/message/613171。とても面白いです。

glassfish \ lib \ javaee.jarを使用すると、さらにいくつかのClassCastExceptionsが発生する可能性があります。

于 2011-12-19T17:42:10.040 に答える
0

Vadzimからの最後の答えに同意しません

私は非常に古い質問に答えていることを知っていますが、この情報は1日私を誤解させました。JBOSS7でJMSリモートキューをセットアップしようとしたのは初めてだったので、答えなければならなかったので、私は仕事に取り掛かりました。

JBoss AS 7.0はリモートクライアントをまったくサポートしていないようです(少なくともEJBの場合)... ??

リモートキューを呼び出すことができます。以下は次の手順です。

  1. 必ずstandalone.xmlまたは(full.xml)にキューを追加してください。以下では、myRemoteStatusQueueを設定しています。観察した場合、エクスポートされたオプションは必須であり、jbossは外部のjmsクライアントによって消費されることを認識します。

    <jms-destinations>
        <jms-queue name="testQueue">
            <entry name="queue/test"/>
            <entry name="java:jboss/exported/jms/queue/test"/>
        </jms-queue>
        <jms-queue name="ddsStatusQueue">
            <entry name="java:jboss/exported/jms/queue/myRemoteStatusQueue"/><!--Exported key necessary -->
        </jms-queue>
        <jms-topic name="testTopic">
            <entry name="topic/test"/>
            <entry name="java:jboss/exported/jms/topic/test"/>
        </jms-topic>
    </jms-destinations>
    
  2. 必ずアプリケーションユーザーにロールを追加してください:remote-roleなど、ロールを追加した後、JBossのstandalone.xmlにそれらを含めるようにしてください。

    <jms-destinations>
        <jms-queue name="testQueue">
            <entry name="queue/test"/>
            <entry name="java:jboss/exported/jms/queue/test"/>
        </jms-queue>
        <jms-queue name="ddsStatusQueue">
            <entry name="java:jboss/exported/jms/queue/myRemoteStatusQueue"/>   <!--Exported key necessary -->
        </jms-queue>
        <jms-topic name="testTopic">
            <entry name="topic/test"/>
            <entry name="java:jboss/exported/jms/topic/test"/>
        </jms-topic>
    </jms-destinations>
    <security-settings>
        <security-setting match="#">
            <permission type="send" roles="remote-role guest"/>
            <permission type="consume" roles="remote-role guest"/>
            <permission type="createNonDurableQueue" roles="guest"/>
            <permission type="deleteNonDurableQueue" roles="guest"/>
        </security-setting>
    </security-settings>
    
  3. 以下のコードを必ず使用してください。リモートを使用したことがわかります:/リモーティングのURLの一部として

    private static final String DEFAULT_MESSAGE = " Dummy message local Client Message At"+new Date();
    private static final String DEFAULT_CONNECTION_FACTORY = "/jms/ConnectionFactory";
    private static final String DEFAULT_DESTINATION = "jms/queue/myRemoteStatusQueue";
    private static final String DEFAULT_MESSAGE_COUNT = "1";
    private static final String DEFAULT_USERNAME = "abhijith";
    private static final String DEFAULT_PASSWORD = "password";
    private static final String INITIAL_CONTEXT_FACTORY = "org.jboss.naming.remote.client.InitialContextFactory";
    private static final String PROVIDER_URL = "remote://localhost:4447";
    
  4. 必ず正しいjarを使用してください。上記の例ではhornetq-core-2.2.14.Final.jar、正しいJBOSSクライアントjarを使用し、JBOSSのbinディレクトリのclientフォルダーに移動すると、readme.txt使用するMavenバージョンのリファレンスが表示されます。 、スタンドアロンアプリケーションとして使用している場合は、ディレクトリ内の特定のjarを参照できます。

  5. アプリをJBOSSにデプロイします。起動時に、設定されたキューがエラーなしで表示されます。たとえば、サーバーの起動ログで確認できますjava:jboss/exported/jms/queue/myRemoteStatusQueue。上記のエントリでエラーが発生しなかった場合は、これで問題ありません...

    16:24:46,527 INFO  [org.jboss.as.messaging] (MSC service thread 1-2) JBAS011601: Bound messaging object to jndi name java:/queue/test
    16:24:46,533 INFO  [org.jboss.as.messaging] (MSC service thread 1-2) JBAS011601: Bound messaging object to jndi name java:jboss/exported/jms/queue/test
    16:24:46,545 INFO  [org.jboss.as.messaging] (MSC service thread 1-8) JBAS011601: Bound messaging object to jndi name java:jboss/exported/jms/RemoteConnectionFactory
    16:24:46,548 INFO  [org.jboss.as.messaging] (MSC service thread 1-8) JBAS011601: Bound messaging object to jndi name java:/RemoteConnectionFactory
    16:24:46,551 INFO  [org.jboss.as.messaging] (MSC service thread 1-3) JBAS011601: Bound messaging object to jndi name java:/ConnectionFactory
    16:24:46,552 INFO  [org.hornetq.core.server.impl.HornetQServerImpl] (MSC service thread 1-4) trying to deploy queue jms.topic.testTopic
    16:24:46,569 INFO  [org.jboss.as.deployment.connector] (MSC service thread 1-6) JBAS010406: Registered connection factory java:/JmsXA
    16:24:46,607 INFO  [org.hornetq.ra.HornetQResourceAdapter] (MSC service thread 1-6) HornetQ resource adaptor started
    16:24:46,609 INFO  [org.jboss.as.connector.services.ResourceAdapterActivatorService$ResourceAdapterActivator] (MSC service thread 1-6) IJ020002: Deployed: file://RaActivatorhornetq-ra
    16:24:46,612 INFO  [org.jboss.as.deployment.connector] (MSC service thread 1-6) JBAS010401: Bound JCA ConnectionFactory [java:/JmsXA]
    16:24:46,638 INFO  [org.jboss.as.messaging] (MSC service thread 1-4) JBAS011601: Bound messaging object to jndi name java:/topic/test
    16:24:46,641 INFO  [org.jboss.as.messaging] (MSC service thread 1-4) JBAS011601: Bound messaging object to jndi name java:jboss/exported/jms/topic/test
    16:24:46,642 INFO  [org.hornetq.core.server.impl.HornetQServerImpl] (MSC service thread 1-7) trying to deploy queue jms.queue.myRemoteStatusQueue
    16:24:46,645 INFO  [org.jboss.as.messaging] (MSC service thread 1-7) JBAS011601: Bound messaging object to jndi name java:jboss/exported/jms/queue/myRemoteStatusQueue
    16:24:47,211 INFO  [org.jboss.ws.common.management.AbstractServerConfig] (MSC service thread 1-1) JBoss Web Services - Stack CXF Server 4.0.2.GA
    (-1 / -1) (org/jboss/as/network/ManagedBinding$Factory/org/jboss/as/network/ManagedBinding$Factory)
    

ハッピーコーディング、

よろしく、アビジス

于 2014-08-27T16:39:48.777 に答える