jacorb总结

一、使用到的软件  
JacORB 2.3 
Eclipse SDK 3.1 
JDK5 1.4 
ORB Studio 7.7.7 
 
使用的系统为 Windows XP SP2 。版本号可能不一定要完全按照上面,但是如果你配置成功不了,不妨就按上面来弄。  
 
二、为eclipse安装corba开发插件。  
ORB Studio
是开发 corba 的插件,用于 eclipse  
 
安装其实很简单,把 ORBStudio_7.7.7.jar 文件拷贝到 eclipse plugins 目录。  
 
三、安装JacORB   
  
解压到磁盘   例如: c:\JacORB ,在 c:\jacORB 下新建个文件夹 classes ,为了在调试时可以找到有关包 , 需要在系统环境变量中设置   
JACORB_HOME=C:\JacORB  
path=%JACORB_HOME%\bin  
classpath=.;%JACORB_HOME%\lib\idl.jar;%JACORB_HOME%\lib\jacorb.jar;%JACORB_HOME%\lib\logkit-1.2.jar;%JACORB_HOME%\lib\avalon-framework-4.1.5.jar;%JACORB_HOME%\classes 
  
c:\JacORB\etc 中的 jacorb_properties.template 复制到 c:\JacORB\classes 下,并更名为 jacorb.properties  。编辑 jacorb.properties 文件,设置 ORBInitRef.NameService=file:/c:/NS_Ref  这个文件是启动服务时生成的 ior 文件,里面有服务的 ip 地址及端口信息等,用 dior –f c:/NS_Ref 命令可以解析这个 ior 文件以得到 ip 地址及端口号。  
dos 窗口下   输入  ns 启动服务  
这里有个问题,下载下来的 latest 版本的 2.3.0 jacORB-bin\bin  下面的 jaco jaco.bat 后面都带一个后缀 ".tpl" ,最后终于知道这个 tpl template !删除所有 .tpl 后缀!再把 jaco.bat 中的 JAVA_CMD@ 替换成 JAVA  
 
 
四、在eclipse里面配置ORB StudioJacORB  
eclipse 的菜单栏中,选【 windows ->[preferences]->[ORB Studio]->[IDL Compiler] ,选中 JacORB  
然后展开 [IDL Compiler] ,设置 JacORB IDL Command Command Options  
 
默认参数是:  
IDL Command
java 
Command Options
-cp "/Tools/JacORB/lib/idl.jar;/Tools/JacORB/lib/logkit-1.2.jar" org.jacorb.idl.parser -d %D% %F% 
 
第二个参数要设置成正确的路径。  
-cp "C:\jacORB\lib\idl.jar;D:\JavaTools\JacORB-2.3.0\lib\logkit-1.2.jar" org.jacorb.idl.parser -d %D% %F% 
 
 
五、corba程序示例一个简单的例子hello  
以下操作在 eclipse 中进行,创建一个 java 工程,给新项目添加 Libraries, 右键 Properites--->Libraries--->Add Library--->User Library  
 --->User Libraries...--->New...--->Add JARs...  
找到 OpenOrb\OpenORB\lib 目录下 openorb_orb-1.4.0.jar,openorb_orb_tools-1.4.0.jar 
      OpenOrb\OpenORB\lib\endorsed
目录下 openorb_orb_omg-1.4.0.jar 
      OpenOrb\tools\lib
目录下所有 .jar 文件。  
 
1
src上右键New--->Other--->CORBA Wizard--->IDL files--->Simple IDL,建立一个IDL文件,如demo.idl  
module demo 

    module hello { 
        interface GoodDay { 
            string hello_latin1(); 
            wstring hello_chinese();            
        }; 
    }; 
}; 
 
2
、编译idl文件,有三种方法:  
(一)右键点击 demo.idl 文件,选 [ORB Menu]->[Compile] ,会生成 demo.hello 包,里面包含 7 个自动生成的文件  
_GoodDayStub.java 
GoodDay.java 
GoodDayHelper.java 
GoodDayHolder.java 
GoodDayOperations.java 
GoodDayPOA.java 
GoodDayPOATie.java 
(二)使用 ant 工具包,  
下载 apache-ant-1.7.0-bin.tar  
解压到磁盘   例如: C:\ apache-ant-1.7.0  
设置环境变量:  ANT_HOME C:\ apache-ant-1.7.0  
path
%ANT_HOME%\bin  
然后在命令行下找到工程的 idl 文件的目录,在目录里必须有构建文件 build.xml 才可以编译,其写法见 附录  
在命令行输入 ant 命令,即可编译,同样可以生成上面的 7 个文件,再将其导入到 eclipse 工程里。  
(三)用 jacorb idl 命令:  
在命令行下进入 jacorb bin 目录,输入命令: idl c:\demo.idl ,这时就会在 bin 目录中产生以上 7 java 文件,导入到 eclipse 中即可  
3、实现demo.idl文件hello模块中GoodDay接口,手动创建GoodDayImpl.java文件  
package demo.hello; 
 
public class GoodDayImpl extends GoodDayPOA { 
 
 public String hello_chinese() { 
  // TODO Auto-generated method stub 
  return "
你好 世界 "; 
 } 
 
