Java 在JBoss6中找不到JMS?
我已经使用JBoss6运行了示例JMS应用程序 这是hornetq-jms.xml文件Java 在JBoss6中找不到JMS?,java,jboss6.x,Java,Jboss6.x,我已经使用JBoss6运行了示例JMS应用程序 这是hornetq-jms.xml文件 <configuration xmlns="urn:hornetq" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:hornetq /schema/hornetq-jms.xsd"> <connection-factory na
<configuration xmlns="urn:hornetq"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:hornetq /schema/hornetq-jms.xsd">
<connection-factory name="NettyConnectionFactory">
<connectors>
<connector-ref connector-name="netty"/>
</connectors>
<entries>
<entry name="/ConnectionFactory"/>
<entry name="/XAConnectionFactory"/>
</entries>
</connection-factory>
<connection-factory name="NettyThroughputConnectionFactory">
<connectors>
<connector-ref connector-name="netty-throughput"/>
</connectors>
<entries>
<entry name="/ThroughputConnectionFactory"/>
<entry name="/XAThroughputConnectionFactory"/>
</entries>
</connection-factory>
<connection-factory name="InVMConnectionFactory">
<connectors>
<connector-ref connector-name="in-vm"/>
</connectors>
<entries>
<entry name="java:/ConnectionFactory"/>
<entry name="java:/XAConnectionFactory"/>
</entries>
</connection-factory>
<queue name="DLQ">
<entry name="/queue/DLQ"/>
</queue>
<queue name="ExpiryQueue">
<entry name="/queue/ExpiryQueue"/>
</queue>
<queue name="testQueue">
<entry name="queue/queueA"/>
</queue>
<topic name="testTopic">
<entry name="/topic/topicA"/>
</topic>
</configuration>
这是一个示例程序
import java.util.Properties;
import java.util.Scanner;
import javax.jms.*;
import javax.naming.Context;
public class QueueExample implements MessageListener
{
public void example() throws Exception
{
String destinationName = "queue/queueA";
Context ic = null;
ConnectionFactory cf = null;
Connection connection = null;
try
{
ic = getInitialContext();
cf = (ConnectionFactory)ic.lookup("/ConnectionFactory");
Queue queue = (Queue)ic.lookup(destinationName);
connection = cf.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer publisher = session.createProducer(queue);
MessageConsumer subscriber = session.createConsumer(queue);
subscriber.setMessageListener(this);
connection.start();
TextMessage message = session.createTextMessage("Hello!");
publisher.send(message);
Scanner keyIn = new Scanner(System.in);
System.out.print("JMS Server listening. Type a Key + CR to exit\n");
keyIn.next();
}
finally
{
if(ic != null)
{
try
{
ic.close();
}
catch(Exception e)
{
e.printStackTrace();
//throw e;
}
}
// ALWAYS close your connection in a finally block to avoid leaks.
// Closing connection also takes care of closing its related objects e.g. sessions.
closeConnection(connection);
}
}
public synchronized void onMessage(Message message)
{
TextMessage text = (TextMessage)message;
String strMessage = null;
try {
strMessage = text.getText();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Message received: "+strMessage);
}
private void closeConnection(Connection con)
{
try
{
if (con != null)
{
con.close();
}
}
catch(JMSException jmse)
{
System.out.println("Could not close connection " + con +" exception was " + jmse);
}
}
protected boolean isQueueExample()
{
return true;
}
public static void main(String[] args) throws Exception
{
new QueueExample().example();
}
public static Context getInitialContext( )
throws javax.naming.NamingException {
Properties p = new Properties( );
p.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
p.put(Context.URL_PKG_PREFIXES,
" org.jboss.naming:org.jnp.interfaces");
p.put(Context.SECURITY_PRINCIPAL, "testuser");
p.put(Context.SECURITY_CREDENTIALS, "test");
p.put(Context.PROVIDER_URL,"jnp://localhost:1099");
return new javax.naming.InitialContext(p);
/*Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
props.put(Context.PROVIDER_URL, "remote://localhost:4447");
props.put(Context.SECURITY_PRINCIPAL, "testuser");
props.put(Context.SECURITY_CREDENTIALS, "password");
InitialContext context = new InitialContext(props);*/
}
}
如何解决此错误?配置有什么问题吗?
请有人帮帮我。您的程序似乎想在路径“jms”中从jndi查找某个对象。您可以在JBoss JNDI树中查看绑定对象的位置。也许是“排队”。 我会尝试使用
String destinationName = "/queue/queueA";
及
而不是“queue/queueA”,将队列放入全局命名空间。
从JMS开始,我将尝试使用servlet作为生产者,使用MDB作为消费者。我想那会更容易。谢谢siegi。你说得对,我没有找到绑定对象。我不明白你在说什么?。我还在hornetq-jms.xml中配置了相同的名称,并将pgm命名为queue/queueA。我还想做什么?是否可以提供示例应用程序链接?是否尝试了“/queue/queueA”而不是“queue/queueA”?如果您编写“queue/queueA”,JBoss将把队列放入java名称空间(java:/queue/queueA,甚至java:/jms/queue/queueA,我不确定)您无法从JBoss外部访问java名称空间,因此您应该将队列放入全局名称空间,从“/”开始。为了避免名称空间问题,首先从JBoss中访问JMS更容易。因此,我建议使用servlet和MDB来学习JMS。我不使用JBoss6(这是一个死胡同),您可以查看JBoss7示例。它应该也适用于JBoss6,但您可能会在web上找到JBoss6的MDB示例。
String destinationName = "/queue/queueA";
<queue name="testQueue">
<entry name="/queue/queueA"/>
</queue>