关于CORBA 问题的大讨论。重金求购。不封顶。欢迎各种解决方案。(200分)

  • 主题发起人 主题发起人 bluepeach
  • 开始时间 开始时间
B

bluepeach

Unregistered / Unconfirmed
GUEST, unregistred user!
大家都知道,Delphi 的 CORBA不能实现跨平台,所以比较适合于开发客户端。我想用JAVA开发
服务器端,谁有基于corba的JAVA 服务器端源程序,有就有分。bluepeach@263.net
另外,用CORBA开发的三层如果用数据库的话,欢迎有这方面的经验的人热烈发言,都有分,
连接什么数据库,用什么连接。很多人都想听的。
最后,据说idl2pas 已经有下载了,请问哪里可以找到?最好教育网上,国内也行。
 
Visual Broker 3.3里就有idl2pas
"基于corba的JAVA 服务器端源程序"用JBuilder可以很轻易的地做一个
 
to cmldy:
1.visibroker3.3请问教育网上有下载吗?
2.抱歉,我的机器运行JBUILDER太慢,因此我想用JDK做,请问具体过程和有没有源代码例子。分大大的有。
to all:
1.java 开发的服务器端连数据库,比如SQL Server 大家有什么想法?踊跃发言。可以用JDBC吗?
2.大家都来啊,这200分用来灌水,说的好的或有源码的另行加分。
 
Visibroker3.3 for Delphi

VisiBroker4.1 for Java在www.Inprise.com上有下载
如果用JDK做基于Corba的程序太麻烦了!
java开发的服务器端连数据库当然使用JDBC了
 
以一个简单的 "Hello World" 程序为例,简单说一两句话吧:
一、定义你的接口(Hello.idl)
下例 OMG IDL 描述一个 CORBA 对象,其单个 sayHello() 操作将返回一个字符串。
module HelloApp
{ interface Hello
{ string sayHello();
};
};
二、编译IDL 接口:idltojava Hello.idl
编译后将形成以下五个文件:
1._HelloImplBase.java:
该抽象类是一个服务器 skeleton,它可为服务器提供基本的 CORBA 功能。
它实现 Hello.java 接口。本例用服务器类 HelloServant 扩展 _HelloImplBase。
2._HelloStub.java :
该类是客户机 stub,可为客户机提供 CORBA 功能。它实现 Hello.java 接口。
3.Hello.java :
该接口含有 IDL 接口的 Java 版本,其中含有方法 sayHello()。
Hello.java 接口扩展 org.omg.CORBA.Object 并提供标准的 CORBA 对象功能。
4.HelloHelper.java:
这是一个终态类,可以提供辅助功能,特别是提供将 CORBA 对象引用转换为适当
类型所需的 narrow() 方法。
5.HelloHolder.java:
这是一个终态类,其中含有 Hello 类型的公有实例成员。它可为“out” 和 “inout”
变量提供操作。CORBA 有这些变量,但不容易映射为 Java 的语义。
三、在文件 HelloServer.java 中提供服务器的实现。
服务器 (HelloServer.java) 的实现
服务器示例含有两个类:servant 和服务器。
servant HelloServant 是 Hello IDL 接口的实现;
每个 Hello 实例都由一个 HelloServant 实例来实现。
servant 是 _HelloImplBase 的子类,_HelloImplBase 是由 idltojava 编译器从示例
IDL 中生成的。servant 对每个 IDL 操作都包含一个方法。
本例中只有一个 sayHello() 方法。servant 中的方法与常规 Java 方法一样,
而用于处理 ORB 以及编组变量、结果等的其它代码将由服务器和 stub 提供。
服务器类含有服务器的 main() 方法,可完成以下任务:
创建一个 ORB 实例
创建一个 servant 实例(CORBA Hello 对象的实现)并通知 ORB
获取一个命名上下文的 CORBA 对象引用,在该命名上下文中注册新 CORBA 对象
在命名上下文中将新对象注册在“Hello”名下
等待对新对象的调用
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
class HelloServant extends _HelloImplBase
{
public String sayHello()
{
return "/nHello world !!/n";
}
}
public class HelloServer {
public static void main(String args[])
{
try{
// 创建和初始化 ORB
ORB orb = ORB.init(args, null);
// 创建 servant 并将其向 ORB 注册
HelloServant helloRef = new HelloServant();
orb.connect(helloRef);
// 获取根命名上下文
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContext ncRef = NamingContextHelper.narrow(objRef);
// 绑定命名中的对象引用
NameComponent nc = new NameComponent("Hello", "");
NameComponent path[] = {nc};
ncRef.rebind(path, helloRef);
// 等待来自客户机的调用
java.lang.Object sync = new java.lang.Object();
synchronized (sync) {
sync.wait();
}
} catch (Exception e) {
System.err.println("ERROR: " + e);
e.printStackTrace(System.out);
}
}
}
四、你自己生成你的pascal客户(这省略了:))
五、运行名字服务器:
tnameserv -ORBInitialPort 1050
六、启动 Hello 服务器:
java HelloServer -ORBInitialPort 1050
七、从不同于服务器的 shell 中运行 Hello 应用程序客户机
八、至于java 开发的服务器端连数据库,当然用JDBC,怎么用,参考一下本论坛的其它问题吧
关键是你的IDL接口要设计好。

 
cmldy,我知道inprise上有,但我连不上。5555555……
eguy说的很好,肯定有100分,大家继续。分可以另开。
有人用过客户端用 java applet编程吗?谈谈。
 