 public String hello_latin1() { 
  // TODO Auto-generated method stub 
  return "Hello, World"; 
 } 

 
4
、创建ServerClient(服务器端和客户端)程序  
Server.java 
// 
package demo.hello; 
 
import org.omg.CORBA.ORB; 
import org.omg.CosNaming.NamingContextExt; 
import org.omg.CosNaming.NamingContextExtHelper; 
import org.omg.PortableServer.POA; 
import org.omg.PortableServer.POAHelper; 
 
public class Server { 
 public static void main(String[] args) { 
  try { 
   ORB orb = ORB.init(args, null); // 
初始化  ORB 
    
   POA poa = POAHelper.narrow(orb 
     .resolve_initial_references("RootPOA")); // 
初始化  POA 
 
   poa.the_POAManager().activate(); 
 
   // 
创建一个  GoodDay  对象  
   GoodDayImpl goodDayImpl = new GoodDayImpl(); 
 
   // 
创建  GoodDay  对象的引用  
   org.omg.CORBA.Object obj = poa.servant_to_reference(goodDayImpl); 
 
   // 
使用  naming service 
   NamingContextExt nc = NamingContextExtHelper.narrow(orb 
     .resolve_initial_references("NameService")); 
    
   nc.bind(nc.to_name("hello.goodDay"), obj); // 
绑定对象  
 
   orb.run(); 
  } catch (Exception e) { 
   e.printStackTrace(); 
  } 
 } 

 
Client.java 
// 
package demo.hello; 
 
import org.omg.CORBA.ORB; 
import org.omg.CosNaming.NamingContextExt; 
import org.omg.CosNaming.NamingContextExtHelper; 
 
public class Client { 
 public static void main(String[] args) { 
  try{ 
   GoodDay goodDay; 
    
   ORB orb = ORB.init(args, null); // 
初始化  ORB 
    
   // 
使用  naming service 
   NamingContextExt nc = NamingContextExtHelper.narrow(orb 
     .resolve_initial_references("NameService")); 
   org.omg.CORBA.Object obj = nc.resolve(nc.to_name("hello.goodDay")); //
解析对象  
    
   goodDay = GoodDayHelper.narrow(obj); //
转换  
    
   // GoodDay 
接口调用  
   System.out.println(goodDay.hello_latin1()); 
   System.out.println(goodDay.hello_chinese()); 
  }catch(Exception e) { 
   e.printStackTrace(); 
  } 
 } 

 
5
、运行程序  
1)本地调用:  
运行 JacORB ns 
ns
 
这时 ns 把服务的信息写在了 c:\NS_Ref 文件里  
运行 Server Client 
进入代码目录 demo 的上级目录 ( 例如: cd E:\workspace\CorbaTest\bin) ,运行下面的代码  
 
start jaco demo.hello.Server 
 
start jaco demo.hello.Client
 
同样,如果后面没有参数,则程序会自动去 c:\NS_Ref 文件里查找服务信息,然后再运行  
(二)远程调用:  
修改代码:  
Server 中的  
NamingContextExt nc = NamingContextExtHelper.narrow(orb 
     .resolve_initial_references("NameService")); 
    
   nc.bind(nc.to_name("hello.goodDay"), obj); // 
绑定对象  
改为:  
org.omg.CORBA.Object ncobj = orb.string_to_object("corbaloc::1.2@192.168.1.108:2285/NameService");  
NamingContextExt nc = NamingContextExtHelper.narrow(ncobj);  
 
nc.rebind(nc.to_name("hello.goodDay"), obj); //  绑定对象  
再将 Client 中的  
NamingContextExt nc = NamingContextExtHelper.narrow(orb 
     .resolve_initial_references("NameService"));
 
改为:  
org.omg.CORBA.Object ncobj = orb.string_to_object("corbaloc::1.2@192.168.1.108:2285/NameService");  
NamingContextExt nc = NamingContextExtHelper.narrow(ncobj);  
启动 ns  
在命令行输入 dior –f c:\NS_Ref ,来解析 ior 文件,看到 ip 地址和端口号,将这两个信息写入到 java 程序中:  
org.omg.CORBA.Object ncobj = orb.string_to_object("corbaloc::1.2@192.168.1.108:2285/NameService");  
如果写成读取配置文件的形式更方便。  
然后在命令行下运行  
start jaco demo.hello.Server 
 
start jaco demo.hello.Client
 
即可  
 
附:build.xml文件详解  
<?xml version="1.0"  encoding="GB2312" ?>  
<!-- 
    
文档结构为
    <project> 
        <property/>               
全局变量的定义  
        <property/>...
 
        <target name="1">          任务组 (tasks) 
            <javac></javac>       
一项 javac 编译任务  
            ... 
            <oneTask></ontTask>   
一项其它任务  
        </target>
 
        <target name="2"> 
            <javac></javac> 
            ... 
            <oneTask></ontTask> 
        </target> 
    </project>
 
    project 代表一个项目,  
    default:
运行到名称为 "dist" target( 任务组
    basedir:
基准路径。  
-->
 
本例子的build.xml代码如下:  
<?xml version="1.0"?>  
 
<!DOCTYPE project [ <!ENTITY common SYSTEM "file:../../etc/common.xml"> ]>  
 
<project name="demo" default="idl" basedir="../..">  
 
&common;  
 
<!-- ==================================================== -->  
<!-- Demo build file -->  
<!-- ==================================================== -->  
 
<target name="helloinit" depends="init">  
<property name="name" value="hello"/>  
<property name="dirs.base" value="${basedir}"/>  
<property name="classdir" value="${dirs.base}/classes"/>  
<property name="lib" value="${dirs.base}/lib"/>  
<property name="dest" value="${dirs.base}/demo/${name}/generated"/>  
<property name="include" value="${dirs.base}/idl/omg"/>  
</target>  
 
<target name="idl" depends="helloinit,load-taskdef">  
<mkdir dir="${dest}" />  
<jacidl srcdir="demo/${name}"  
destdir="${dest}"  
includepath="${include}"  
  includes="*.idl"/>  
</target>  
</project>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值