2011-02-23 48 views
3

我正在尋找關於如何通過CORBA訪問EJB(或底層MBean)的教程或任何其他信息。在JBoss中實現CORBA接口

這是所有我發現:http://www.jboss.org/jbossiiop

我有一個現有的CORBA服務器(基於Java的,但非標),我想允許它調用到我的JBoss的MBean。這個MBean已經通過RMI使用EJB(v2.1)公開。

當前的AppServer目標版本是jboss-eap-4.3。


編輯:我希望我的問題是太含糊得到所以這裏回答一個更新:

我想在JBoss中我的EJB的運行與遠程單獨的服務器上運行的CORBA ORB註冊。至少我認爲我是。現有的CORBA客戶端通過我試圖通過JBoss EJB實現的已定義的IDL /接口連接到服務。此時,所述客戶端連接到相同接口的多個實例,以通過該接口提取信息並管理本地(相同流程)服務。我想讓JBoss EJB作爲這個CORBA IDL的另一個實現來放入。

我對CORBA的理解是生疏的,所以我並沒有走得太遠。我可以很容易地在JBoss中運行ORB,但是我不清楚如何設置綁定,以便「傳統」CORBA ORB可以找到它。我可以更改JBoss實現的任何部分來完成這項工作,但更改其他服務器很困難。

有沒有辦法讓EJB向遠程服務器(ala jndi)註冊? 現有的客戶端能否連接到Jacorb而不添加jboss特定的類?

+0

這不是太含糊,只是你可以計算一個手指上的stackoverflow上的CORBA開發者的數量。 – skaffman 2011-02-24 22:23:18

+1

@skaffman在掌握CORBA後,我將不得不找到一個Ada問題。 – 2011-02-24 23:00:49

回答

3

總之,你必須實現一個適配器,部署它在Jboss中,註冊它與遠程NamingService。在你的適配器實現中,你可以調用你的MBean。

現在更詳細 您有一個CORBA idl,您生成存根和骨架。

interface Stock { 
    int getQuote(in string company); 
}; 

你提供必要的實施

public class StockImpl extends StockPOA { 
    public int getQuote(String company) { 
    //forward a call to MBean here 
    } 
} 

你做平常CORBA登記的東西。例如:

org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(...); 
org.omg.PortableServer.POA poa = org.omg.PortableServer.POAHelper.narrow(orb.resolve_initial_references("RootPOA")); 

poa.the_POAManager().activate(); 

NamingContextExt nc = NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService")); 

NameComponent [] name = new NameComponent[1]; 

org.omg.CORBA.Object o = poa.servant_to_reference(new StockImpl(orb,poa)); 
name[0] = new NameComponent("Stock", "server"); 
nc.bind(name, o); 

orb.run(); 

現在,您的對象在遠程NamingService中註冊並可通過CORBA訪問。

您必須在JBOSS類路徑中包含CORBA JAR。

+0

謝謝!這工作。我希望能夠使用JBoss CORBA機制(基於反射)並避免idlj將CORBA cruft保持在公平的範圍內。我可能最終會重新實現一些使用反射的東西,以避免爲每個MBean編寫一個新的CORBA適配器。 – 2011-03-03 14:12:12

1
  1. 甲CORBA ORB是插座聽者,所以最好使用一個JBoss的控制下,即該標準ORB:

    的ObjectName ORB_NAME = ObjectNameFactory.create( 「JBoss的:服務= CorbaORB」); ORB orb =(ORB)服務器。getAttribute(ORB_NAME,「ORB」);

  2. 自動啓動您的CORBA服務做在一個JBoss MBean服務: http://community.jboss.org/wiki/examplehelloworldservice

  3. 爲了避免編譯IDL您可以使用動態調用接口。 看一看Axis2的CORBA模塊是如何做的:http://wso2.org/library/2807

  4. 如果你使用JBoss的「所有」配置您不需要在類路徑中一個球,這包括CORBA的。