`
xiems
  • 浏览: 9647 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java Corba实例

阅读更多

下载并设置java platform这里就不详细讲了。

这里以一个java的corba实例说明corba这种c-s结构的程序的实现。

NB:这篇文章虽然是用java语言写的,但是由于corba的多语言特性,idl文件即可以用java编译器编译,也可以使用其他支持corba的语言编译例如c#. 把以下的java 格式改成c#风格照样可以使用。而且c-s没什么联系,你也可以用c#写server,用java写client,这就是corba强悍的地方

1)首先要熟悉idlj 语言,这个是专门进行接口设计的语言,它与java没关系,有自己的语法,具体的规则需要大家自己再网上研究,这里不多说了(或者访问如下网站详细察看http://www.iona.com/support/docs/manuals/orbix/33/html/orbix33cxx_pguide/IDL.html)。

module HelloApp
{

interface Hello
{
string sayHello();
oneway void shutdown();
};
};

这里定义了一个简单的interface, 将其保存为hello.idl, 然后再dos命令框里面输入 idlj.exe -fall hello.idl 编译。之后会出现一个叫做HelloApp的目录,corba就是通过这个目录里面的类来进行c-s之间的数据沟通。

2)下一步,就是我们的server端:

// A server for the Hello object

import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import org.omg.PortableServer.POA;
import java.util.Properties;

public class HelloServer {

public static void main(String args[]) {
try{
// create and initialize the ORB
ORB orb = ORB.init(args, null);

// get reference to rootpoa & activate the POAManager
POA rootpoa =
(POA)orb.resolve_initial_references("RootPOA");
rootpoa.the_POAManager().activate();

// create servant and register it with the ORB
HelloImpl helloImpl = new HelloImpl();
helloImpl.setORB(orb);

// get object reference from the servant
org.omg.CORBA.Object ref =
rootpoa.servant_to_reference(helloImpl);


// and cast the reference to a CORBA reference
Hello href = HelloHelper.narrow(ref);

// get the root naming context
// NameService invokes the transient name service
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
// Use NamingContextExt, which is part of the
// Interoperable Naming Service (INS) specification.
NamingContextExt ncRef =
NamingContextExtHelper.narrow(objRef);

// bind the Object Reference in Naming
String name = "Hello1";
NameComponent path[] = ncRef.to_name( name );
ncRef.rebind(path, href);

System.out.println
("HelloServer ready and waiting ...");

// wait for invocations from clients
orb.run();
}

catch (Exception e) {
System.err.println("ERROR: " + e);
e.printStackTrace(System.out);
}

System.out.println("HelloServer Exiting ...");

} //end main
} // end class

将其保存为HelloServer.java.放在刚才的hello.idl的目录。编译这个文件就不多说了。

3)还记得在hello中定义的interface吗?我们需要对自己定义的接口中的方法进行实现,因此HelloImp.java

// The servant -- object implementation -- for the Hello
// example. Note that this is a subclass of HelloPOA, whose
// source file is generated from the compilation of
// Hello.idl using j2idl.

import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import org.omg.PortableServer.POA;

import java.util.Properties;

class HelloImpl extends HelloPOA //必须继承这个类,在helloApp目录中已自动生成

{
private ORB orb;

public void setORB(ORB orb_val) {
orb = orb_val;
}

// implement sayHello() method
public String sayHello()
{
return "\nHello world !!\n";
}

// implement shutdown() method
public void shutdown() {
orb.shutdown(false);
}
} //end class
同样放在server所在目录中。

4)接下来是客户端(HelloClient.java):

// A sample Java IDL object client application.
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;

public class HelloClient
{
static Hello helloImpl;
String [] x=new String[6];
public static void main(String args[]){
try{
// create and initialize the ORB
ORB orb = ORB.init(args, null);

System.out.println("ORB initialised\n");

// get the root naming context
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");

// Use NamingContextExt instead of NamingContext,
// part of the Interoperable naming Service.
NamingContextExt ncRef =
NamingContextExtHelper.narrow(objRef);

// resolve the Object Reference in Naming
String name = "Hello1";
helloImpl =
HelloHelper.narrow(ncRef.resolve_str(name));

System.out.println
("Obtained a handle on server object: "
+ helloImpl);
System.out.println(helloImpl.sayHello());
helloImpl.shutdown();

}
catch (Exception e) {
System.out.println("ERROR : " + e) ;
e.printStackTrace(System.out);
}
} //end main

} // end class


这个文件最好放在一个新建的目录,已表示和server有区别,放在一起也没有关系。如果分开的话,记着把HelloApp这个目录复制到client的目录来。

5)好啦!已经可以开始爽了,我们编译所有的java文件

6)再dos窗口输入orbd.exe –ORBInitialPort 1234(端口号可以自定义,但是记得s-c要保持一致),启动corba服务。

7)启动服务器:java HelloServer –ORBInitialPort 1234 –ORBInitialHost localhost

8)启动客户端:java HelloClient –ORBInitialPort 1234 –ORBInitialHost localhost

9)严格执行上述过程是应该直接成功的。 已经经过测试。

10)然后再仔细研究这段代码,你就会发现corba的奥秘了。

分享到:
评论

相关推荐

    java corba实例和相关资料

    CORBA是为了实现分布式计算而引入的。为了说明CORBA在分布计算上有何特点,我们从它与其它几种分布计算技术的比较中进行说明。

    corba核心规范-- 一个简单的CORBA/Java示例

    探索CORBA技术的应用领域---- 一个简单的CORBA/Java示例

    JAVA开发CORBA实例

    JAVA开发CORBA实例可以参考代码,有相应的架包可以下载看看

    corba实例(java版)

    用java实现的corba的最基本的通信,具体的使用方法可以参看我的博客。

    JAVA开发CORBA实例.pdf

    JAVA开发CORBA实例.pdf

    CORBA技术及实例.rar_Java CORBA_corba_corba java_corba simple example_

    CORBA技术及实例

    基于java的corba

    基于java的corba实例

    Java EJB与CORBA交互的例子源代码.rar

    Java EJB与CORBA交互的例子源代码,为LoggerHome对象提供一个ORB和一个corbaname URL,在服务器上记录一个简单的字符串信息,在名字上下文中查询由corbaname URL指向的LoggerHome对象,执行一个安全的downcast,创建...

    Corba学习实例文档

    自己写的一个Java的Corba的简单的应用的例子。

    corba简单实例

    corba的java实现的hello world

    Java中Enterprise JavaBeans(EJB)编程实例代码.rar

    Java中Enterprise JavaBeans(EJB)编程实例代码,内容有:简单的EJB、无状态SessionBean、有状态SessionBean...IIOP、JTA与JTS、JMS的使用、Java IDL、EJB与CORBA的交互、基于EJB的真实世界模型、EJB的商业应用实例等。

    Java中的EJB编程实例代码

    Java中的EJB编程实例代码,内容有:简单的EJB、无状态SessionBean、有状态SessionBean、BMP位图实例、cmp...IIOP、JTA与JTS、JMS的使用、Java IDL、EJB与CORBA的交互、基于EJB的真实世界模型、EJB的商业应用实例等。

    Java IDL使用实例源代码

    Java IDL使用实例源代码,通过例子你将了解如何引入要使用的包,本应用的stub类,要使用CORBA的名字服务,使用CORBA服务,声明客户应用类,建立ORB对象,args为客户程序启动时的命令行参数,使用ORB的名字服务寻找...

    java高手真经 光盘源码

    javacorba.zip 25.Corba编程(HelloWorld例、计算器实例) 第6部分(4个程序包) javareflection.zip 26.Java反射机制与动态代理 javageneric.zip 27.Java泛型编程 javaannotation.zip 28.Java注释符编程 ...

    CORBA-sample-of-java.rar_corba

    该程序是基于CORBA构建技术的一个小小实例程序,大家可以根据自己的兴趣自己改写。其中的.mht文档详细说明了程序的编译,运行的事宜。

    Java高手真经(编程基础卷)光盘全部源码 免积分

    javacorba.zip 25.Corba编程(HelloWorld例、计算器实例) 第6部分(4个程序包) javareflection.zip 26.Java反射机制与动态代理 javageneric.zip 27.Java泛型编程 javaannotation.zip 28.Java注释符编程 ...

    CORBA.rar_corba

    本文重点分析了CORBA的体系结构和实现机制, 详细描述了ORB 的体系结构和CORBA 的运行流程,并给出了一个利用CORBA实现c++和java混合编程的实例

Global site tag (gtag.js) - Google Analytics