IT 정보/자바/JSP/EJB
[자바/SCJP/JAVA]자바 분산 프로그래밍 - CORBA
김윤석
2007. 12. 17. 15:00
VisiBroker 환경 맞추기
기본적으로 비지브로커는 /usr/local/vbroker디렉토리에 설치된다.
비지브로커를 설치한 후에 사용자의 환경 변수를 설정해주어야 한다.
C-Shell 사용자는 $HOME/.cshrc 파일에 다음과 같은 내용을 추가해준다.
setenv VBROKER_ADM /usr/local/vbroker/adm
setenv CLASSPATH /usr/local/vbroker/lib/vbj30.jar:${CLASSPATH}
setenv PATH /usr/local/vbroker/bin:${PATH}
Bourne-Shell 과 Korn-Shell 사용자는 $HOME/.profile 파일에
VBROKER_ADM=/usr/local/vbroker/adm
export VBROKER_ADM
CLASSPATH=/usr/local/vbroker/lib/vbj30.jar:${CLASSPATH}
export CLASSPATH
PATH=/usr/local/vbroker/bin:${PATH}
export PATH
를 추가한다.
Count 예제 따라하기
이제 간단한 Count 예제를 만들에 보자.
IDL 만들기
Counter.idl 파일
module Counter {
interface Count {
attribute long sum;
long increment();
};
};
idl 컴파일러를 이용해서 Stub/Skeleton 파일 만들기
% idl2java Counter.idl
Creating: Counter
Creating: Counter/Count.java
Creating: Counter/CountHolder.java
Creating: Counter/CountHelper.java
Creating: Counter/_st_Count.java
Creating: Counter/_sk_Count.java
Creating: Counter/_CountImplBase.java
Creating: Counter/CountOperations.java
Creating: Counter/_tie_Count.java
Creating: Counter/_example_Count.java
% ls
./ ../ Counter/ Counter.idl
% cd Counter
% ls
./ CountHelper.java _CountImplBase.java _st_Count.java
../ CountHolder.java _example_Count.java _tie_Count.java
Count.java CountOperations.java _sk_Count.java
% javac -d .. *.java
% cd ..
서버 프로그램 만들기
% vi CountServer.java
import! Counter.*;
class CountImpl extends _sk_Count implements Count {
private int sum;
CountImpl(String name) {
super(name);
System.out.println("Count Object Created");
sum = 0;
}
public int sum() {
return sum;
}
public void sum(int val) {
sum = val;
}
public int increment() {
sum++;
return sum;
}
}
public class CountServer {
public static void main(String args[]) {
try {
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init();
org.omg.CORBA.BOA boa = orb.BOA_init();
CountImpl count = new CountImpl("hi");
boa.obj_is_ready(count);
boa.impl_is_ready();
} catch(Exception e) {
System.out.println(e);
}
}
}
% javac -d . CountServer.java
클라이언트 만들기
% vi CountClient.java
import! Counter.*;
public class CountClient {
public static void main(String args[]) {
try {
System.out.println("Initializing the ORB");
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init();
System.out.println("Binding to Count Object");
Count counter = CountHelper.bind(orb, "hi");
System.out.println("sum <- 0");
counter.sum(0);
for(int i=0; i<1000;i++) {
counter.increment();
}
System.out.println("Sum = "+counter.sum());
} catch(Exception e) {
System.out.println(e);
}
}
}
% javac -d . CountClient.java
실행시키기
% osagent &
% gatekeeper &
% vbj CountServer &
[1] 15628
Count Object Created
% vbj CountClient
Initializing the ORB
Binding to Count Object
sum <- 0
Sum = 1000
Applet! 클라이언트 만들기
% vi CountApplet!.java
import! java.applet!.*;
import! java.awt.*;
import! Counter.*;
public class CountApplet! extends Applet! {
private TextField countField, pingTimeField;
private Button runCount;
private Count counter;
public void init() {
setLayout(new GridLayout(2, 2, 10, 10));
add(new Label("Count"));
add(countField = new TextField());
countField.setText("1000");
add(runCount = new Button("Run"));
add(pingTimeField = new TextField());
pingTimeField.setEditable(false);
try {
showStatus("Initializing the ORB");
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(this);
showStatus("Binding to Count Object");
counter = CountHelper.bind(orb, "hi");
}catch(Exception e) {
showStatus("Applet! Exception:"+e);
}
}
public boolean action(Event e, Object arg) {
if(e.target == runCount) {
try {
showStatus("sum <- 0");
//counter.sum((int)0);
showStatus("Increment...");
int stopCount = Integer.parseInt(countField.getText());
pingTimeField.setText(" ");
long startTime = System.currentTimeMillis();
for(int i=0; i < stopCount; i++) {
counter.increment();
}
long stopTime = System.currentTimeMillis();
pingTimeField.setText("Time = "+Float.toString((float)(stopTime-startTime)/stopCount)+" msec");
showStatus("Sum = "+ counter.sum());
} catch(Exception ex) {
showStatus("System Exception:"+ex);
System.out.println(ex);
ex.printStackTrace(System.out);
}
return true;
}
return false;
}
}
% javac -d . CountApplet!.java
% vi CountApplet!.html
<applet! code=CountApplet!.class width=300 height=400>
<param name=GATEKEEPER_PORT value=15000>
<param name=ORBbackCompat value=true>
<param name=org.omg.CORBA.ORBClass value=com.visigenic.vbroker.orb.ORB>
</applet!>
% applet!viewer CountApplet!.html
% netscape &
애플릿 보기....
출처:
http://www.it-bank.or.kr/prom/java_main.htm