CreditCompanyConn
View Code
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ import creditcompany.BankCreditInterface; import creditcompany.BankCreditInterfaceHelper; import org.omg.CORBA.ORB; import org.omg.CosNaming.NamingContextExt; import org.omg.CosNaming.NamingContextExtHelper; /** * * @author iltaek (Rize Jin, 2012-05-22) */ public class CreditCompanyConn { // 终于成功了!!!!!!!!!!!! // 先是将连接的代码单独放入一个 CreditCompanyConn 类里, 设置一个静态变量,设置一个函数去连接 银行信用卡servant // 在 信用卡公司服务器 端呼叫连接函数, // 在 信用卡公司servant 端声明并访问 bankCreditServer 静态属性,并用它来获取 银行信用卡servant 的服务 public static BankCreditInterface bankCreditServer; public void callBankCreditServant(String args[]) { try { ORB orb = ORB.init(args, null); org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef); String serverName = "BankCredit"; bankCreditServer = BankCreditInterfaceHelper.narrow(ncRef.resolve_str(serverName)); System.out.println("Obtained a handle on server object: " + bankCreditServer); // runClientUI(bankCreditServer); } catch (Exception e) { System.out.println("ERROR : " + e); e.printStackTrace(System.out); } } }
CreditCompany
View Code
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ import creditcompany.BankCreditInterface; import creditcompany.BankCreditInterfaceHelper; import creditcompany.CreditCompanyInterface; import creditcompany.CreditCompanyInterfaceHelper; import org.omg.CORBA.ORB; import org.omg.CORBA.ORBPackage.InvalidName; import org.omg.CosNaming.NameComponent; import org.omg.CosNaming.NamingContextExt; import org.omg.CosNaming.NamingContextExtHelper; import org.omg.CosNaming.NamingContextPackage.CannotProceed; import org.omg.CosNaming.NamingContextPackage.NotFound; import org.omg.PortableServer.POA; import org.omg.PortableServer.POAHelper; /** * * @author iltaek (Rize Jin, 2012-05-20) */ public class CreditCompany { public static void main(String args[]) { try{ // 终于成功了!!!!!!!!!!!! // 先是将连接的代码单独放入一个 CreditCompanyConn 类里, 设置一个静态变量,设置一个函数去连接 银行信用卡servant // 在 信用卡公司服务器 端呼叫连接函数, // 在 信用卡公司servant 端声明并访问 bankCreditServer 静态属性,并用它来获取 银行信用卡servant 的服务 CreditCompanyConn conn; conn = new CreditCompanyConn(); conn.callBankCreditServant(args); /* // Retrieve an instance of BankCreditInterface from the name service (after BankServer has registered it) // 获取一个实体,很大胆 BankCreditInterface bankCreditServer; try { ORB orb_0 = ORB.init(args, null); org.omg.CORBA.Object objRef_0 = orb_0.resolve_initial_references("NameService"); NamingContextExt ncRef_0 = NamingContextExtHelper.narrow(objRef_0); String serverName_0 = "BankCredit"; bankCreditServer = BankCreditInterfaceHelper.narrow(ncRef_0.resolve_str(serverName_0)); System.out.println("Obtained a handle on server object: " + bankCreditServer); //runClientUI(bankCreditServer); } catch (InvalidName | NotFound | CannotProceed | org.omg.CosNaming.NamingContextPackage.InvalidName e) { System.out.println("ERROR : " + e); e.printStackTrace(System.out); } //一直到这里 */ // create and initialize the ORB ORB orb = ORB.init(args, null); // get reference to rootpoa & activate the POAManager POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA")); rootpoa.the_POAManager().activate(); // BankClientServantcreate servant and register it with the ORB CreditCompanyServant servant = new CreditCompanyServant(); // get an object reference based on the servant implementation. // The object reference must be narrowed to the correct type, in this case Hello. org.omg.CORBA.Object ref = rootpoa.servant_to_reference(servant); CreditCompanyInterface href = CreditCompanyInterfaceHelper.narrow(ref); // get reference of the root naming context. // NameService invokes the name service org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); // Use NamingContextExt which is part of the Interoperable // Naming Service (INS) specification. NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef); // register the CORBA object reference to the naming service with // name "Hello". Client must search the object using the same name. String name = "CreditCompany"; NameComponent path[] = ncRef.to_name( name ); ncRef.rebind(path, href); System.out.println("Credit Company Server ready and waiting ..."); // wait for invocations from clients orb.run(); } catch (Exception e) { System.err.println("ERROR: " + e); e.printStackTrace(System.out); } System.out.println("Credit Company Server Exiting ..."); } }
CreditCompanyServant
View Code
import creditcompany.*; import java.util.HashMap; import java.util.logging.Level; import java.util.logging.Logger; import org.omg.CORBA.ORB; import org.omg.CORBA.ORBPackage.InvalidName; import org.omg.CosNaming.NameComponent; import org.omg.CosNaming.NamingContextExt; import org.omg.CosNaming.NamingContextExtHelper; import org.omg.CosNaming.NamingContextPackage.CannotProceed; import org.omg.CosNaming.NamingContextPackage.NotFound; import org.omg.PortableServer.POA; import org.omg.PortableServer.POAHelper; /* * To change this template, choose Tools | Templates * and open the template in the editor. */ /** * * @author iltaek (Rize Jin, 2012-05-21) */ public class CreditCompanyServant extends CreditCompanyInterfacePOA{ // HashMap<String, String> mapping = ; // HashMap<String, Double> accountEntry = ; // 终于成功了!!!!!!!!!!!! // 先是将连接的代码单独放入一个 CreditCompanyConn 类里, 设置一个静态变量,设置一个函数去连接 银行信用卡servant // 在 信用卡公司服务器 端呼叫连接函数, // 在 信用卡公司servant 端声明并访问 bankCreditServer 静态属性,并用它来获取 银行信用卡servant 的服务 BankCreditInterface bankCreditServer = CreditCompanyConn.bankCreditServer; String userAccount; boolean returnValue = false; double creditLimit = 1000; @Override public boolean creditTransaction(String creditCard, String shopAccount, double amount) throws creditCardNotExists, noMatchAccount, accountNotExist, invalidValue, exceedCreditLimit { /* System.out.println("+++++++ 0 " + AccountCreditMap.mappingEntry.size()); // check if the account exists already if(!AccountCreditMap.mappingEntry.containsKey(creditCard)) throw new creditCardNotExists(); System.out.println("+++++++ 1"); // check if the account exists already if(!Account.accountEntry.containsKey(shopAccount)) throw new accountNotExist(); System.out.println("+++++++ 2"); // check if the amount is invalid if(amount < 0) throw new invalidValue(); System.out.println("+++++++ 3"); // check if there is enough money //userAccount = mapping.get(creditCard); * */ if(bankCreditServer.balance(creditCard) - amount + creditLimit < 0) throw new exceedCreditLimit(); returnValue = bankCreditServer.transfer(creditCard, shopAccount, amount); return returnValue; } }