小弟写了如下的代码:
package examples.messaging;import java.util.Properties;import javax.jms.*;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.naming.*;public class LogClient {
public static void main(String[] args){
// 初始化JNDI
Properties props = new Properties(); 
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
InitialContext ctx ;
try {
ctx = new InitialContext(props);
//1:查找连接工厂
TopicConnectionFactory factory = (TopicConnectionFactory)ctx.lookup("TopicConnectionFactory"); //此处抛出异常~~~~~~~
//2:使用连接工厂创建JMS连接
TopicConnection connection = factory.createTopicConnection();
//3:使用JMS创建Session
TopicSession session = connection.createTopicSession(false,0);
//4:查找目的地
Topic topic = (Topic)ctx.lookup("jms/Topic");
//5:创建消息发布者
TopicPublisher publisher = session.createPublisher(topic);
//6:创建和发布消息
TextMessage msg = session.createTextMessage();
msg.setText("This is a test message.");
publisher.send(msg);
//完成
publisher.close();
System.out.println("Message published...");

} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JMSException e){
e.printStackTrace();
}
}}运行后抛出以下异常:
Failed to initalize plugin: org.jboss.logging.Log4jLoggerPlugin@1db7df8, cause: org/apache/log4j/LogManager
javax.naming.CommunicationException [Root exception is java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
java.lang.ClassNotFoundException: org.jboss.naming.LinkRefPair (no security manager: RMI class loader disabled)]
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:722)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at examples.messaging.LogClient.main(LogClient.java:21)
Caused by: java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
java.lang.ClassNotFoundException: org.jboss.naming.LinkRefPair (no security manager: RMI class loader disabled)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:178)
at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:625)
... 3 more
Caused by: java.lang.ClassNotFoundException: org.jboss.naming.LinkRefPair (no security manager: RMI class loader disabled)
at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:375)
at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:165)
at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:620)
at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:247)
at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:197)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at sun.rmi.server.UnicastRef.unmarshalValue(UnicastRef.java:306)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:155)
... 5 more请大家指点一下!多谢!

解决方案 »

  1.   

    TopicConnectionFactory factory = (TopicConnectionFactory)ctx.lookup("TopicConnectionFactory");
    我只知道问题出在这行代码上,但不清楚在JBoss中JMS是如何设置的,“TopicConnectionFactory”,这个JNDI名是服务器默认的还是需要自己手动设置的?
    请高手指点!多谢!
      

  2.   

    在Jboss的[server\default\deploy\jms\uil2-service.xml]可以配置Connection的名字