首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

配备 weblogic JMS 连接

2012-08-27 
配置weblogic JMS 连接jms 的优点它可以把不影响用户执行结果又比较耗时的任务(比如发邮件通知管理员)异步

配置 weblogic JMS 连接

jms 的优点

它可以把不影响用户执行结果又比较耗时的任务(比如发邮件通知管理员)异步的扔给JMS服务端去做,而尽快的把屏幕返还给用户。服务端能够多线程排队响应高并发的请求,并保证请求不丢失。可以在Java世界里达到最高的解耦。客户端与服务端无需直连,甚至无需知晓对方是谁、在哪里、有多少人,只要对流过的信息作响应就行了,在企业应用环境复杂时作用明显。



今天使用jms 来连接weblogic ,但是总是报weblogic.jndi.WLInitialContextFactory 找不到。

后来试了很多种办法,网上提到加 weblogic.jar 。我按网上说的加了 weblogic.jar。但是还是报java 类找不到 weblogic.security.subject.AbstractSubject java.lang.NoClassDefFoundError:Weblogic/security/subject/AbstractSubject 之类的异常。
那么怎么办呢,其实很简单 只要进入到你的 weblogic-home 路径下进入到server/lib 目录,并运行 jdk6命令 "java -jar wljarbuilder.jar" jdk5 命令“java -jar wljarbuilder.jar -profile wlfullclient5” .拷贝"wlfullclient.jar " 或者 "wlfullclient5.jar" 到你的classpath 环境下。 下面是一个连接weblogic的例子。

?

?

