gpt4 book ai didi

java - 在 JMS 上找不到带有 JNDI 的 ConnectionFactory

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:20:32 24 4
gpt4 key购买 nike

我是 JMS 的新手,我正在尝试加载 connectionFactory。我遵循了几个教程,但由于某种原因它似乎不起作用,每次我尝试“.lookup”connectionfactory 时都会出现异常。我正在使用 JBoss7.1。

这是我试图从中获取 connectionFactory 的类:

public class QueueSend extends Frame implements ActionListener {  

private QueueConnectionFactory qconFactory;
private QueueConnection qcon;
private QueueSession qsession;
private QueueSender qsender;
private Queue queue;
private TextMessage msg;

private TextField tf=new TextField();
private Button send=new Button("Send");

public QueueSend(){
super("Queue Sender");
setLocation(150,50);
setSize(200,100);
add(tf);
add(send,BorderLayout.SOUTH);
send.addActionListener(this);
send.setEnabled(false);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent w){
send("quit");
close();
System.exit(0);
}
});
setVisible(true);
init();
}

public void init(){
try{

InitialContext ctx = getInitialContext();
qconFactory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory");

queue = (Queue) ctx.lookup("java:/queue/text");

qcon = qconFactory.createQueueConnection();

qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

qsender = qsession.createSender(queue);

qcon.start();

send.setEnabled(true);
}catch(NamingException e1){e1.printStackTrace();
}catch(JMSException e2){e2.printStackTrace();}
}


public void actionPerformed(ActionEvent e){
String message=tf.getText();
tf.setText("");
if(message.length()>0)
send(message);
}

public void send(String message){
try{
//send a message with the given string
TextMessage textMessage = qsession.createTextMessage(message);
qsender.send(textMessage);
// enter text here
}catch(JMSException e){e.printStackTrace();}
}

public void close(){
try{
qsender.close();
qsession.close();
qcon.close();
}catch(JMSException e1){e1.printStackTrace();
}catch(NullPointerException e2){e2.printStackTrace();}
}

public static void main(String[] args){
new QueueSend();
}

public InitialContext getInitialContext(){
Properties properties = new Properties();
properties.put(Context.URL_PKG_PREFIXES,"org.jboss.ejb.client.naming");
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
properties.put("jboss.naming.client.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT", "false");
properties.put("java.naming.provider.url","remote://127.0.0.1:4447");
properties.put("jboss.naming.client.ejb.context","true");
properties.put("jboss.naming.client.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT","false" );



try {
return new InitialContext(properties);
} catch (NamingException e) {
System.out.println("Cannot generate InitialContext");
e.printStackTrace();
}
return null;
}
}

我得到这个异常:

javax.naming.NameNotFoundException: ConnectionFactory -- service   jboss.naming.context.java.jboss.exported.ConnectionFactory
at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:97)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:178)
at org.jboss.naming.remote.protocol.v1.Protocol$1.handleServerMessage(Protocol.java:127)
at org.jboss.naming.remote.protocol.v1.RemoteNamingServerV1$MessageReciever$1.run(RemoteNamingServerV1.j ava:73)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

当我从浏览器登录到 JBoss 服务器时,我在“命名”选项卡下找不到“ConnectionFactory”

这是来自 standalone-full.xml:

            <jms-connection-factories>
<connection-factory name="InVmConnectionFactory">
<connectors>
<connector-ref connector-name="in-vm"/>
</connectors>
<entries>
<entry name="java:/ConnectionFactory"/>
</entries>
</connection-factory>
<connection-factory name="RemoteConnectionFactory">
<connectors>
<connector-ref connector-name="netty"/>
</connectors>
<entries>
<entry name="RemoteConnectionFactory"/>
<entry name="java:jboss/exported/jms/RemoteConnectionFactory"/>
</entries>
</connection-factory>
<pooled-connection-factory name="hornetq-ra">
<transaction mode="xa"/>
<connectors>
<connector-ref connector-name="in-vm"/>
</connectors>
<entries>
<entry name="java:/JmsXA"/>
</entries>
</pooled-connection-factory>
</jms-connection-factories>

我做错了什么?

最佳答案

我发现了问题所在。我的 JBoss 服务器的默认配置文件是 standalone.xml,而 connectionFactory 在 standalone-full.xml 文件中配置,它是 standalone.xml 的更完整版本,所以我所要做的就是更改配置文件服务器从 standalone.xml 到 standalone-full.xml 就成功了:@)~

关于java - 在 JMS 上找不到带有 JNDI 的 ConnectionFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21026300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com