Corba的第一个例子

Corba第一个例子,VisiBroker实现

1、 编写接口Bank.idl

module Bank{

  interface Account{¢

     float balance();

  };

  interface AccountManager{

     Account open(in string name);

  };

};

2、idl2java命令编译Bank.idl

命令:idl2java Bank.idl

命令:javac -classpath c:/bdp/lib/vbjorb.jar *.java

会生成Bank文件夹及相关的Java文件,然后编译这些文件,c:/bdpVisiBroker的安装路径。

3、实现Server.java

import org.omg.PortableServer.*;

import Bank.*;

import java.util.*;

 

 

public class Server {

 

  public static void main(String[] args) {

    try {

      

      Properties properties=new Properties();

      properties.setProperty("vbroker.agent.addr", "localhost");

      properties.setProperty("vbroker.agent.port", "14000");

      properties.put("org.omg.CORBA.ORBClass", "com.inprise.vbroker.orb.ORB");

      properties.put("org.omg.CORBA.ORBSingletonClass", "com.inprise.vbroker.orb.ORBSingleton");

      properties.put("javax.rmi.CORBA.StubClass", "com.inprise.vbroker.rmi.CORBA.StubImpl");

      properties.put("javax.rmi.CORBA.UtilClass", "com.inprise.vbroker.rmi.CORBA.UtilImpl");

      properties.put("javax.rmi.CORBA.PortableRemoteObjectClass", "com.inprise.vbroker.rmi.CORBA.PortableRemoteObjectImpl");?????

      org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, properties);

      POA rootPOA = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));

      org.omg.CORBA.Policy[] policies = {

           rootPOA.create_lifespan_policy(LifespanPolicyValue.PERSISTENT)

      };

      POA myPOA = rootPOA.create_POA( "bank_agent_poa", rootPOA.the_POAManager(),

                    policies );

      AccountManagerImpl managerServant = new AccountManagerImpl();

      byte[] managerId = "BankManager".getBytes();

      rootPOA.the_POAManager().activate();

    

     System.out.println(myPOA.servant_to_reference(managerServant) +

     " is ready.");

      orb.run();

      }

      catch (Exception e) {

      e.printStackTrace();

      }

      }

    

}

4、实现Client.java

import Bank.*;

import java.util.*;

 

public class Client {

  public static void main(String[] args) {

      Properties properties=new Properties();

      properties.setProperty("vbroker.agent.addr", "localhost");

      properties.setProperty("vbroker.agent.port", "14000");

      org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,properties);

      byte[] managerId = "BankManager".getBytes();

      Bank.AccountManager manager =

      Bank.AccountManagerHelper.bind(orb, "/bank_agent_poa", managerId);

      String name = args.length > 0 ? args[0] : " Tom ";

      Bank.Account account = manager.open(name);

      float balance = account.balance();

      System.out.println("The balance in " + name + "'s account is $" + balance);

   }

}

5、实现AccountImpl

import Bank.*;

 

public class AccountImpl extends Bank.AccountPOA {

  public AccountImpl(float balance) {

    _balance = balance;

  }

  public float balance() {

    return _balance;

  }

  private float _balance;

}

6、实现AccountManagerImpl

import org.omg.PortableServer.*;

import Bank.*;

 

import java.util.*;

 

public class AccountManagerImpl extends Bank.AccountManagerPOA {

  public synchronized Bank.Account open(String name) {

    Bank.Account account = (Bank.Account) _accounts.get(name);

    if(account == null) {

      float balance = Math.abs(_random.nextInt()) % 100000 / 100f ;

      AccountImpl accountServant = new AccountImpl(balance);

      try {

        account = Bank.AccountHelper.narrow(_default_POA().servant_to_reference(accountServant));

      } catch (Exception e) {

        e.printStackTrace();

      }

      System.out.println("Created " + name + "'s account: " + account);

      _accounts.put(name, account);

    }

    return account;

  }

  private Dictionary _accounts = new Hashtable();

  private Random _random = new Random();

}

7、编译服务器与客户端

    javac *.java命令编译所有文件,生成class

命令:javac -classpath c:/bdp/lib/vbjorb.jar;. *.java

8、运行SmartAgent

    命令:osagent

9、运行服务器

    命令:vbj Server或者start vbj Serverstart用于开启一个新的窗口

10、运行客户端

命令:vbj Client

运行结果:The balance in Tom's account is $992.8,搞定。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值