我正在学习决赛,并且有一些关于RMI和CORBA的问题.这些是从学习指南中获取的讨论问题,因此没有真正的应用背景.
到目前为止我所想到的是TCP将比UDP更可靠,而在RMI/CORBA中,我们需要网络可靠性.我还读到了TCP深深嵌入本机Java网络类的地方.我对此声明没有信心,因为CORBA可以用任何语言实现.
我对这个问题有点困惑,因为我到目前为止所读到的是RMI和CORBA是融合技术,RMI可以访问CORBA对象.我现在如何理解,名称服务似乎非常相似,任何差异都不值得注意.
我没想出任何东西.
我意识到我问了三个不同的问题,但它们似乎都有关系.
我在开发SOAP和REST Web服务(在java平台中)方面有着丰富的经验.我试图理解gRPC和CORBA在各个方面的区别,除了它们都能在分布式环境中实现平台中立的通信方式.无论如何,这两个概念的目标/目的在哪里以及如何不同?
提前致谢.
我有一个用Java编写的客户端 - 服务器应用程序,使用CORBA进行通信.使用的ORB是orbd,Java6平台提供的ORBd.我必须用另一个用C++编写的实现替换Java服务器实现.那么问题是,在CORBA库的自由源实现中,哪个更好地与这个ORB互操作?我应该替换Java ORB还使用C++库提供的ORB吗?
目标是在使用新的C++实现替换已经运行的服务器时,可以轻松平滑地进行转换.还有什么我应该考虑的吗?
我正在使用大型遗留C++代码库,其中包含许多IDL文件,这些文件具有在任何模块之外声明的所有类型和常量.
对于C++,这会导致代码生成到全局命名空间 - 丑陋但可以接受.
现在我正在尝试添加Java客户端以通过CORBA进行连接.但是,对于Java,从IDL生成的类型(使用适用于java的Sun/Oracle IDL编译器:idlj)位于java 默认包中,因为它们不在IDL模块中.这会导致Java编译错误,因为从默认包导入是非法的.
我正在寻找解决问题的最简单方法.
我考虑过以下几点:
我发现如果没有包含所有类型的现有模块,很难相信没有简单的方法强制IDL在Java包中.我希望我只是错过了显而易见的事!
编辑:
例:
Foo.idl
struct Foo
{
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
Foo.java :( 注意没有指定包,这意味着默认包):
public final class Foo implements org.omg.CORBA.portable.IDLEntity
{
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
ClassUsesFoo.java:
package com.sigh;
import Foo; // <-- this is an error
public class ClassUsesFoo
{
private Foo f;
};
Run Code Online (Sandbox Code Playgroud) 这是我的代码段的一部分
WorkspaceConnector connector = null;
WorkspaceFactory workspaceFactory = null;
String variableListString = null;
Properties sasServerProperties = new Properties();
sasServerProperties.put("host", host);
sasServerProperties.put("port", port);
sasServerProperties.put("userName", userName);
sasServerProperties.put("password", password);
Properties[] sasServerPropertiesList = { sasServerProperties };
workspaceFactory = new WorkspaceFactory(sasServerPropertiesList, null, logWriter);
connector = workspaceFactory.getWorkspaceConnector(0L);
IWorkspace sasWorkspace = connector.getWorkspace();
ILanguageService sasLanguage = sasWorkspace.LanguageService();
//send variable list string
//continued
Run Code Online (Sandbox Code Playgroud)
我需要通过IOM桥将"variableListString"发送到SAS服务器.Java SAS API没有给出明确的方法.使用CORBA和JDBC是最好的方法吗?给我一个提示如何做到这一点.有没有其他方法可以做到?
我正在为一个新的硬件设备编写软件,我希望任何一种新的第三方应用程序能够访问它们.
该软件将是一个本机进程(C++),应由第三方游戏和想要支持硬件设备的应用程序进行调查.这些第三方应用程序还应该能够在订阅的基础上从本机进程接收事件.因此,除了原生流程之外,我还将为第三方开发人员提供"连接器"库,以便他们可以选择的所有平台/语言(Java,C++,Python等)嵌入到他们的应用程序中,以便他们可以轻松连接几乎没有任何额外的代码需要由他们写的设备.我想针对所有台式机/笔记本电脑操作系统平台,并且非常了解我想要公开的功能,但理想情况下我不想太过困难(即我希望它能够从客户端和服务器中优雅地扩展观点).
我正在寻求未来的可靠性,性能,可维护性以及未来的跨平台/语言灵活性,以及按顺序开发的简易性.
我该怎么用?
CORBA,MessagePack-RPC,Thrift还是完全不同的东西?
(因为它的许可,我省略了ICE)
我正在尝试评估一些技术,以实现一些Ada模块与一些C++/OpenGL模块之间的通信过程.有一个(Windows XP)Ada应用程序使用COM与C++应用程序通信,但我打算将COM切换到新技术.提出了一些建议,例如直接套接字,DSA,Polyorb,Corba和DSS/Opensplice.
我个人喜欢COM,但由于迁移,我宁愿采用套接字选项,因为它简单,接口架构可以非常容易地实现.
那你觉得呢?您能否对这些技术发表评论,甚至建议其他更多?
非常感谢.
我需要将传统CORBA系统迁移到任何最新的Java技术.我面临的主要问题是在所提出的系统中提供长期事务(db).目前,客户端(Swing App)保留CORBA服务对象并在实际提交/回滚所有txn之前执行多个db txn.服务层通过out保持连接对象的状态以完成事务.
我想在我的新系统(REST/WS)中重现这种机制,以便Swing客户端/ Web(未来)可以像现在一样工作.
例如:
try {
service1.updateXXData(); // --> insert in to table XX
service2.updateUUData() //--> insert in to table UU
service1.updateZZData(); // --> insert in to table ZZ
service2.updateAAData(); // --> insert in to table AA
service1.commit(); // con.commmit();
service2.commit(); // con.commmit();
}
exception(){
service1.rollback(); // con.rollback();
service2.rollback(); // con.rollback();
}
Run Code Online (Sandbox Code Playgroud)
现在我想将CORBA迁移到任何现代技术,但我仍然逍遥法外,为此寻找解决方案.(关注的是客户端不希望对服务层或数据库层进行任何更改),他们只是想删除CORBA.
我可以选择几种
将CORBA迁移到RMI - >以便当前系统所需的更改最小化,但事务管理,连接池,保留状态需要自行完成.
将CORBA迁移到有状态EJB - >比较RMI所需的更多更改,但更好,因为我可以使用容器管理的连接池,以更好的方式维护状态.
将CORBA迁移到有状态Web服务(SOAP) - >更具未来感,但需要进行大量更改 - 我怎样才能将IDL转换为WSDL,并将调用委托给实现层
将CORBA迁移到REST - >如果可能,最需要 - 但迁移所需的时间很长,从UI层到服务层需要进行代码更改.
非常感谢你提前
我正在考虑从通过 CORBA 调用与 C++ 交互的 Java servlet 转移到 NodeJS 后端,但我只发现了两个不完整的项目来在 Nodejs 上实现 CORBA。NodeJS 架构是否存在某些使其与 CORBA RPC 不兼容的问题?如果没有,是否有一些资源可以帮助您在 NodeJS 中开始使用 CORBA?