bluepeach:再给100分吧,呵呵。
Applet 客户机 (HelloApplet.java) 的实现
下面的示例 applet 客户机将完成以下任务:
创建一个 ORB、获取一个指向命名上下文的引用 、在命名上下文中查找 "Hello"
并接受指向该 CORBA 对象的引用、调用对象的 sayHello() 操作并打印结果
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import java.awt.Graphics;
public class HelloApplet extends java.applet.Applet
{
public void init() {
try {
// 创建和初始化 ORB
ORB orb = ORB.init(this, null);
// 获取根命名上下文
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContext ncRef = NamingContextHelper.narrow(objRef);
// 解析命名中的对象引用
NameComponent nc = new NameComponent("Hello", "");
NameComponent path[] = {nc};
Hello helloRef = HelloHelper.narrow(ncRef.resolve(path));
// 调用 Hello 服务器对象并打印结果
message = helloRef.sayHello();
} catch (Exception e) {
System.out.println("HelloApplet exception: " + e.getMessage());
e.printStackTrace(System.out);
}
}
public void paint(Graphics g)
{
g.drawString(message, 25, 50);
}
String message = "";
}
 
eguy:多谢了。今后常向您请教。
all:go on!
 
另:有没有人做过DCOM和CORBA的互操作?DELPHI的corba是用com封装的,不知delphi做互操作
是不是方便些?
 
用EJB吧。
顺便问问,有没有国内开发的EJB 1.1兼容的Application Server?
 
为什么用EJB ?
 
1。使用EJB可以真正实现3层/多层体系结构。可以把应用逻辑从前台界面以及后台数据
操作分开。
2。使用EJB可以把开发和部署分开。开发商提供bean和客户,管理员部署配置应用,监
视应用。
3。EJB可以方便的实现MVC模型,方便建模和实现。
4。EJB是纯Java的接口,底层可以使用任何分布式系统实现,目前普遍看好的就是CORBA
对象总线了。所以,只要Application Server支持,普通CORBA客户可以连接EJB对象
5。容器里可以对EJB对象进行监控。实际上EJB对象都是通过容器调用的——EJB组件提供
接口,容器实现接口给客户。
上面这些都是我自己总结的,只是个人见解。
 