package jms;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Hashtable;import javax.jms.BytesMessage;import javax.jms.JMSException;import javax.jms.MapMessage;import javax.jms.ObjectMessage;import javax.jms.Queue;import javax.jms.QueueConnection;import javax.jms.QueueConnectionFactory;import javax.jms.QueueSender;import javax.jms.QueueSession;import javax.jms.Session;import javax.jms.StreamMessage;import javax.jms.TextMessage;import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NamingException;public class QueueSend {// Defines the JNDI context factory.public final static String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory";// Defines the JNDI provider url.public final static String PROVIDER_URL = "t3://localhost:7001";// Defines the JMS connection factory for the queue.public final static String JMS_FACTORY = "myjmsconnectionfactory";// Defines the queue 用的是对应 QUEUE的JNDI名子public final static String QUEUE = "myjmsqueue";private QueueConnectionFactory qconFactory;private QueueConnection qcon;private QueueSession qsession;private QueueSender qsender;private Queue queue;private TextMessage msg;private StreamMessage sm;private BytesMessage bm;private MapMessage mm;private ObjectMessage om;/** * Creates all the necessary objects for sending messages to a JMS queue. *  * @param ctx *            JNDI initial context * @param queueName *            name of queue * @exception NamingException *                if operation cannot be performed * @exception JMSException *                if JMS fails to initialize due to internal error */public void init(Context ctx, String queueName) throws NamingException, JMSException {qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);qcon = qconFactory.createQueueConnection();qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);queue = (Queue) ctx.lookup(queueName);qsender = qsession.createSender(queue);msg = qsession.createTextMessage();sm = qsession.createStreamMessage();bm = qsession.createBytesMessage();mm = qsession.createMapMessage();om = qsession.createObjectMessage();qcon.start();}/** * Sends a message to a JMS queue. *  * @param message *            message to be sent * @exception JMSException *                if JMS fails to send message due to internal error */public void send(String message) throws JMSException {// set TextMessagemsg.setText(message);// set StreamMessagesm.writeString("xmddl369");sm.writeDouble(23.33);// set BytesMessageString name = "xmddl369";byte[] block = name.getBytes();bm.writeBytes(block);// set MapMessagemm.setString("name", "xmddl369");// set ObjectMessageUserInfo ui = new UserInfo();ui.setName("xmddl369");ui.setAddress("厦门");ui.setAge(100);om.setObject(ui);qsender.send(msg);qsender.send(sm);qsender.send(bm);qsender.send(mm);qsender.send(om);}/** * Closes JMS objects. *  * @exception JMSException *                if JMS fails to close objects due to internal error */public void close() throws JMSException {qsender.close();qsession.close();qcon.close();}public static void main(String[] args) throws Exception {InitialContext ic = getInitialContext();QueueSend qs = new QueueSend();qs.init(ic, QUEUE);//readAndSend(qs);qs.send("ddd");qs.close();}private static void readAndSend(QueueSend qs) throws IOException, JMSException {BufferedReader msgStream = new BufferedReader(new InputStreamReader(System.in));String line = null;boolean quitNow = false;do {System.out.print("Enter message ("quit" to quit): ");line = msgStream.readLine();if (line != null && line.trim().length() != 0) {qs.send(line);System.out.println("JMS Message Sent: " + line + "\n");quitNow = line.equalsIgnoreCase("quit");}} while (!quitNow);}private static InitialContext getInitialContext() throws NamingException {Hashtable env = new Hashtable();env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);env.put(Context.PROVIDER_URL, PROVIDER_URL);return new InitialContext(env);}}
?
package jms;import java.util.Hashtable;import javax.jms.BytesMessage;import javax.jms.JMSException;import javax.jms.MapMessage;import javax.jms.Message;import javax.jms.MessageListener;import javax.jms.ObjectMessage;import javax.jms.Queue;import javax.jms.QueueConnection;import javax.jms.QueueConnectionFactory;import javax.jms.QueueReceiver;import javax.jms.QueueSession;import javax.jms.Session;import javax.jms.StreamMessage;import javax.jms.TextMessage;import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NamingException;/** *  * @author Administrator *  *         <pre> *      修改版本:  修改人:  修改日期:  修改内容: * </pre> */public class QueueReceive implements MessageListener {// Defines the JNDI context factory.public final static String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory";// Defines the JNDI provider url.public final static String PROVIDER_URL = "t3://localhost:7001";// Defines the JMS connection factory for the queue.public final static String JMS_FACTORY = "myjmsconnectionfactory";// Defines the queue 用的是对应 QUEUE的JNDI名子public final static String QUEUE = "myjmsqueue";private QueueConnectionFactory qconFactory;private QueueConnection qcon;private QueueSession qsession;private QueueReceiver qreceiver;private Queue queue;private boolean quit = false;/** * Message listener interface. *  * @param msg *            message */public void onMessage(Message msg) {try {String msgText = "";double d = 0;if (msg instanceof TextMessage) {msgText = ((TextMessage) msg).getText();} else if (msg instanceof StreamMessage) {msgText = ((StreamMessage) msg).readString();d = ((StreamMessage) msg).readDouble();} else if (msg instanceof BytesMessage) {byte[] block = new byte[1024];((BytesMessage) msg).readBytes(block);msgText = String.valueOf(block);} else if (msg instanceof MapMessage) {msgText = ((MapMessage) msg).getString("name");} else if (msg instanceof ObjectMessage) {UserInfo ui = (UserInfo) ((ObjectMessage) msg).getObject();msgText = ui.getName();d = ui.getAge();}System.out.println("Message Received: " + msgText + "\t" + d);if (msgText.equalsIgnoreCase("quit")) {synchronized (this) {quit = true;this.notifyAll(); // Notify main thread to quit}}} catch (JMSException jmse) {jmse.printStackTrace();}}/** * Creates all the necessary objects for receiving messages from a JMS * queue. *  * @param ctx *            JNDI initial context * @param queueName *            name of queue * @exception NamingException *                if operation cannot be performed * @exception JMSException *                if JMS fails to initialize due to internal error */public void init(Context ctx, String queueName) throws NamingException, JMSException {qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);qcon = qconFactory.createQueueConnection();qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);queue = (Queue) ctx.lookup(queueName);qreceiver = qsession.createReceiver(queue);qreceiver.setMessageListener(this);qcon.start();}/** * Closes JMS objects. *  * @exception JMSException *                if JMS fails to close objects due to internal error */public void close() throws JMSException {qreceiver.close();qsession.close();qcon.close();}/** * main() method. *  * @param args *            WebLogic Server URL * @exception Exception *                if execution fails */public static void main(String[] args) throws Exception {InitialContext ic = getInitialContext();QueueReceive qr = new QueueReceive();qr.init(ic, QUEUE);System.out.println("JMS Ready To Receive Messages (To quit, send a "quit" message).");// Wait until a "quit" message has been received.synchronized (qr) {while (!qr.quit) {try {qr.wait();} catch (InterruptedException ie) {ie.printStackTrace();}}}qr.close();}private static InitialContext getInitialContext() throws NamingException {Hashtable env = new Hashtable();env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);env.put(Context.PROVIDER_URL, PROVIDER_URL);return new InitialContext(env);}public String getEncoding() throws Exception {return "Hello World!";}}
?
package jms;import java.io.Serializable;public class UserInfo implements Serializable {/**  *  */private static final long serialVersionUID = 1L;private String name;private String address;private double age;public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public double getAge() {return age;}public void setAge(double age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}}

?

spring 中的jndi配置<!-- JNDI 配置 -->??? <bean id="jndiTemplate" value="ConnectionFactory" />????????? <property name="jndiTemplate" ref="jndiTemplate"/>? ???? </bean>? 

<!-- jms?队列?Queue 是在第11页图片里面要填写的jndi的名称-->??

<bean id="jmsDestination" value="Queue" />
?????? <property name="jndiTemplate" ref="jndiTemplate"/>
????? </bean>

<!-- jms模板-->

<bean id="jmsTemplate" ref="jmsConnectionFactory" />
????????? <property name="defaultDestination" ref="jmsDestination" />
???</bean>

?

?

 

热点排行
Bad Request.