程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Oracle應用服務器實現Java CORBA

Oracle應用服務器實現Java CORBA

編輯:關於JAVA

摘要:本文通過一個JCORBA應用實例,介紹了JCORBA的特點和如何在Oracle 應用服務器中部署Java CORBA構件。

關鍵詞:Oracle,CORBA,JCORBA,構件,Java

Internet的迅速發展改變了傳統的信息交流方式和企業的運行方式,它已經成為許多新興產業如電子商務、自助服務、網上購物和在線交易的媒介。越來越多的企業通過Internet構築起自己企業的信息應用平台,而JAVA語言以其易用性、跨平台性、面向對象性等諸多優點,正隨著這股潮流成為面向企業應用和Internet應用的流行網絡計算語言。許多企業正在將他們的商業應用如電子商務用JAVA來實現,為了適應這種需求,Oracle公司推出其應用服務器產品OAS 4.0(Oracle Application Server Version 4.0),它將Java虛擬機(Virtual Machine)內置於 OAS4.0中,采用稱為Java加速器的自然編譯方法,將Java庫程序先編譯為標准的C代碼,再將C代碼在不同的CPU和操作系統的平台上進行編譯,生成共享庫供Java程序調用,這種方式大大提高了Java程序的執行速度。

在OAS4.0中,Java應用有多種實現形式,其中以JCORBA(Java CORBA, 簡寫為JCO)以其靈活的客戶端調用,符合CORBA 2.0而廣受關注,同其它的一些CORBA實現平台一樣,JCORBA構件在OAS 4.0中實現時,也融入了 Oracle一些自有的特點,下面通過介紹JCORBA應用實例"myStack"的開發過程,向大家介紹JCORBA的特點、開發和使用過程。

一、JCORBA開發工具

開發JCORBA,你可以使用任何支持JAVA 1.1.4或以後版本的JAVA開發平台進行開發,如Oracle 公司Jdeveloper、SUN公司的JDK、BORLAND 公司的Jbuilder等。在本實例中我們使用 SUN 公司的JDK 1.1.5。

二、建立開發環境文件目錄

在建立JCORBA應用以前,建議建立固定格式的目錄結構,這樣有利於對整個JCORBA應用進行管理,圖1 的目錄結構已指明了實例中各文件的相應位置,相應的文件在以後的工作不斷加入。

三、建立目標應用程序

目標應用程序包括一個類,其類名為ServerStack,它能實現簡單的棧操作,這個類可實現如下四個方法。

setStackSize() 設置棧的長度

getStackSize() 獲取棧的長度

push() 壓棧

pop() 從棧中彈出數據

在這個類中,還提供了有關生命期的處理。

ServerStack.java源代碼如下:

package myStack;
import oracle.oas.jco.*;
import java.util.Properties;
public class ServerStack implements Lifecycle
{
private int stackSize = 0;
private String stackElements[];
private int top = -1;
private ObjectManager mgr = null;
private Logger logger = null;
public void jcoCreate()
{
mgr = ObjectManager.getObjectManager(this);
logger = mgr.getLogger();
logger.setSeverity(Logger.LOG_SEVERITY_DEBUG);
try {
Properties env = mgr.getEnvironment();
setStackSize(Integer.parseInt(env.getProperty("initialStackSize")));
}
catch (Exception e) {
}
}
public void jcoDestroy() {
}
public void jcoPassivate()
throws NonReusableException
{
throw new NonReusableException();
}
public void jcoActivate() {
}
public int getStackSize()
{
logger.println(" Getting stack size...");
return stackSize;
}
public void setStackSize(int size) throws StackException
{
if (size < 0)
throw new StackException();
logger.println(" Setting stack size to " + size + "...");
top = -1;
stackSize = size;
stackElements = new String[size];
}
public void push(String value) throws StackException
{
if (top == stackSize - 1)
throw new StackException();
logger.println(" Pushing \"" + value + "\" onto the stack...");
stackElements[++top] = value;
}
public String pop() throws StackException
{
if (top == -1)
throw new StackException();
logger.println(" Popping the stack (returning element " + stackElements[top] + ")...");
return stackElements[top--];
}
}

四、建立遠程調用接口

為了使客戶端能調用ServerStack中的方法,必須要有相應的接口程序,在接口程序中,應包含客戶端所能調用的所有方法,接口程序的程序名為ServerStackRemote.java。程序源代碼如下:

package myStack;
public interface ServerStackRemote extends oracle.oas.jco.JCORemote
{
public int getStackSize();
public void setStackSize(int size)
throws StackException;
public void push(String value)
throws StackException;
public String pop()
throws StackException;
}

五、建立異常處理

在ServerStack中,能夠響應異常處理,為了處理異常,編制相應的異常處理類,其程序名為 StackException.java。程序源代碼如下:

package myStack;
public final class StackException extends Exception
{
public StackException()
{
}
}

六、編譯JAVA源代碼

將上面的三個JAVA程序,ServerStack.java, ServerStackRemote.java, StackException.java,復制到第二節所示的目錄結構中。在你進行編譯前,檢查你的CLASSPATH環境是否包括如下路徑和文件:

$ORAWEB_HOME/jco/lib/jcort.jar

$ORAWEB_HOME/classes/wrbjidl.jar

$ORAWEB_HOME/classes/services.jar

如果用JDK時編譯,命令行如下:

prompt>cd ..\Stack\src\MyStack
prompt>javac -d .. \Stack\classes_svr\myStack *.java

編譯完成。