to eguy:
< a herf="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=361651">这里来拿分!
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=361651 也欢迎大家都来看!这里的分继续有效!</a>
to JJams_King:讲的甚好,但我也有几点疑问:
1、2、别的也可以吧!如CORBA,dcom。只要真正面向对象,以三层的观点去规划。
3、请问MVC模型是什么?
4、EJB 有和corba融合的趋势,据说EJB的模型有优势,而CORBA的分布性好。
5、监控是什么?TP monitor 吗?请指点。
另:您能多讲些EJB的实现要求(软件,硬件等)和ejb的模型吗?
 
1。对于第一点,只要合理规划,大多数系统都可以实现。EJB提供完整的框架,
所以实现起来非常方便
2。对于第二点,这可是组件技术的特长,目前CORBA还没有组件支持规范。不
过早些时候就听说CORBA在定CORBA组件标准,不知道什么时候可以见到(??
是不是已经有了??)。而对于组件,相信大家都比较熟悉了。其最大的特点
在于它的可重用性和可配置性。具体地说,它规定了组件的存在形式(ejb-jar
文件),组件的描述方法(xml),组件的视图/协议(客户视图和实例视图),
组件的实例化方法(实体/会话组件的实例化),组件的可配置性(环境入口和
资源入口),组件的事务属性,安全属性,等等。有这些保障,一个组件提供商
开发的组件可以方便的用到各种环境里而不必修改和重新编译。
3。MVC模型把对象世界里的对象类分为三种M对应着数据;V对应着不同角度,不同
对象对数据的视图;C是一个长时间的控制过程,用于协调不同的数据和视图。
EJB的三种(BMP和CMP是从实现的角度分的,算一种)各对应着MVC模型中的一种
Entity组件对应着M,有状态Session组件对应着V,无状态Session组件对应着C。
从另一个角度上看,我觉得MVC就是EJB的模型。
4。对于EJB和CORBA我想它们没有可比性。CORBA是对象标准,它关心的是对象之间
如何互相发消息和传数据。而EJB是组件标准,它要面对的是组件如何存在,怎么
被实例化。至于实例化成什么对象,它根本就不关心。EJB和CORBA的结合将是一
个完美的结局。
5。上面的监控指的是服务器可以对EJB的各个方面进行监护和控制。例如可以随时
察看EJB的实例数量等。
 
EJB高手帮我看看这吧
<p><a href="http://www.delphibbs.com/delphibbs/DispQ.asp?LID=360804">EJB——实体Bean的引用怎么释放</a></p>
 
To: eguy
刚刚看了你上面的代码,你是用的JDK带的ORB么?我们没用过那个ORB,不过看代码
象是CORBA2.0标准的,是不是?我记得CORBA2.0是要用BOA的,上面没有用到,是不是被
封装的非标准的ORB::connect中了?最后我建议,如果可能的话,还是升级到CORBA2.2以
上吧,CORBA2.2使用POA,比BOA要灵活的多。
另外,斑竹能不能帮我看看:<p><a href="http://www.delphibbs.com/delphibbs/DispQ.asp?LID=360804">EJB——实体Bean的引用怎么释放</a></p>
 
to eguy:
<p><a herf="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=361651">这里来拿分!</a></p>
也欢迎大家都去看!这里的分继续有效!
我用Java +Visibroker4.1作了一下,生成了7个文件。
没有_HelloImplBase.java,多了两个POA,POATie。不知何解?
to JJams_King:
不懂您的问题。但好像您也做过CORBA,对我上面的胡言乱语有什么指点?
 
VisiBroker4.1是CORBA2.3标准的,使用POA,概念较多你还是先看一看VBJ的文档。
我用VBJ4.0,这两个文档一定要看:
vbj40programmers-guide.pdf
vbj40java-reference.pdf
例子:
《INSTALL PATH》/examples/basic/bank_agent
如果以前用CORBA2.0,下面例子介绍如何从BOA转到POA
《INSTALL PATH》/examples/boa/boa2poa
有什么具体问题,可以一起讨论。
 
看看这里:
<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=361651">
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=361651</a>
JJams_King :thanks!以后有具体问题再向您请教。分我一定给。
其他人都来看看谈谈啊!分有的是!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部