在学习jboss的jms,代码是从书上抄的,如下:
package aboutjms;import java.util.Properties;import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.JMSException;
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 MessageSender { public void sendMessage () throws NamingException, JMSException{
// 定义Weblogic默认连接工厂
final String CONNECTION_FACTORY_JNDI = "org.jnp.interfaces.NamingContextFactory";
//
Context ctx = getInitialContext ();
ConnectionFactory connFactory = (ConnectionFactory)ctx.lookup(CONNECTION_FACTORY_JNDI);
Destination dest = (Destination)ctx.lookup("MessageQueue");
Connection conn = connFactory.createConnection();
Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer sender = session.createProducer(dest);
sender.setDeliveryMode(DeliveryMode.PERSISTENT);
sender.setTimeToLive(20000);
TextMessage msg = session.createTextMessage();
msg.setText("hello");
sender.send(msg);
session.close();
conn.close();
}
// 工具方法,获取命名服务的Context对象
private Context getInitialContext () {
final String INIT_FACTORY = "org.jnp.interfaces.NamingContextFactory";
final String SERVER_URL = "jnp://localhost:1099";
Context ctx = null;
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, INIT_FACTORY);
props.put(Context.PROVIDER_URL, SERVER_URL);
try {
ctx = new InitialContext(props);
} catch (NamingException e) {
e.printStackTrace();
}
return ctx;
}
public static void main (String [] args) {
MessageSender mp = new MessageSender();
try {
mp.sendMessage();
} catch (NamingException e) {
e.printStackTrace();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
启动jboss后,运行代码,出现如下错误:
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 aboutjms.MessageSender.getInitialContext(MessageSender.java:56)
at aboutjms.MessageSender.sendMessage(MessageSender.java:24)
at aboutjms.MessageSender.main(MessageSender.java:67)
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.ClassLoader.loadClassInternal(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)
... 7 more
Exception in thread "main" java.lang.NullPointerException
at aboutjms.MessageSender.sendMessage(MessageSender.java:25)
at aboutjms.MessageSender.main(MessageSender.java:67)
从网上找了解决方法,classpath里加%JBoss Home%\client\jbossall-client.jar
,可是没用,还是出错。请高手帮忙指点一下,我用的系统是win7,jboss版本是jboss-5.1.0.GA
package aboutjms;import java.util.Properties;import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.JMSException;
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 MessageSender { public void sendMessage () throws NamingException, JMSException{
// 定义Weblogic默认连接工厂
final String CONNECTION_FACTORY_JNDI = "org.jnp.interfaces.NamingContextFactory";
//
Context ctx = getInitialContext ();
ConnectionFactory connFactory = (ConnectionFactory)ctx.lookup(CONNECTION_FACTORY_JNDI);
Destination dest = (Destination)ctx.lookup("MessageQueue");
Connection conn = connFactory.createConnection();
Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer sender = session.createProducer(dest);
sender.setDeliveryMode(DeliveryMode.PERSISTENT);
sender.setTimeToLive(20000);
TextMessage msg = session.createTextMessage();
msg.setText("hello");
sender.send(msg);
session.close();
conn.close();
}
// 工具方法,获取命名服务的Context对象
private Context getInitialContext () {
final String INIT_FACTORY = "org.jnp.interfaces.NamingContextFactory";
final String SERVER_URL = "jnp://localhost:1099";
Context ctx = null;
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, INIT_FACTORY);
props.put(Context.PROVIDER_URL, SERVER_URL);
try {
ctx = new InitialContext(props);
} catch (NamingException e) {
e.printStackTrace();
}
return ctx;
}
public static void main (String [] args) {
MessageSender mp = new MessageSender();
try {
mp.sendMessage();
} catch (NamingException e) {
e.printStackTrace();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
启动jboss后,运行代码,出现如下错误:
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 aboutjms.MessageSender.getInitialContext(MessageSender.java:56)
at aboutjms.MessageSender.sendMessage(MessageSender.java:24)
at aboutjms.MessageSender.main(MessageSender.java:67)
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.ClassLoader.loadClassInternal(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)
... 7 more
Exception in thread "main" java.lang.NullPointerException
at aboutjms.MessageSender.sendMessage(MessageSender.java:25)
at aboutjms.MessageSender.main(MessageSender.java:67)
从网上找了解决方法,classpath里加%JBoss Home%\client\jbossall-client.jar
,可是没用,还是出错。请高手帮忙指点一下,我用的系统是win7,jboss版本是jboss-5.1.0.GA
jboss 5 本来就像个笑话..