JBoss AS 7简单的hello world应用程序
我正在尝试运行一个简单的JMS“helloworld”应用程序。我想在JBossApplicationServer7上试用,但我无法运行它。Jboss作为HornetQ嵌入其中,我使用以下命令启动它: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名称:队列/测试 队列配置有一个“选择器”选项。这个字段可
standalone.bat --server-config=standalone-preview.xml
我认为问题最有可能是我在JBoss中配置队列的方式。以下是我所做的步骤
- 配置队列
- 代码
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是这样) 可以调用远程队列。以下是以下步骤
<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>
hornetq-core-2.2.14.Final.jar
和正确的JBOSS客户端jar的用法,转到JBOSS bin目录的客户端文件夹,您将有readme.txt
,在那里您将有Maven版本使用的参考,如果您作为独立应用程序使用,那么可以在目录中引用给定的jarjava: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是这样) 可以调用远程队列。以下是以下步骤
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)