首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Oracle Application Server 部署 Java CORBA (JCORBA) 完整實戰指南

     編輯:Java 相關知識

JCORBA 核心優勢

  • 符合 CORBA 2.0 標準,支持異構語言互操作
  • 靈活的客戶端類型:Applet、Java 應用、JWeb/LiveHTML/Perl 插件、其他 JCORBA 組件
  • OAS 4.0 內置 Java 加速器 (自然編譯為 C 共享庫),大幅提升執行性能

開發環境與目錄結構

  • JDK 1.1.5+ (或 JDeveloper/JBuilder)
  • 標準目錄結構 (src/classes_svr/classes_cnt/META-INF)
  • CLASSPATH 必含:$ORAWEB_HOME/jco/lib/jcort.jar, wrbjidl.jar, services.jar

核心組件開發 (以 myStack 為例)

1. 服務端實現類: myStack.ServerStack

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;
    private Logger logger;

    // === 生命周期回調 ===
    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 + "\"");
        stackElements[++top] = value;
    }
    public String pop() throws StackException {
        if (top == -1) throw new StackException();
        logger.println("Popping: " + stackElements[top]);
        return stackElements[top--];
    }
}

關鍵點:實現 Lifecycle 接口管理狀態,通過 ObjectManager 獲取環境配置與日誌服務。

2. 遠程接口: myStack.ServerStackRemote

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

必須繼承 JCORemote,定義客戶端可調用的方法簽名。

3. 自定義異常: myStack.StackException

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

編譯與打包

# 編譯服務端類
javac -d ..\Stack\classes_svr\myStack *.java

# 創建 JAR (含類文件與 META-INF/JCO.APP)
jar cvf Server.jar ..\Stack\classes_svr\myStack\*.class META-INF

配置文件: META-INF/JCO.APP

[APPLICATION]
name=myStack_JCO

[ServerStack]
className=myStack.ServerStack
remoteInterface=myStack.ServerStackRemote

[ServerStack.ENV]
initialStackSize=20

定義應用名、實現類、遠程接口、環境參數初始值。

OAS 部署步驟

  1. 管理控制台 → 新建應用
  2. Application Type: JCORBA
  3. Configure Mode: From File
  4. Display Name: StackApp
  5. Jar File: Server.jar
  6. 安裝完成後啟動應用

客戶端開發 (Java 應用模式)

import oracle.oas.jco.*;
import oracle.oas.jndi.*;
import oracle.oas.jndi.oas.*;
import javax.naming.*;
import java.util.Hashtable;
import myStack.ServerStackRemote;

public class StackClient {
    public static void main(String[] args) {
        String url = args[0]; // https://appserver:port
        Hashtable env = new Hashtable();
        env.put(Context.URL_PKG_PREFIXES, "oracle.oas.jndi");
        
        try {
            Context ctx = new InitialContext(env);
            String name = "oas://" + new URL(url).getHost() + "/myStack/ServerStack";
            ServerStackRemote stack = (ServerStackRemote) ctx.lookup(name);
            
            // 交互式測試
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("Enter stack size: ");
            stack.setStackSize(Integer.parseInt(in.readLine()));
            System.out.println("Size set to: " + stack.getStackSize());
            
            String elem;
            while ((elem = in.readLine()).length() > 0) {
                stack.push(elem);
            }
            
            System.out.println("Stack contents (top-down):");
            while (true) {
                try { System.out.println(stack.pop()); }
                catch (StackException e) { break; }
            }
        } catch (Exception e) { e.printStackTrace(); }
        finally { if (stack != null) stack.destroy(); }
    }
}

關鍵:JNDI 查找名格式 oas://host/appName/remoteInterfaceName,客戶端需複製 ServerStackRemote.class 和 StackException.class。

客戶端打包與運行

# 編譯客戶端
javac -d ..\Stack\classes_cnt\myStack StackClient.java

# 打包客戶端 JAR
jar cvf client.jar ..\Stack\classes_cnt\myStack\*.class

# 運行
java StackClient https://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 完整演示了 JCORBA 在 OAS 4.0 上的開發、配置、部署、客戶端調用全流程。隨著 CORBA 組件技術與 Java 的深度融合,此類分布式組件開發將成為企業級異構系統集成的主流選擇。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved