异步获取EJB 服务实例

一个异步获取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<EJBServer> future = executor.submit(new Callable<EJBServer>(){
			@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<T> {

	private  T instance;

	public  T getInstance(final Class<T> tclass) {
		int timeout = 2; //秒.  
        ExecutorService executor = Executors.newSingleThreadExecutor();  
        Future<T> future = executor.submit(new Callable<T>(){
			@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<EJBServer> tools=new SyncGernicEJBTools<EJBServer>();
		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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值