".."表示目錄"Stack"所在的目錄前綴。

七、建立配置文件

JCORBA應用配置文件名必須為JCO.APP,文件中包含應用程序名,遠程接口名及其它系統參數的設置值和初始值。其文件內容如下:

[APPLICATION]

name=myStack_JCO

[ServerStack]

className=myStack.ServerStack

remoteInterface=myStack.ServerStackRemote

[ServerStack.ENV]

initialStackSize=20

八、為應用建立JAR文件

JAR文件中將包含所有建立JCORBA應用所必須的文件,Oracle應用服務器管理程序將從中得到建立JCORBA應用所需的所有資料,並將它們安裝在應用服務器相應的位置,我們可以運行JDK中的JAR實用程序來進行該項工作。命令行如下:

prompt>cd ..\Stack\classes_svr
prompt>jar cvf Server.jar ..\Stack\classes_svr\myStack\*.class META-INF

產生的JAR文件Server.jar在其相應的目錄結構中。

九、將JCORBA應用安裝到應用服務器中

按OAS4.0管理程序的要求和安裝步驟,將Server.jar安裝到應用服務器中,其整個安裝過程相當簡單,但按裝時也應注意如下幾點。

Application Type: "JCORBA"

Configure Mode select: "From File"

Display Name: "StackApp"

Jar File: "Server.jar"

安裝完成以後,如要使用該應用,應啟動它。

十、建立客戶端應用

JCORBA的客戶端可以有多種形式,主要如下:

浏覽器端的 Java Applets

其它的JCORBA應用

Java應用程序

Jweb 插件

LiveHTML插件

Per1插件

正由於有眾多的客戶程序類型可以調用JCORBA,大大拓展了JCORBA的應用范圍,提高了JCORBA重用性和使用的方便性。為了實例介紹的方便性,我們選擇了Java應用程序作為其客戶端實例。

客戶端Java程序源代碼如下:

import oracle.oas.jco.*;
import oracle.oas.jndi.*;
import oracle.oas.jndi.oas.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.Hashtable;
import javax.naming.*;
import myStack.ServerStackRemote;
public class StackClient
{
public static void main(String args[])
{
int stackSize;
String buf, stackElement;
int n = 0;
String _host = "localhost";
ServerStackRemote s = null;
try {
String _urlStr = args[0];
if (_urlStr != null) {
URL _contactURL = new URL(_urlStr);
_host = _contactURL.getHost();
int _port = _contactURL.getPort();
if (_port != -1)
_host = _host + ":" + String.valueOf(_port);
}
Hashtable _env = new Hashtable();
_env.put(Context.URL_PKG_PREFIXES, "oracle.oas.jndi");
// Initial Context
Context _initialContext = new InitialContext(_env);
// Lookup
String _name = "oas://" + _host + "/myStack/ServerStack";
s = (ServerStackRemote) _initialContext.lookup(_name);
System.out.println();
System.out.print("Enter server stack size: ");
BufferedReader d = new BufferedReader(
new InputStreamReader(System.in));
buf = d.readLine();
stackSize = Integer.parseInt(buf);
s.setStackSize(stackSize);
System.out.println("---> Server stack size is currently " +
s.getStackSize());
for(n = 0;;n++) {
System.out.print("Enter stack element (RET to quit): ");
stackElement = d.readLine();
if (stackElement.length() == 0)
break;
s.push(stackElement);
}
System.out.println("---> Server stack currently has the following " +
n + " elements:");
System.out.println();
for (int i = n-1; i >= 0; i--)
System.out.println(" " + s.pop());
} // end try
catch (myStack.StackException se) {
System.out.println("Stack exception occurred.");
System.out.println(se);
}
catch (java.io.IOException ioe) {
System.out.println("The following error occurred while trying to read
input.");
System.out.println(ioe);
}
catch (NamingException ne) {
System.out.print("Communication error: ");
System.out.println(ne.getMessage());
ne.printStackTrace();
}
finally {
if (s != null)
s.destroy(); // from JCORemote
}
System.exit(0);
}
}

為了使客戶端和服務器建立連接,還需將ServerStackRemote.class和StackException.class 復制到 ..\Stack\classes_cnt\myStack目錄之下。

編譯 StackClient.java 為 StackClient.class,並按第七節的方式產生客戶端的JAR文件,JDK命令行如下:

prompt>javac -d ..\Stack\classes_cnt\myStack StackClient.java
prompt>cd ..\Stack\classes_cnt
prompt>jar cvf client.jar ..\Stack\classes_cnt\myStack\*.class

客戶端JAR文件產生完成。

十一、運行客戶端程序調用JCORBA應用

至此,我們終於可以運行我們的JCORBA應用了,命令行如下:

prompt> java StackClient http://appservermachine:port

appservermachine:port:運行OAS的機器名和其運行端口。如果機器名為Oracle,端口號為80,我們鍵入如下命今行和其運行實例如下:

prompt> java StackClient http://oracle:80

Enter server stack size: 4

---> Server stack size is currently 4

Enter stack element (RET to quit): 1

Enter stack element (RET to quit): 2

Enter stack element (RET to quit): 3

Enter stack element (RET to quit): 4

Enter stack element (RET to quit):

---> Server stack currently has the following 4 elements:

4

3

2

1

十二、結束語

通過對"myStack"應用實例開發過程的介紹,給出了OAS4.0中JCORBA 應用的實現框架。隨著CORBA構件技術的不斷發展,JAVA語言的廣泛使用,這方面的應用和研究將會不斷深入。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved