JBoss AS 7简单的hello world应用程序

JBoss AS 7简单的hello world应用程序,jboss,jms,message-queue,jndi,hornetq,Jboss,Jms,Message Queue,Jndi,Hornetq,我正在尝试运行一个简单的JMS“helloworld”应用程序。我想在JBossApplicationServer7上试用,但我无法运行它。Jboss作为HornetQ嵌入其中,我使用以下命令启动它: standalone.bat --server-config=standalone-preview.xml 我认为问题最有可能是我在JBoss中配置队列的方式。以下是我所做的步骤 配置队列 Quene名称:testQueue JNDI名称:队列/测试 队列配置有一个“选择器”选项。这个字段可

我正在尝试运行一个简单的JMS“helloworld”应用程序。我想在JBossApplicationServer7上试用,但我无法运行它。Jboss作为HornetQ嵌入其中,我使用以下命令启动它:

standalone.bat --server-config=standalone-preview.xml
我认为问题最有可能是我在JBoss中配置队列的方式。以下是我所做的步骤

  • 配置队列
Quene名称: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)
上面的类如何确切地知道提供程序(JBoss)正在本地主机上运行?我不需要在某处指定IP地址吗?有什么想法吗

编辑 大多数文档似乎都将JBoss称为6。我已经更新了代码片段,包括以下内容:

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);
我现在得到ClassNotFoundException。我认为它需要一个额外的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
java-classpath C:\Users\702723344\Downloads\glassfish-3.1.1\glassfish3\glassfish\lib\javaee.jar;。jms.ex3.Sender
线程“main”javax.naming.NoInitialContextException中的异常:无法实例化类:org.jnp.interfaces.NamingContextFactory[根异常为java.lang.ClassNotFoundException:org.jnp.interfaces.NamingContextFactory]
位于javax.naming.spi.NamingManager.getInitialContext(未知源)
位于javax.naming.InitialContext.getDefaultInitCtx(未知源)
位于javax.naming.InitialContext.init(未知源)
位于javax.naming.InitialContext。(未知源)
位于jms.ex3.Sender.main(Sender.java:27)
原因:java.lang.ClassNotFoundException:org.jnp.interfaces.NamingContextFactory
位于java.net.URLClassLoader$1.run(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(未知源)
位于java.lang.ClassLoader.loadClass(未知源)
位于sun.misc.Launcher$AppClassLoader.loadClass(未知源)
位于java.lang.ClassLoader.loadClass(未知源)
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(未知源)
位于com.sun.naming.internal.VersionHelper12.loadClass(未知源)
... 还有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文件夹中删除提供建议。 但是在JBoss中没有像7.0这样的文件夹

JBossAS7.0似乎根本不支持远程客户端(至少对于EJB是这样)。 请查看此线程:。这很有趣


使用glassfish\lib\javaee.jar有可能进一步得到一些ClassCastException。

回答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文件夹中删除提供建议。 但是在JBoss中没有像7.0这样的文件夹

JBossAS7.0似乎根本不支持远程客户端(至少对于EJB是这样)。 请查看此线程:。这很有趣


通过使用glassfish\lib\javaee.jar,您可能会进一步得到一些ClassCastException。

我不同意Vadzim的最后一个答案

我知道我在回答一个非常老的问题,但这个信息让我错过了一天,这是我第一次尝试在JBoss7上设置JMS远程队列,因此必须回答,这让我工作起来

JBossAS7.0似乎根本不支持远程客户端(至少对于EJB是这样)

可以调用远程队列。以下是以下步骤

  • 确保在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>
    
  • 确保使用正确的jar,对于上面的示例,我使用了
    hornetq-core-2.2.14.Final.jar
    和正确的JBOSS客户端jar的用法,转到JBOSS bin目录的客户端文件夹,您将有
    readme.txt
    ,在那里您将有Maven版本使用的参考,如果您作为独立应用程序使用,那么可以在目录中引用给定的jar

  • 在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)
    
  • 快乐编码

    问候,,
    Abhijith我不同意Vadzim最后的回答

    我知道我在回答一个非常老的问题,但这个信息让我错过了一天,这是我第一次尝试在JBoss7上设置JMS远程队列,因此必须回答,这让我工作起来

    JBossAS7.0似乎根本不支持远程客户端(至少对于EJB是这样)

    可以调用远程队列。以下是以下步骤

  • 确保在standalone.xml或(full.xml)中添加队列,在下面我已经设置了myRemoteStatusQueue,如果您观察到,例如
    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";
    
    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)