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