﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-SkyWinder-随笔分类-Corba</title><link>http://www.blogjava.net/SkyWinder/category/24450.html</link><description>Just try to find my memorise...</description><language>zh-cn</language><lastBuildDate>Fri, 27 Jul 2007 09:52:37 GMT</lastBuildDate><pubDate>Fri, 27 Jul 2007 09:52:37 GMT</pubDate><ttl>60</ttl><item><title>第一个corba的Hello World～</title><link>http://www.blogjava.net/SkyWinder/archive/2007/07/27/132728.html</link><dc:creator>枫中玎玲</dc:creator><author>枫中玎玲</author><pubDate>Fri, 27 Jul 2007 04:51:00 GMT</pubDate><guid>http://www.blogjava.net/SkyWinder/archive/2007/07/27/132728.html</guid><wfw:comment>http://www.blogjava.net/SkyWinder/comments/132728.html</wfw:comment><comments>http://www.blogjava.net/SkyWinder/archive/2007/07/27/132728.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/SkyWinder/comments/commentRss/132728.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/SkyWinder/services/trackbacks/132728.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;新公司要求用corba做电信项目，汗，以前偶是写J2EE的，框架用多了，忽然转做corba，觉得很不习惯，压力也很大。网上找了很多，但都没有合适的corba程序，自己用了两天才写了第一个hello world程序，不知道是自己的学习能力下降，还是corba的学习曲线太陡峭。。。以下就是我写的第一个corba程序，好了，不废话了，转入正题：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关于corba的介绍我就不多说了，网上那么多专家给的概念，自己google一下，随便点个了解下就行了。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们公司用的IDL编译器是Orbacus，首先写一个IDL文件，文件名为：hello.idl以下是源码：<br>//IDL<br>&nbsp;&nbsp; module test{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; interface Hello{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void sayHello();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<br>&nbsp;&nbsp;&nbsp; };<br>将IDL文件copy到编译器的bin目录下，然后打开MS-DOS窗口，转换到你的编译器的bin目录下输入命令jidl，如图：<img height=176 alt="" src="http://www.blogjava.net/images/blogjava_net/skywinder/idl.JPG" width=662 border=0><br>jidl命令的参数最好输入文件全名（包括后缀），这时候会在该目录下生成一个test目录，在test目录下创建一个Hello_Impl.java文件，代码如下：<br>package test;</p>
<p>public class Hello_impl extends HelloPOA {<br>&nbsp;public void sayHello(){<br>&nbsp;&nbsp;System.out.println("Hello World");<br>&nbsp;}<br>}<br>它实现了sayHello()方法。<br><br><br>接着创建一个工具类，文件名为ORBImpl.java（注意包目录结构哦），代码如下：<br>package test.common;</p>
<p>import java.io.BufferedReader;<br>import java.io.FileOutputStream;<br>import java.io.FileReader;<br>import java.io.IOException;<br>import java.io.PrintWriter;<br>import java.util.Properties;</p>
<p>import org.omg.CORBA.ORB;<br>import org.omg.CORBA.Object;<br>import org.omg.PortableServer.POA;<br>import org.omg.PortableServer.POAHelper;<br>import org.omg.PortableServer.POAManager;</p>
<p>import test.Hello;<br>import test.HelloHelper;</p>
<p>public class ORBImpl {<br>&nbsp;<br>&nbsp;private ORB orb;<br>&nbsp;private POA poaRoot;<br>&nbsp;private POAManager poaManager;<br>&nbsp;private Object poaObj;<br>&nbsp;<br>&nbsp;public ORBImpl(){<br>&nbsp;&nbsp;orb = null;<br>&nbsp;&nbsp;poaRoot = null;<br>&nbsp;&nbsp;poaManager = null;<br>&nbsp;&nbsp;poaObj = null;<br>&nbsp;}<br>&nbsp;<br>&nbsp;public void initEnv(String[]args){<br>&nbsp;&nbsp;Properties props = System.getProperties();<br>&nbsp;&nbsp;props.put("org.omg.CORBA.ORBClass","com.ooc.CORBA.ORB");<br>&nbsp;&nbsp;props.put("org.omg.CORBA.ORBSingletonClass","com.ooc.CORBA.ORBSingleton");<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;try{<br>&nbsp;&nbsp;&nbsp;orb = ORB.init(args,props);<br>&nbsp;&nbsp;}catch(Exception ex){<br>&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;<br>&nbsp;public void initServer(){<br>&nbsp;&nbsp;try{<br>&nbsp;&nbsp;&nbsp;poaObj = orb.resolve_initial_references("RootPOA");<br>&nbsp;&nbsp;&nbsp;poaRoot = POAHelper.narrow(poaObj);<br>&nbsp;&nbsp;&nbsp;poaManager = poaRoot.the_POAManager();<br>&nbsp;&nbsp;}catch(Exception ex){<br>&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;<br>&nbsp;public void serverGo(Hello hello){<br>&nbsp;&nbsp;try{<br>&nbsp;&nbsp;&nbsp;String fileName = "Hello.ref";<br>&nbsp;&nbsp;&nbsp;String strClient = orb.object_to_string(hello);<br>&nbsp;&nbsp;&nbsp;PrintWriter out = new PrintWriter(new FileOutputStream(fileName));<br>&nbsp;&nbsp;&nbsp;out.print(strClient);<br>&nbsp;&nbsp;&nbsp;out.close();<br>&nbsp;&nbsp;}catch(IOException ex){<br>&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;<br>&nbsp;public void clientGo(){<br>&nbsp;&nbsp;Object clientObj = null;<br>&nbsp;&nbsp;try{<br>&nbsp;&nbsp;&nbsp;String fileName = "Hello.ref";<br>&nbsp;&nbsp;&nbsp;BufferedReader in = new BufferedReader(new FileReader(fileName));<br>&nbsp;&nbsp;&nbsp;String strClient = in.readLine();<br>&nbsp;&nbsp;&nbsp;clientObj = orb.string_to_object(strClient);<br>&nbsp;&nbsp;}catch(IOException ex){<br>&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;Hello hello = HelloHelper.narrow(clientObj);<br>&nbsp;&nbsp;hello.sayHello();<br>&nbsp;}<br>&nbsp;<br>&nbsp;public void destroy(){<br>&nbsp;&nbsp;if(orb != null){<br>&nbsp;&nbsp;&nbsp;try{<br>&nbsp;&nbsp;&nbsp;&nbsp;orb.destroy();<br>&nbsp;&nbsp;&nbsp;}catch(Exception ex){<br>&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br>&nbsp;&nbsp;&nbsp;&nbsp;System.exit(0);<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;<br>&nbsp;public void active(){<br>&nbsp;&nbsp;try{<br>&nbsp;&nbsp;&nbsp;poaManager.activate();<br>&nbsp;&nbsp;&nbsp;orb.run();<br>&nbsp;&nbsp;}catch(Exception ex){<br>&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br>&nbsp;&nbsp;&nbsp;System.exit(0);<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;<br>&nbsp;public ORB getORBRoot(){<br>&nbsp;&nbsp;return this.orb;<br>&nbsp;}<br>}<br><br><br>然后创建Server.java文件，代码如下：<br>package test;</p>
<p>import test.common.ORBImpl;</p>
<p>public class Server {<br>&nbsp;public static void main(String[]args){<br>&nbsp;&nbsp;ORBImpl server = new ORBImpl();<br>&nbsp;&nbsp;server.initEnv(args);<br>&nbsp;&nbsp;server.initServer();<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;Hello_impl helloImpl = new Hello_impl();<br>&nbsp;&nbsp;Hello hello = helloImpl._this(server.getORBRoot());<br>&nbsp;&nbsp;server.serverGo(hello);<br>&nbsp;&nbsp;server.active();<br>&nbsp;&nbsp;server.destroy();<br>&nbsp;}<br>}<br><br><br>终于到了最后一步了，创建客户端文件Client.java，代码如下：<br>package test;</p>
<p>import test.common.ORBImpl;</p>
<p>public class Client {<br>&nbsp;<br>&nbsp;public static void main(String[]args){<br>&nbsp;&nbsp;ORBImpl client = new ORBImpl();<br>&nbsp;&nbsp;client.initEnv(args);<br>&nbsp;&nbsp;client.clientGo();<br>&nbsp;&nbsp;client.destroy();<br>&nbsp;}<br>}<br></p>
打开MS-DOS窗口，转换到你的编译器的bin目录下，输入命令javac test/*.java编译所有test目录下的文件：<br><img height=165 alt="" src="http://www.blogjava.net/images/blogjava_net/skywinder/compile.JPG" width=660 border=0><br><br>接着输入命令java test.Server启动服务器：<br><img height=178 alt="" src="http://www.blogjava.net/images/blogjava_net/skywinder/server.JPG" width=669 border=0><br><br>重新开启一个窗口，输入java test.Client启动客户端调用服务器方法：<br><img height=165 alt="" src="http://www.blogjava.net/images/blogjava_net/skywinder/client.JPG" width=660 border=0><br><br>接着会在服务器的窗口打印出结果：<br><img height=195 alt="" src="http://www.blogjava.net/images/blogjava_net/skywinder/result.JPG" width=662 border=0><br><br><br>在编译运行的时候，记得使用JDK1.3版本的那样可以直接设置classpath，如果是1.4版本，记得要使用java -Xbootclasspath/p:命令将OB.jar包含进来（偶就是用的1.4的。。。）<br><br>这篇文章希望能对你有用哦～
<img src ="http://www.blogjava.net/SkyWinder/aggbug/132728.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/SkyWinder/" target="_blank">枫中玎玲</a> 2007-07-27 12:51 <a href="http://www.blogjava.net/SkyWinder/archive/2007/07/27/132728.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>