文档章节

异步获取EJB 服务实例

保罗的寓言
 保罗的寓言
发布于 2012/12/02 23:30
字数 737
阅读 494
收藏 2

一个异步获取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!");
		}
	}
}






© 著作权归作者所有

保罗的寓言
粉丝 25
博文 70
码字总数 40506
作品 0
杨浦
高级程序员
私信 提问
Java Web-Servlet

章节目录 什么是Servlet Servlet 、ServletContext、Servlet Container、web 容器之间的区别 Servlet、ServletConfig、GenericServlet、HttpServlet、自定义Servlet 之间的联系 HttpServlet ......

markfork
2018/06/14
0
0
StandardContext分析-tomcat6.x源码阅读

2013-10-06 StandardContext 是什么 是org.apache.catalina.Context的标准实现,继承自ContainerBase基容器,具备容器的功能,在tomcat结构层次图中位于Host内部,包含ServletWrapper容器,它...

douglaswei
2013/10/20
347
0
StandardWrapper分析-tomcat6.x源码阅读

2013-10-20 StandardWrapper是什么StandardWrapper是负责对Servlet的封装,在tomcat的结构层次中属于最内层,跟Servlet最接近的组件,是装载Servlet的容器,StandardWrapper没有子容器,因为...

douglaswei
2013/11/19
89
0
Servlet 3.0 特性详解

Servlet 是 Java EE 规范体系的重要组成部分,也是 Java 开发人员必须具备的基础技能,本文主要介绍了 Servlet 3.0 引入的若干重要新特性,包括异步处理、新增的注解支持、可插性支持等等,为...

那位先生
2015/06/12
266
0
Servlet - Upload、Download、Async、动态注册

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hanqing280441589/article/details/51371389 标签 : Java与Web Upload-上传 随着3.0版本的发布,文件上传终于...

菜鸟-翡青
2016/05/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

使用递归打印乘法表

一般我们在学for循环的时候都会去打印九九乘法表,但是如果是用递归的方式打印的话,应该怎么做呢? 下面讲解一下用递归打印九九乘法表的思路: 其实我们在用for循环打印乘法表的时候,用的是...

INEVITABLE
19分钟前
5
0
sql 练习

创建需要的4张表 首先创建student、course、score、teacher这四张表。 student表 创建student表 CREATE TABLE IF NOT EXISTS student(sno TINYINT UNSIGNED NOT NULL,sname VARCHAR(20......

Garphy
20分钟前
7
0
vSphere的两种虚拟交换机

VMware vSphere 6.7中支持两种虚拟交换机: 1、标准交换机,VSS - Virtual Standard Switch 2、分布式交换机,VDS - Virtual Distributed Switch VSS与ESXi主机一一对应,即一个VSS只能部署在...

大别阿郎
22分钟前
5
0
webGL和three.js的关系

本文转载于:专业的前端网站➤webGL和three.js的关系 如今浏览器的功能越来越强大,而且这些功能可能通过JavaScript直接调用。你可以用HTML5标签轻松地添加音频和视频,而且可以在HTML5画布上...

前端老手
50分钟前
7
0
Spring如何实现AOP,请不要再说cglib了!

1. 从注解入手找到对应核心类 最近工作中我都是基于注解实现AOP功能,常用的开启AOP的注解是@EnableAspectJAutoProxy,我们就从它入手。 上面的动图的流程的步骤就是: @EnableAspectJAutoPr...

温安适
52分钟前
39
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部