利用corba進行顯示書目列表
1. 準備工作
1) 下載安裝Jacorb2.1
從http://www.jacorb.org/download.html下載JacORB_2.3.0_beta2-bin.zip(http://www.jacorb.org/releases/2.1/JacORB_2_1-full.tar.gz),解壓縮到磁碟上,例如C:\JacORB
2) 設定相關的環境
為了在除錯時可以找到有關包和jacorb.properties配置檔案,
在系統環境變數中設定 JACORB_HOME=C:\JacORB,然後再設定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;
然後設定PATH=%JACORB_HOME%\bin;
把C:\JacORB\etc目錄下的jacorb_properties.template複製到C:\JacORB\classes目錄下,並更名為jacorb.properties。
2. 命名服務配置
1)修改配置檔案
在Corba中命名服務是非常重要的, 編輯jacorb.properties檔案,設定其中的
ORBInitRef.NameService=file:/c:/NS_Ref(這裡是示例,當然可以為任何httpURL或者其他路徑),這個NS_Ref檔案會在啟動命名服務時生成.該配置檔案其餘部分保留預設值即可.
2) 測試命名服務(NS,Naming Service)是否可以正常啟動
在dos視窗下輸入
ns c:/NS_Ref
如果出現下面的輸出說明已經正常啟動
[configuration loaded from classpath resource file:/C:/JacORB_2_1classesjacorb.properties]
JacORB V 2.1, www.jacorb.org
(C) Gerald Brose, XTRADYNE TechnologiesFU Berlin, 16-Feb-2004
[jacorb.orb.intercept] INFO : InterceptorManager started with 0 SIs, 0 CIs and 1
IORIs
[jacorb.naming] INFO : NS up
[jacorb.orb] INFO : ORB run
如果沒有任何輸出,可能是由於你的jacorb.properties檔案沒有放到classpath所在的目錄下。
如果沒有正確啟動NS,執行下面的demo時會出現下面的異常
[jacorb.orb.intercept] INFO : InterceptorManager started with 0 SIs, 0 CIs and 1 IORIs
....
[jacorb.giop] INFO : ClientConnectionManager: created new conn to target 192.168.4.161:4089
[jacorb] ERROR : java.net.ConnectException : Connection refused: connect
3 示例
1、在C:\JacORB的demo資料夾下建立一個book子目錄,在book下建立一個IDL檔案,如book.idl
2、編譯idl檔案,有三種方法:利用elcipse的ORB Studio外掛直接編譯,自動生成7個檔案;或者使用ant工具包,或者使用jacorb的idl命令,本例用ant工具實現。利用ant實現時需要修改build.xml檔案,改寫後為:
執行ant的過程如下:
正確啟動NS後,DOS視窗轉到demo/book目錄下執行ant (如果ant沒有安裝則不會編譯)
C:\JacORB\demo\book > ant
這樣會進行idl編譯book.idl檔案,在C:\JacORB\demo\book\generated下生成corba所需的原始檔
同時,ant會編譯所有的java原始檔, C:\JacORB\classes下面生成.class檔案
3、實現book.idl檔案hello模組中BookInf介面,手動建立BookImp.java檔案
4、建立Server和Client(伺服器端和客戶端)程式
===================Server.java===========================
===================Client.java===========================
5、執行程式
本地呼叫:
執行JacORB的ns,在DOS下輸入ns c:\NS_Ref,開啟服務。
這時ns把服務的資訊寫在了c:\NS_Ref檔案裡
執行Server和Client
另外開啟兩個命令視窗,分別執行jaco MyServer.hello.Server及jaco MyServer.hello.Client,即可看到客戶端的書目資訊列表。
參考資料:配置JacORB及ORB Studio:http://blog.csdn.net/soda7/archive/2008/05/19/2457795.aspx
利用ant工具:http://hi.baidu.com/riffling/blog/item/27fee911fb7cc116b8127b39.html
心得:Corba花了差不多有三天時間吧,一天半用來配置環境,一天半用來找bug,在idl語言中,如果是漢語的話不能使用string型別,而是wstring,本來想將選好的書目列表也封裝進去,然後在客戶端顯示,但是不知道IDL語言中陣列怎麼使用,只好將就完成作業了。現在所實現的功能,和HelloWorld有一拼,幼稚呀!
而且Corba的實現機制也沒有搞懂,就像EJB的作業一樣,先記在這兒,寫完報告再研究(希望可以)。
A JA Fighting!
ps:剛才TJ打電話叫實習,去還是不去呢?1K有點少了,時間還長,而且關鍵不知道能不能學到東東,怎麼辦?又沒有別的公司可去,糾結~有大俠指引嗎?呵呵呵~大俠不會看這麼弱智的東東吧 :wink:
1) 下載安裝Jacorb2.1
從http://www.jacorb.org/download.html下載JacORB_2.3.0_beta2-bin.zip(http://www.jacorb.org/releases/2.1/JacORB_2_1-full.tar.gz),解壓縮到磁碟上,例如C:\JacORB
2) 設定相關的環境
為了在除錯時可以找到有關包和jacorb.properties配置檔案,
在系統環境變數中設定 JACORB_HOME=C:\JacORB,然後再設定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;
然後設定PATH=%JACORB_HOME%\bin;
把C:\JacORB\etc目錄下的jacorb_properties.template複製到C:\JacORB\classes目錄下,並更名為jacorb.properties。
2. 命名服務配置
1)修改配置檔案
在Corba中命名服務是非常重要的, 編輯jacorb.properties檔案,設定其中的
ORBInitRef.NameService=file:/c:/NS_Ref(這裡是示例,當然可以為任何httpURL或者其他路徑),這個NS_Ref檔案會在啟動命名服務時生成.該配置檔案其餘部分保留預設值即可.
2) 測試命名服務(NS,Naming Service)是否可以正常啟動
在dos視窗下輸入
ns c:/NS_Ref
如果出現下面的輸出說明已經正常啟動
[configuration loaded from classpath resource file:/C:/JacORB_2_1classesjacorb.properties]
JacORB V 2.1, www.jacorb.org
(C) Gerald Brose, XTRADYNE TechnologiesFU Berlin, 16-Feb-2004
[jacorb.orb.intercept] INFO : InterceptorManager started with 0 SIs, 0 CIs and 1
IORIs
[jacorb.naming] INFO : NS up
[jacorb.orb] INFO : ORB run
如果沒有任何輸出,可能是由於你的jacorb.properties檔案沒有放到classpath所在的目錄下。
如果沒有正確啟動NS,執行下面的demo時會出現下面的異常
[jacorb.orb.intercept] INFO : InterceptorManager started with 0 SIs, 0 CIs and 1 IORIs
....
[jacorb.giop] INFO : ClientConnectionManager: created new conn to target 192.168.4.161:4089
[jacorb] ERROR : java.net.ConnectException : Connection refused: connect
3 示例
1、在C:\JacORB的demo資料夾下建立一個book子目錄,在book下建立一個IDL檔案,如book.idl
/*
* This idl file is generated by the ORB Plugin
*/
module MyServer {
module hello {
interface BookInf{
wstring bookDB();
};
};
};
2、編譯idl檔案,有三種方法:利用elcipse的ORB Studio外掛直接編譯,自動生成7個檔案;或者使用ant工具包,或者使用jacorb的idl命令,本例用ant工具實現。利用ant實現時需要修改build.xml檔案,改寫後為:
<?xml version="1.0"?>
<!DOCTYPE project [ <!ENTITY common SYSTEM "file:../../etc/common.xml"> ]>
<project name="demo" default="all" basedir="../..">
<!-- ==================================================== -->
<!-- Demo build file -->
<!-- ==================================================== -->
&common;
<target name="myinit">
<property name="name" value="book"/>
<property name="dirs.base" value="${basedir}"/>
<property name="classdir" value="${dirs.base}/classes"/>
<property name="lib" value="${dirs.base}/lib"/>
<property name="include" value="${dirs.base}/idl/omg"/>
<property name="dest" value="${dirs.base}/demo/${name}/generated"/>
</target>
<target name="all" depends="myinit,idl">
<javac srcdir="${dest}"
destdir="${classdir}"
classpath="${dirs.base}/classes"
includes="**/*.java"
/>
<javac srcdir="${dirs.base}/demo/${name}/"
destdir="${classdir}"
classpath="${dirs.base}/classes"
includes="*.java"
/>
</target>
<target name="idl" depends="myinit,load-taskdef">
<mkdir dir="${dest}" />
<jacidl srcdir="demo/${name}"
destdir="${dest}"
includepath="${include}"
includes="*.idl"/>
</target>
<target name="clean" depends="myinit">
<delete dir="${classdir}/demo/${name}"/>
<delete dir="${dirs.base}/demo/${name}/generated"/>
</target>
</project>
執行ant的過程如下:
正確啟動NS後,DOS視窗轉到demo/book目錄下執行ant (如果ant沒有安裝則不會編譯)
C:\JacORB\demo\book > ant
這樣會進行idl編譯book.idl檔案,在C:\JacORB\demo\book\generated下生成corba所需的原始檔
同時,ant會編譯所有的java原始檔, C:\JacORB\classes下面生成.class檔案
3、實現book.idl檔案hello模組中BookInf介面,手動建立BookImp.java檔案
package MyServer.hello;
public class BookImp extends BookInfPOA{
//String book="0.退出"+"\n"+"1.紅樓夢"+"\n"+"2.三國演義";
public String bookDB() {
// TODO Auto-generated method stub
return "0.退出"+"\n"+"1.紅樓夢"+"\n"+"2.三國演義"+"\n"+"3.西遊記"+"\n"+"4.紅與黑"+"\n"+"5.漂亮朋友"+"\n"+"6.理智與情感"+"\n"+"7.簡愛"+"\n"+"8.平凡的世界"+"\n"+"9.兒子與情人"+"\n"+"10.世界歷史簡史";
}
}
4、建立Server和Client(伺服器端和客戶端)程式
===================Server.java===========================
package MyServer.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 物件
BookImp bookImp = new BookImp();
// 建立 GoodDay 物件的引用
org.omg.CORBA.Object obj = poa.servant_to_reference(bookImp);
// 使用 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 MyServer.hello;
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import java.util.*;
public class Client {
public static int[] book;
public static int choice;
Client(){
book=new int[10];
for(int i=0;i<10;i++){
book[i]=0;
}
}
public static void main(String[] args) {
try{
BookInf bookInf;
Client t=new Client();
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")); //解析物件
bookInf = BookInfHelper.narrow(obj); //轉換
// GoodDay 介面呼叫
System.out.println(bookInf.bookDB());
System.out.println("請選擇你所要的書籍代號:");
do{
Scanner in=new Scanner(System.in);
choice=in.nextInt();
if(choice<0||choice>10){
System.out.println("您輸入的不符合要求,請輸入0-10之間的選項!");
}
else if(choice==0) break;
else{
t.book[choice-1]=1;
}
}while(choice!=0);
String booklist[]={"0.退出","1.紅樓夢","2.三國演義","3.西遊記","4.紅與黑","5.漂亮朋友","6.理智與情感","7.簡愛","8.平凡的世界","9.兒子與情人","10.世界歷史簡史"};
System.out.println("您選擇的書目是:");
for(int i=0;i<10;i++){
if(t.book[i]!=0){
System.out.println(booklist[i+1]);
}
}
//System.out.println(bookInf.bookChosen(result));
}catch(Exception e) {
e.printStackTrace();
} :arrow:
}
}
5、執行程式
本地呼叫:
執行JacORB的ns,在DOS下輸入ns c:\NS_Ref,開啟服務。
這時ns把服務的資訊寫在了c:\NS_Ref檔案裡
執行Server和Client
另外開啟兩個命令視窗,分別執行jaco MyServer.hello.Server及jaco MyServer.hello.Client,即可看到客戶端的書目資訊列表。
參考資料:配置JacORB及ORB Studio:http://blog.csdn.net/soda7/archive/2008/05/19/2457795.aspx
利用ant工具:http://hi.baidu.com/riffling/blog/item/27fee911fb7cc116b8127b39.html
心得:Corba花了差不多有三天時間吧,一天半用來配置環境,一天半用來找bug,在idl語言中,如果是漢語的話不能使用string型別,而是wstring,本來想將選好的書目列表也封裝進去,然後在客戶端顯示,但是不知道IDL語言中陣列怎麼使用,只好將就完成作業了。現在所實現的功能,和HelloWorld有一拼,幼稚呀!
而且Corba的實現機制也沒有搞懂,就像EJB的作業一樣,先記在這兒,寫完報告再研究(希望可以)。
A JA Fighting!
ps:剛才TJ打電話叫實習,去還是不去呢?1K有點少了,時間還長,而且關鍵不知道能不能學到東東,怎麼辦?又沒有別的公司可去,糾結~有大俠指引嗎?呵呵呵~大俠不會看這麼弱智的東東吧 :wink:
相關文章
- RedHat下顯示彩色目錄列表 (轉)Redhat
- dir 顯示目錄檔案和子目錄列表(轉)
- 利用connect by顯示類目層次關係
- 顯示網路介面列表
- apache 經常無法訪問目錄列表,顯示 403 forbiddenApacheORB
- 進度條和列表形式顯示的控制元件控制元件
- 利用SSIS進行SharePoint 列表資料的ETL
- apache使某目錄下的檔案能夠列表顯示出來Apache
- 薦書 | 《利用Python進行資料分析》Python
- 如何防止Apache顯示檔案列表Apache
- ExpandableListView實現二級列表的顯示View
- 運用li元素進行斑馬色顯示
- chm 檔案開啟只顯示目錄,不顯示內容
- img圖片無法顯示利用onerror事件顯示替代圖片Error事件
- 系統中資料顯示進行脫敏處理
- IE CSS Bug系列:列表元素背景不顯示CSS
- pycharm顯示行號PyCharm
- emacs顯示行號Mac
- vim顯示行號
- linux_vsftpd登入後執行ls不顯示檔案列表LinuxFTP
- 程式執行時,一個進度條顯示INCLUDE程式
- php調取文章最新列表顯示點選數PHP
- DevExpress隱藏列表中顯示的加號+devExpress
- css使文字顯示兩行後顯示省略號CSS
- css 一行顯示超出部分顯示省略號CSS
- python:利用iloc語句對列表的分類變數進行操作Python變數
- 自定義SeekBar顯示進度
- ftp下載顯示進度FTP
- 直播系統開發,實現在進度條中顯示文字顯示進度
- [安卓] 16、ListView和GridView結合顯示單元實現自定義列表顯示效果安卓View
- hadoop中顯示每個目錄大小(按照GN.MB.KB格式顯示)Hadoop
- 利用X.509證書對XML進行加密和簽名XML加密
- android顯示證書sha1Android
- Eclipse顯示行號Eclipse
- Laravel 5.4 入門系列 3. 任務列表顯示Laravel
- 對目錄進行操作
- 利用perf進行效能分析
- VIM安裝NERDTree外掛顯示工程目錄