现在我在JBOSS中配置了一个叫 queue/myqueue的消息队列
启动JBOSS之后,在本机 A应用可以发送 消息到JBOSS上面到JMS队列
现在我换到了另外一台机子 B, 开启了JBOSS远程调用A机子的服务是可以被访问到到.
但是发送消息的语句就是发送不了, 报错是现实远程访问实例化工厂不了....
##如图
下面是我的调用代码
import java.util.Properties;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class Textqueue {
public static void main(String[] args) throws Exception {
//定义JBOSS默认连接的JNDI
final String CONNECTION_FACTORY_JNDI="ConnectionFactory";
//获取JNDI服务所需的Context对象
Context ctx = getInitalContext();
//通过JNDI获取连接广场
ConnectionFactory connectionFactory = (ConnectionFactory) ctx.lookup(CONNECTION_FACTORY_JNDI);
//通过JNDI查找消息目录
Destination destination = (Destination) ctx.lookup("queue/myqueue");
//创建连接工厂
Connection conn = connectionFactory.createConnection();
//创建连接会话
Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
//创建会话生产者/发送者
MessageProducer sender = session.createProducer(destination);
sender.setDeliveryMode(DeliveryMode.PERSISTENT);//设置消息传递模式
sender.setTimeToLive(20000);//设置消息有效时间
//会话创建一个大文本消息
TextMessage message = session.createTextMessage();
message.setText("Hello my first JMS");
//发送消息
sender.send(message);
//再发一次
for(int i=0;i<=10;i++){
message.setText("哈哈,有意思"+i);
sender.send(message);
}
//关闭资源
System.out.println("client发送完成!");
session.close();
conn.close();
}
private static Context getInitalContext(){
final String INIT_FACTORY = "org.jnp.interfaces.NamingContextFactory";
final String SERVER_URL = "jnp://192.168.1.118:1099";
Context ctx = null;
try {
Properties prop = new Properties();
prop.setProperty(Context.INITIAL_CONTEXT_FACTORY, INIT_FACTORY);
prop.setProperty(Context.PROVIDER_URL, SERVER_URL);
ctx = new InitialContext(prop);
} catch (NamingException e) {
e.printStackTrace();
System.out.println("不能连接 Jboss在:"+ SERVER_URL);
}
return ctx;
}
}