⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clientmain.java

📁 基于corba的资源池,实现了实例池供客户端调用,并且实例池对实例的分配采用策略模式支持随即抽取,最近使用和循环抽取三个不同策略.(在visibroke下面开发的)
💻 JAVA
字号:
//客户端命令行程序
import java.io.FileReader;
import java.io.LineNumberReader;
import database.DatabaseAccess;

public class ClientMain
{
	long timeIn,timeOut,time;
	org.omg.CORBA.ORB orb; 
	Bank.AccountManager manager;
	static String dataSource = "jdbc:odbc:DataOutput";
	DatabaseAccess da;
	
	public static void main(String[] args) 
	{
		ClientMain client = new ClientMain(args);
		//第一次访问存在ID的时刻
		client.timeIn = System.currentTimeMillis();
		int k = 1;
        for(int i=1; i<=10000;i++)
        {
        	//一次访问
        	client.Access(client.randomId());      	
        	System.out.println(k++);
        	//每访问500个记录一下访问时间
        	if(i%500 == 0){
        		//每完成500次访问时的时刻
        		client.timeOut = System.currentTimeMillis(); 
        		//每完成500次访问所需的时间
        		client.time = client.timeOut - client.timeIn;
        		client.timeIn = client.timeOut;
        		client.save("DataOutput",i/500,client.time);
        	}
        }
        //第一次访问不存在的ID的系统时间
        client.timeIn = System.currentTimeMillis();
        int m=1;
        for(int j=1;j<=10000;j++)
        {
        	client.Access(client.randomNotExitId());
        	System.out.println(m++);
        	if(j%500 == 0){
        		//每完成500次访问时的时刻
        		client.timeOut = System.currentTimeMillis(); 
        		//每完成500次访问所需的时间
        		client.time = client.timeOut - client.timeIn;
        		client.timeIn = client.timeOut;
        		client.save("DataOutput1",j/500,client.time);
        	}
        }
	}
	
	public ClientMain(String[] args)
	{
		try{
			//初始化ORB
			orb = org.omg.CORBA.ORB.init(args, null);
			//利用POA全名与对象标识"BankManager"查找账户管理员
			LineNumberReader input = new LineNumberReader(new FileReader("managerServer.ior"));
			String ior = input.readLine();
			org.omg.CORBA.Object obj = orb.string_to_object(ior);
			manager = Bank.AccountManagerHelper.narrow(obj);
			da = new DatabaseAccess(dataSource);			
		}catch(Exception e){
			System.out.println("error:" + e);
			e.printStackTrace();
			System.exit(0);
		}
	}
	
	public void Access(String id)
	{
		try{
			//创建一个调用AccountManager的GetAccountById()操作的请求对象
        	org.omg.CORBA.Request requestGetAccountById = manager._request("getAccountById");
        	//设置请求的实际参数
        	requestGetAccountById.add_in_arg().insert_string(id);
        	//设置请求的返回结果的类型
        	requestGetAccountById.set_return_type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_objref));
        	//以同步通信的方式发送请求
        	requestGetAccountById.invoke();
        	//提取返回结果
        	org.omg.CORBA.Object account = requestGetAccountById.result().value().extract_Object();
        	
        	//继续以DII方式调用account的getBalance()方法
        	requestGetBalance(account,id);
        	
        	//继续以DII方式调用account的deposit()方法
        	org.omg.CORBA.Request requestDeposit = account._request("deposit");
        	requestDeposit.add_in_arg().insert_float(100);
        	requestDeposit.invoke();
        	
        	//继续以DII方式调用account的withdraw()方法
        	org.omg.CORBA.Request requestWithdraw = account._request("withdraw");
        	requestWithdraw.add_in_arg().insert_float(50);
        	requestWithdraw.set_return_type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_boolean));
        	requestWithdraw.invoke();
        	if(requestWithdraw.return_value().extract_boolean()){
        		requestGetBalance(account,id);
        	}
        	
        	///继续以DII方式调用AccountManager的releaseObject()方法
        	org.omg.CORBA.Request requestReleaseObject = manager._request("releaseObject");
        	requestReleaseObject.add_in_arg().insert_Object(account);
        	requestReleaseObject.invoke();
        	System.out.println("这次查询操作结束!\n");
        	
		}catch(NullPointerException e){
			System.out.println("刚输入的ID号不存在,请重新输入...\n");
		}catch(StringIndexOutOfBoundsException exc){
			System.out.println("刚输入的ID号不存在,请重新输入...\n");
        }catch(Exception exc){
        	exc.printStackTrace();
        }
	}
	public void requestGetBalance(org.omg.CORBA.Object account,String id )
	{
		//继续以DII方式调用account的getBalance()方法
    	org.omg.CORBA.Request requestGetBalance = account._request("getBalance");
    	requestGetBalance.set_return_type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_float));
    	requestGetBalance.invoke();
    	System.out.println("ID为"+id + "\t账户名为" + id.substring(5)
    			+"\t余额为" + requestGetBalance.return_value().extract_float() + "元");
	}
	
	public void save(String table,int id,long time)
	{
		try{
			String sql = "INSERT INTO "+ table+" VALUES("+id+","+ time +")";
			da.update(sql);
		}catch(Exception e){
			e.printStackTrace();
		}		
	}
		
	public String randomId()
	{
		int random = 1 + (int)(Math.random() * 10000);
		String randomId;
		if(random<10){
			randomId = "000000000"+random; 
		}else if(random>=10&&random<100){
			randomId = "00000000"+random;
		}else if(random>=10&&random<1000){
			randomId = "0000000"+random;
		}else {
			randomId = "000000"+random;
		}
		return randomId;
	}
	
	public String randomNotExitId()
	{
		int random = 1+ (int)(Math.random() * 10000);
		return ""+ random;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -