JAVA版CORBA程序HelloWorld&Counter问题与解决

1 篇文章 0 订阅
1 篇文章 0 订阅

注:本文仅供参考,实际操作遇到的问题可能不同,请善用百度

本文将以HelloWorld!班级姓名的实现为例,讲述本人在作业中遇到的问题以及解决方法:

全文是在cmd中进行,没有使用IDE,请使用IDE的同学注意!

1.事前准备

编写本程序个人建议使用jdk1.8.0_131,其他jdk可能会出现不同错误

环境配置:

安装完毕后,配置环境变量

以我为例,我的jdk安装在D:\java1.8中,因此复制D:\java1.8\bin和D:\java1.8\jre\bin这两个路径,然后添加到系统变量path中,并放在上移至最上,以免系统调用其他路径的jdk,结果如图:

然后打开cmd,输入java -version和javac -version,确认两者版本是否一致

接着可以在自己喜欢的地方进行操作,地方自选

2.idl接口编写

可以使用记事本编写

英文实现直接用string,中文实现需要改为wstring,全程序只需改这一处

现给出修改后的代码:

module sample{
interface HelloWorld{ 
wstring sayHello();   
};  
};

结束以HelloWorld.idl格式保存

3.编译idl接口

在HelloWorld.idl所在目录打开cmd,进行编译

注意使用idlj编译时不要忘记操作符 -fall,不然会缺少文件

正确编译语句:

idlj –fall HelloWorld.idl

结束会在HelloWorld.idl所处目录生成文件夹,如图:

4.编写编译服务端和客户端程序

然后如上图所示

HelloWorldServer.javaHelloWorldClient.java两文件

HelloWorldServer.java代码如下:

import sample.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import org.omg.CORBA.portable.*;
import org.omg.PortableServer.*;
class HelloWorldServant extends HelloWorldPOA{   //对象实现类
public String sayHello(){
return "\nHello World!班级姓名\n";
}
}
public class HelloWorldServer{                  //服务程序
public static void main(String args[]){
try{
//初始化ORB
ORB orb = ORB.init(args, null);
//取根POA的引用
org.omg.CORBA.Object poaobj = orb.resolve_initial_references ("RootPOA");
org.omg.PortableServer.POA rootPOA = org.omg.PortableServer.POAHelper.narrow(poaobj);
org.omg.PortableServer.POAManager manager = rootPOA.the_POAManager();
//创建伺服对象 
HelloWorldServant objRef = new HelloWorldServant();
HelloWorld obj = objRef._this(orb);
//绑定命名服务 
NamingContext ncRef = NamingContextHelper.narrow(orb.resolve_initial_references("NameService"));
NameComponent nc = new NameComponent("Hello", ""); 
NameComponent path[] = {nc}; 
ncRef.rebind(path, obj);
//激活POA管理器 
manager.activate();
//等待处理客户程序的请求
System.out.println("HelloWorld is running!");
orb.run();
}catch (Exception e) { 
System.err.println("ERROR: " + e); 
e.printStackTrace(System.out); 
}
}
}

HelloWorldClient.java代码如下:

import sample.*; 
import org.omg.CosNaming.*; 
import org.omg.CORBA.*; 
public class HelloWorldClient { 
public static void main(String args[]) { 
try{
ORB orb = ORB.init(args, null);
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); 
NamingContext ncRef = NamingContextHelper.narrow(objRef); 
NameComponent nc = new NameComponent("Hello",""); 
NameComponent path[] = {nc}; 
HelloWorld helloWorld = HelloWorldHelper.narrow(ncRef.resolve(path)); 
String hello = helloWorld.sayHello(); 
System.out.println(hello); 
} catch (Exception e) {
System.out.println("ERROR : " + e) ;
e.printStackTrace(System.out); 
}
}
}

然后在此目录下打开cmd,用javac将.java文件编译为可执行文件.class

个人建议使用以下语句:

javac -encoding UTF-8 *.java

因为javac编译会使用操作系统默认编码风格(本人的win10 默认编码为GBK),这样设定可以防止编码错误,否则会如下图产生哭笑不得的错误:

编译完成后会产生相应文件,如下图:

如果编译过程中有如下图类似警告,不要忽视:

原因是格式问题,需要打开sample下的HelloWorldPOA.java手动添加代码:

无警告完成后,就可以在HelloWorld.idl所在目录打开三个cmd

5.运行

分别执行三条语句:

tnameserv -ORBInitialPort 1050
java HelloWorldServer -ORBInitialPort 1050
java HelloWorldClient -ORBInitialPort 1050

然后执行完最后一条语句就可以看结果了:

6.关于Counter的实现

Counter的实现相较简单,可仿照上例执行

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值