博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
异步获取EJB 服务实例
阅读量:6151 次
发布时间:2019-06-21

本文共 5390 字,大约阅读时间需要 17 分钟。

  hot3.png

一个异步获取EJB 服务实例:

EJBServer 模拟服务端:

package com.concurrent.deep;/** * @ClassName: EJBServer * @Description: 提供EJB服务的对象。 * @author Comsys-Administrator * @date 2012-11-30 下午11:17:36 * */public class EJBServer {	/*	 * 实例花EJB对象。	 */		public EJBServer() throws InterruptedException {		getConnection();		System.out.println("开始实例化EJBServer对象start................");		try {			System.out.println("实例化EJBServer对象doing................");			Thread.sleep(200);		} catch (InterruptedException e) {			//e.printStackTrace();			System.out.println("实例化出异常。。。。。。");			throw e;		}				System.out.println("实例化EJBServer对象 end................");	}	//建立客户端和服务端的连接 。。。。。。。。。	public static void getConnection() throws InterruptedException{		System.out.println("开始与EJBServer连接start................");		try {			System.out.println("EJBServer连接doing................");			Thread.sleep(100);		} catch (InterruptedException e) {			//e.printStackTrace();			System.out.println("EJBServer连接出异常。。。。。。");			throw e;		}				System.out.println("成功获取EJBServer连接 end................");	}	}
同步的方式获取EJB服务的TOOLs

package com.concurrent.deep;/** * @ClassName: EJBTools * @Description: 获取EJB实例的工具类 * @author Comsys-Administrator * @date 2012-11-30 下午11:16:48 *  */public class EJBTools {	private static EJBServer instance;	public static EJBServer getInstance() {		if (instance == null) {			try {				instance = new EJBServer();			} catch (InterruptedException e) {				System.out.println("获取EJB连接失败或者是获取EJB实例失败");			}		}		return instance;	}	public static void main(String[] args) {		EJBServer server=	EJBTools.getInstance();		if(server==null){			System.out.println("获取EJB连接失败或者是获取EJB实例失败");		}else{			System.out.println("done!");		}	}}

异步获取EJB服务的方法:

package com.concurrent.deep;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;import java.util.concurrent.TimeUnit;import java.util.concurrent.TimeoutException;/** * @ClassName: SyncEJBTools * @Description: 异步获取EJB实例的工具类 * @author Comsys-Administrator * @date 2012-11-30 下午11:16:48 *  */public class SyncEJBTools {	private static EJBServer instance;	public static EJBServer getInstance() {		int timeout = 2; //秒.          ExecutorService executor = Executors.newSingleThreadExecutor();          Future
future = executor.submit(new Callable
(){ @Override public EJBServer call() throws Exception { return new EJBServer(); } });// 将任务提交到线程池中 try { instance = future.get(timeout*40, TimeUnit.MILLISECONDS);// 设定在200毫秒的时间内完成 System.out.println(instance); } catch (InterruptedException e) { System.out.println("线程中断出错。"); future.cancel(true);// 中断执行此任务的线程 } catch (ExecutionException e) { System.out.println("线程服务出错。"); future.cancel(true);// 中断执行此任务的线程 } catch (TimeoutException e) {// 超时异常 System.out.println("超时。"); future.cancel(true);// 中断执行此任务的线程 }finally{ System.out.println("线程服务关闭。"); executor.shutdown(); } return instance; } public static void main(String[] args) { EJBServer server= SyncEJBTools.getInstance(); if(server==null){ System.out.println("获取EJB连接失败或者是获取EJB实例失败"); }else{ System.out.println("done!"); } }}

一个通用的方式来获取EJBServer的方法。

package com.concurrent.deep;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;import java.util.concurrent.TimeUnit;import java.util.concurrent.TimeoutException;/** * @ClassName: SyncEJBTools * @Description: 异步获取EJB实例的工具类 * @author Comsys-Administrator * @date 2012-11-30 下午11:16:48 *  */public class SyncGernicEJBTools
{ private T instance; public T getInstance(final Class
tclass) { int timeout = 2; //秒. ExecutorService executor = Executors.newSingleThreadExecutor(); Future
future = executor.submit(new Callable
(){ @Override public T call() throws Exception { return tclass.newInstance(); } });// 将任务提交到线程池中 try { instance = future.get(timeout*400, TimeUnit.MILLISECONDS);// 设定在200毫秒的时间内完成 System.out.println(instance); } catch (InterruptedException e) { System.out.println("线程中断出错。"); future.cancel(true);// 中断执行此任务的线程 } catch (ExecutionException e) { System.out.println("线程服务出错。"); future.cancel(true);// 中断执行此任务的线程 } catch (TimeoutException e) {// 超时异常 System.out.println("超时。"); future.cancel(true);// 中断执行此任务的线程 }finally{ System.out.println("线程服务关闭。"); executor.shutdown(); } return instance; } public static void main(String[] args) { SyncGernicEJBTools
tools=new SyncGernicEJBTools
(); EJBServer server= (EJBServer) tools.getInstance(EJBServer.class); if(server==null){ System.out.println("获取EJB连接失败或者是获取EJB实例失败"); }else{ System.out.println("done!"); } }}

转载于:https://my.oschina.net/ITBoy/blog/93472

你可能感兴趣的文章
jq漂亮实用的select,select选中后,显示对应内容
查看>>
C 函数sscanf()的用法
查看>>
python模块之hashlib: md5和sha算法
查看>>
售前工程师的成长---一个老员工的经验之谈
查看>>
Get到的优秀博客网址
查看>>
老男孩教育每日一题-第107天-简述你对***的理解,常见的有哪几种?
查看>>
Python学习--time
查看>>
在OSCHINA上的第一篇博文,以后好好学习吧
查看>>
Spring常用注解
查看>>
我的友情链接
查看>>
PCS子层有什么用?
查看>>
linux:yum和apt-get的区别
查看>>
Sentinel 1.5.0 正式发布,引入 Reactive 支持
查看>>
数据库之MySQL
查看>>
2019/1/15 批量删除数据库相关数据
查看>>
数据类型的一些方法
查看>>
Mindjet MindManager 2019使用教程:
查看>>
详解 CSS 绝对定位
查看>>
AOP
查看>>
NGUI Label Color Code
查看>>