`
wangpx
  • 浏览: 198250 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

配置 weblogic JMS 连接

    博客分类:
  • java
阅读更多

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 TextMessage
		msg.setText(message);

		// set StreamMessage
		sm.writeString("xmddl369");
		sm.writeDouble(23.33);

		// set BytesMessage
		String name = "xmddl369";
		byte[] block = name.getBytes();
		bm.writeBytes(block);

		// set MapMessage
		mm.setString("name", "xmddl369");

		// set ObjectMessage
		UserInfo 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" class="org.springframework.jndi.JndiTemplate"> 
      <property name="environment"> 
       <props> 
        <prop key="java.naming.factory.initial"> 
         weblogic.jndi.WLInitialContextFactory 
        </prop> 
        <prop key="java.naming.provider.url"> 
         t3://localhost:7001
        </prop> 
        <prop key="java.naming.factory.url.pkgs"> 
          weblogic.jndi.factories 
        </prop> 
       </props> 
         </property> 
     </bean> 

 <!-- jms 连接工厂 ConnectionFactory

 是在第11页图片里面要填写的jndi的名称

-->  
    <bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
          <property name="jndiName" value="ConnectionFactory

" />
          <property name="jndiTemplate" ref="jndiTemplate"/>  
     </bean>  

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

<bean id="jmsDestination" class="org.springframework.jndi.JndiObjectFactoryBean">
       <property name="jndiName" value="Queue " />
       <property name="jndiTemplate" ref="jndiTemplate"/>
      </bean>

<!-- jms模板 -->

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
          <property name="connectionFactory" ref="jmsConnectionFactory" />
          <property name="defaultDestination" ref="jmsDestination" />
   </bean>


 

 



  


  
分享到:
评论

相关推荐

    Weblogic使用手册大全详解 中文版

    3.配置WEBLOGIC服务器与集群 4.用日志消息管理WEBLOGIC服务器 5.分发应用 6.配置WEBLOGIC服务器的WEB组件 7.代理对另一个HTTP服务器的请求 8.代理对WEBLOGIC集群的请求 9.配置WEB应用 10.配置APACHE-WEBLOGIC服务器...

    Weblogic配置手顺(JMS).xlsx

    JMS的配置顺序: 一.配置连接工厂; 二.配置消息存储; 三.配置JMS服务器; 四.配置消息目的地

    weblogic adminitration guide

    关于中间件weblogic的详细说明,1 包括WebLogic服务器管理概述,2 启动与终止WebLogic服务器,3 节点管理器,4 配置WebLogic服务器与集群,5 监控WebLogic域,6 用日志消息管理WebLogic服务器,7 分发应用,8 配置...

    Weblogic 管理

    第3章: 配置WEBLOGIC服务器与集群 第4章: 监控WEBLOGIC域 第5章: 用日志消息管理WEBLOGIC服务器 第6章: 分发应用 第7章: 配置WEBLOGIC服务器的WEB组件 第8章: 分发及配置WEB应用 第9章: 配置APACHE-WEBLOGIC...

    weblogic 服务器管理(中文版)

    第4章,“配置WebLOgic服务器与集群”讲述配置在一个WebLogic服务器域资源的功能部件 第5章,“监控WebLogic域”描述了用于监控WebLogic服务器域内资源的WebLogic功能部件 第6章,“用日志消息管理WebLogic服务器”...

    weblogic 管理指南

    第3章: 配置WEBLOGIC服务器与集群 服务器与集群配置概述 管理服务器的角色 启动管理控制台 动态配置的工作原理 集群配置规划 服务器配置任务列表 集群配置列表 新建一个域 第4章: 监控WEBLOGIC域 概述 ...

    weblogic平台J2EE调优策略

    2.3.1 调整连接池配置 2.4 WEB调优 2.4.1 调整WEB应用描述符 2.5 JMS调优 2.6 EJB调优 2.6.1 调整pool和cache 2.6.2 优化事务隔离级别和事务属性 2.6.3 其他一些小技巧 第三章 数据库调优 3.1.1 Oracle性能优化 ...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    1.4.2 WebLogic的基本配置 25 1.4.3 修改WebLogic的服务端口 29 1.4.4 部署Web应用 30 1.5 NetBeans的安装和使用 32 1.5.1 NetBeans的下载和安装 32 1.5.2 使用NetBeans开发Java EE应用 33 1.5.3 打开NetBeans项目 ...

    Java面试宝典大全+涵盖Java所有知识面

    10、在weblogic管理制台中对一个应用域(或者说是一个网站,Domain)进行jms及ejb或连接池等相关信息进行配置后,实际保存在什么文件中? 130 11、说说weblogic中一个Domain的缺省目录结构?比如要将一个简单的helloWorld....

    java面试题

    76.4. 在weblogic管理制台中对一个应用域(或者说是一个网站,Domain)进行jms及ejb或连接池等相关信息进行配置后,实际保存在什么文件中? 86 76.5. 在weblogic中发布ejb需涉及到哪些配置文件 87 76.6. 如何在weblogic中...

    springboot参考指南

    混合XA和non-XA的JMS连接 v. 32.5. 支持可替代的内嵌事务管理器 xii. 33. Spring集成 xiii. 34. 基于JMX的监控和管理 xiv. 35. 测试 Spring Boot参考指南 4 i. 35.1. 测试作用域依赖 ii. 35.2. 测试Spring应用 iii....

    Spring中文帮助文档

    2.4.4. 异步的JMS 2.4.5. JDBC 2.5. Web层 2.5.1. Spring MVC合理的默认值 2.5.2. Portlet 框架 2.5.3. 基于Annotation的控制器 2.5.4. Spring MVC的表单标签库 2.5.5. 对Tiles 2 支持 2.5.6. 对JSF 1.2支持...

    Java数据编程指南

    数据定义 基本数据操作 数据完整性 表达式 连接 合并 子查询 小结 附录B 序列化 简介 序列化 可串行化的接口 小结 附录C Java和分布式应用程序 分布式系统 分布式...

    Spring API

    2.4.4. 异步的JMS 2.4.5. JDBC 2.5. Web层 2.5.1. Spring MVC合理的默认值 2.5.2. Portlet 框架 2.5.3. 基于Annotation的控制器 2.5.4. Spring MVC的表单标签库 2.5.5. 对Tiles 2 支持 2.5.6. 对JSF 1.2支持...

    h_JAVA 2应用编程150例.rar

    实例145 安装配置WebLogic 529 实例146 整合Tomcat与IIS 531 实例147 整合Tomcat与Apache 532 实例148 整合JBuilder与WebLocig 533 实例149 安装、编译和执行一个MIDlet 535 实例150 构造Jsp/javabean开发和发布环境...

    Spring 2.0 开发参考手册

    9.8.1. BEA WebLogic 9.8.2. IBM WebSphere 9.9. 公共问题的解决方案 9.9.1. 对一个特定的 DataSource 使用错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO...

    Spring-Reference_zh_CN(Spring中文参考手册)

    2.4.3. 异步的JMS 2.4.4. JDBC 2.5. Web层 2.5.1. Spring MVC的表单标签库 2.5.2. Spring MVC合理的默认值 2.5.3. Portlet 框架 2.6. 其他特性 2.6.1. 动态语言支持 2.6.2. JMX 2.6 .3. 任务规划 2.6.4. 对Java 5...

    spring chm文档

    9.8.1. BEA WebLogic 9.8.2. IBM WebSphere 9.9. 公共问题的解决方案 9.9.1. 对一个特定的 DataSource 使用错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO...

    java基础题 很全面

    16. 在weblogic管理制台中对一个应用域(或者说是一个网站,Domain)进行jms及ejb或连接池等相关信息进行配置后,实际保存在什么文件中? 22 17. 说说weblogic中一个Domain的缺省目录结构?比如要将一个简单的helloWorld....

Global site tag (gtag.js) - Google Analytics