标签: corba

如何在Python中使用Corba

我想知道是否有人有资源在Python中使用Corba?我已经google了一下,看到有人推荐fnorb,但它不支持Corba的一些新功能.Omniorb似乎是一个很好的选择,但我不知道如何使用Python(也不是fnorb).

感谢任何建议,我之前只用Java实现了一些简单的例子,所以我对Corba的理解很少.

谢谢!

python corba

9
推荐指数
1
解决办法
1万
查看次数

Corba和SOA一样吗?

我最近一直在关注SOA.CORBA与SOA完全不一样吗?

soa corba

9
推荐指数
3
解决办法
5163
查看次数

Glassfish v3中的IIOP客户端身份验证和ProgrammaticLogin

在Glassfish v2中,我通过在ORB节点下的管理控制台中启用"IIOP客户端身份验证"复选框来保护我的JNDI查找.

在我的独立客户端中,我然后执行"ProgrammaticLogin",然后允许我进行JNDI查找.

但是,在Glassfish v3中,如果要在同一设置中执行任何JNDI查找,则会出现此错误:

18.08.2010 14:31:10 com.sun.enterprise.transaction.JavaEETransactionManagerSimplified
initDelegates INFO: Using
com.sun.enterprise.transaction.jts.JavaEETransactionManagerJTSDelegate
as the delegate
org.omg.CORBA.NO_PERMISSION:
----------BEGIN server-side stack trace----------
org.omg.CORBA.NO_PERMISSION: 
vmcid: 0x0 
minor code: 0 
completed: No 
Run Code Online (Sandbox Code Playgroud)

我非常确定"ProgrammaticLogin"通常可以正常工作,因为它允许我在我的安全EJB上进行远程方法调用(使用@RolesAllowed但如果IIOP客户端身份验证被关闭).

我登录的用户是我为"文件"领域创建的简单用户.

任何想法,为什么ProgrammticLogin无法在Glassfish v3中用于授权JNDI查找?

或者从独立客户端使用ORB进行身份验证的正确方法是什么?以此目的?

java corba glassfish

9
推荐指数
1
解决办法
1884
查看次数

如何在没有IDL或后期绑定调用远程处理方法的情况下访问CORBA接口

我们一直在使用SAP"COM许可证桥"来访问其许可证服务器并以编程方式查询系统的硬件密钥(以重用自己的许可证).这在SAP Business One版本2007A,2007B和8.8上运行良好,但是在8.81中它们似乎更新了它们的CORBA接口而没有更新COM包装器,因为我们现在在尝试调用GetHardwareKey函数时获得了内存异常.

所以我下载了IIOP.NET并开始尝试编写自己的界面.无论如何我从来都不喜欢COM包装器.但我遇到了我的旧远程.NET远程控制 - 无法在服务器和客户端都没有定义公共接口的情况下调用远程方法.我尝试使用IIOP.NET附带的IDL到CLS编译器,但我继续得到关于接口beign不兼容的错误(SAP没有提供IDL文件).我不知道IIOP和CORBA如何确定接口是否兼容.但我甚至尝试调试IIOP.NET代码并强制它执行该方法,尽管不兼容,但收到一个空字符串而不是我想要的硬件密钥.

我的下一步是尝试实现虚假的许可证服务器并检查来自生产客户端的请求,以期确定它们应该是什么样子,但考虑到我遇到的困难,我并不指望取得多大的成功.深入了解.NET远程的内容.

我真正的问题是如何获取或生成SAP Business One硬件密钥,但由此产生的问题包括:

  1. 如何反思或查询有关CORBA接口的信息?我可以使用NamingContext类的list方法来检索可用对象的列表,但是我不知道是否有办法查询对象上的可用方法.
  2. 我可以在没有接口的情况下动态调用.NET远程处理方法吗?我看到有一种叫做DII的东西用于动态调用CORBA,但是我没有看到如何在IIOP.NET中使用它.
  3. 我可以仅使用委托或不完整的接口来调用.NET远程处理方法吗?我尝试使用dynamic关键字,但它无法在我的MarshalByRef远程对象上调用方法...我认为它说我的MarshalByRef实例上没有这个方法.我只是通过IIOP.NET尝试过这个(我想知道它是否适用于普通的.NET远程处理).
  4. 如何在.NET远程处理框架中创建或检查Message实例?
  5. 我可以直接发送或检索远程处理消息,绕过底层代理吗?

编辑:我设法通过应用RepositoryID属性使IIOP.NET/CORBA相信我有一个兼容的接口:

[Ch.Elca.Iiop.Idl.InterfaceType(Ch.Elca.Iiop.Idl.IdlTypeInterface.ConcreteInterface)]
[Ch.Elca.Iiop.Idl.RepositoryID("IDL:LicenseInfo:1.0")]
public interface ILicenseInfo : Ch.Elca.Iiop.Idl.IIdlEntity
{
    void GetHardwareKey(out string hwKey);
}
Run Code Online (Sandbox Code Playgroud)

但我仍然得到一个空字符串结果.

编辑2:经过一些实验和调试之后,我发现响应消息确实包含了我正在寻找的数据,但是没有正确地解析成客户端值,可能是因为我的接口定义不好.希望进一步调试响应处理将帮助我弄清楚如何纠正我的界面.奇怪的是,它从响应中解析的第一件事是一个空的盒装值,这似乎不适合"out string"参数.

编辑3:我发现我需要将字符串属性应用于这样的参数,以防止它们被视为盒装值:

void GetHardwareKey([StringValue(), WideChar(true)] out string hwKey);
Run Code Online (Sandbox Code Playgroud)

但是,尽管有WideChar属性,我对CodeSet不支持WChar或其他东西的错误.我已经非常接近搞清楚了.

编辑4:我对如何为WChar设置代码集感到困惑.如果我没有设置它,我收到一个错误:"未指定或不支持WChar代码集." 因为服务器返回了一个unicode字符串而没有覆盖默认字符集.我找不到任何方法来覆盖客户端.我试着打电话:

omg.org.CORBA.OrbServices.GetSingleton().OverrideDefaultCharSets(
    CharSet.UTF8, WCharSet.UTF16);
Run Code Online (Sandbox Code Playgroud)

但这似乎对客户端没有任何影响.示例代码显示在服务器端调用它.但我没有写服务器,所以我无法控制它.我唯一的选择是为了我自己的目的重写IIOP.NET代码,强制默认的WChar CodeSet生效?

.net c# remoting corba iiop

9
推荐指数
1
解决办法
7755
查看次数

通过远程EJB返回实体会导致在com.sun.corba.ee.impl.orbutil.ClassInfoCache $ ClassInfo中生成 - java.lang.NullPointerException.<init>

我正在尝试在以下环境中创建企业Web应用程序.

  • NetBeans 7.2.1
  • Glassfish Server 3.1.2(包含Servlet 3.0 API)
  • EJB 3.1
  • JPA 2.0
  • JSF 2.1
  • jdk 1.7
  • Oracle 10g

我创建了一个类库(New Project - > Java - > Java Class Library)来放置remote(javax.ejb.Remote)接口,该接口由无状态会话bean实现.类库已添加到两个模块(EJB和WAR)的类路径中.

我已将远程接口和所有实体类放在类库中(我不知道这是方法).

这适用于带注释的接口@Local.@Remote当我尝试返回实体的对象列表时,当JPA涉及时,它甚至可以使用但失败并出现以下异常.

java.rmi.MarshalException:CORBA MARSHAL 1330446347也许; 嵌套异常是:org.omg.CORBA.MARSHAL:警告:IOP00810011:CDRInputStream中的ValueHandler上的readValue异常vmcid:OMG次代码:11完成:也许

完整的堆栈跟踪.

javax.ejb.EJBException: java.rmi.MarshalException: CORBA MARSHAL 1330446347 Maybe; nested exception is: 
    org.omg.CORBA.MARSHAL: WARNING: IOP00810011: Exception from readValue on ValueHandler in CDRInputStream  vmcid: OMG  minor code: 11 completed: Maybe
    at remote.admin.sessionbeans._AdminRemoteSessionBeanRemote_Wrapper.getZones(remote/admin/sessionbeans/_AdminRemoteSessionBeanRemote_Wrapper.java)
    at managedbeans.ZoneBean.getZones(ZoneBean.java:27)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) …
Run Code Online (Sandbox Code Playgroud)

ejb corba glassfish java-ee

9
推荐指数
1
解决办法
1万
查看次数

无法从org.omg.CORBA.TRANSIENT恢复(成为永久性)

我想确保我的CORBA客户端能够适应中断,我让客户端工作,并通过Windows中的网络适配器禁用来测试弹性.CORBA连接显然失败,并且功能不可用,但是当再次启用适配器时它不会恢复.ORB.init再次调用,但我继续得到相同的错误.

似乎在org.omg.CORBA.TRANSIENT抛出后会保留一些静态状态,导致客户端报告网络连接超时,即使问题已完全解决.只有重新启动进程(dropwizard runnable JAR)才能让客户端再次运行.

这是启动ORB的代码:

String[] orbInits = {"-ORBInitRef", orbInitRef};
Properties properties = new Properties() {
    {
        setProperty("org.omg.CORBA.ORBClass", orbClass);
        setProperty("org.omg.CORBA.ORBSingletonClass", orbSingletonClass);
        setProperty("jacorb.connection.client.connect_timeout", "" + connectionTimeout);
    }
};
return ORB.init(orbInits, properties);
Run Code Online (Sandbox Code Playgroud)

即使应用程序在每次尝试执行操作时调用ORB.init(即关闭ORB池),问题仍然存在.

客户端在中断场景中抛出的错误包括:

org.omg.CORBA.TIMEOUT: connection timeout of 2000 milliseconds expired
org.omg.CORBA.TRANSIENT: Retries exceeded, couldn't reconnect to <IP>:<PORT>
Run Code Online (Sandbox Code Playgroud)

在至少一个(可能是所有)情况下,在org.omg.CORBA.TRANSIENT成为永久性之前没有org.omg.CORBA.TIMEOUT (即TIMEOUT可能是对数噪声).

显然,因为客户端也是一个服务器,我们宁愿不必在每次中断后重新启动它(并且它们确实发生了,特别是在开发环境中).

实现是JACORB(org.jacorb.orb.ORB/org.jacorb.orb.ORBSingleton)版本2.2.4.

java corba

9
推荐指数
1
解决办法
3182
查看次数

等待分离的线程在C++中完成

我怎么能等待分离的线程在C++中完成?

我不关心退出状态,我只是想知道线程是否已经完成.

我正在尝试围绕异步的第三方工具提供同步包装器.问题是涉及回调的奇怪的竞争状态崩溃.进展如下:

  1. 我打电话给第三方,并注册一个回调
  2. 当第三方完成时,它通知我使用回调 - 在一个分离的线程中,我没有真正的控制权.
  3. 我希望(1)中的线程等到(2)被调用.

我想在一个提供阻塞调用的机制中包装它.到目前为止,我有:

class Wait {
  public:
  void callback() {
    pthread_mutex_lock(&m_mutex);
    m_done = true;
    pthread_cond_broadcast(&m_cond);
    pthread_mutex_unlock(&m_mutex);
  }

  void wait() {
    pthread_mutex_lock(&m_mutex);
    while (!m_done) {
      pthread_cond_wait(&m_cond, &m_mutex);
    }
    pthread_mutex_unlock(&m_mutex);
  }

  private:
  pthread_mutex_t m_mutex;
  pthread_cond_t  m_cond;
  bool            m_done;
};

// elsewhere...
Wait waiter;
thirdparty_utility(&waiter);
waiter.wait();
Run Code Online (Sandbox Code Playgroud)

据我所知,这应该有效,而且通常会有效,但有时它会崩溃.至于我可以从corefile中确定,我对这个问题的猜测是这样的:

  1. 当回调广播m_done的结束时,等待线程唤醒
  2. 等待线程现在在这里完成,Wait被破坏.Wait的所有成员都被销毁,包括互斥锁和cond.
  3. 回调线程尝试从广播点继续,但现在使用已释放的内存,这会导致内存损坏.
  4. 当回调线程试图返回时(高于我糟糕的回调方法的级别),程序崩溃(通常使用SIGSEGV,但我已经看过几次SIGILL).

我尝试了很多不同的机制来尝试解决这个问题,但没有一个能解决问题.我仍然偶尔看到崩溃.

编辑:更多细节:

这是大规模多线程应用程序的一部分,因此创建静态等待是不切实际的.

我运行了一个测试,在堆上创建Wait,并故意泄漏内存(即Wait对象永远不会被释放),这导致没有崩溃.所以我确定这是等待太快解除分配的问题.

我也尝试过sleep(5)在解锁后进行测试wait,并且也没有发生崩溃.我讨厌依靠这样的kludge.

编辑:ThirdParty详细信息:

我一开始并不认为这是相关的,但我想的越多,我认为这就是真正的问题:

我提到的第三方的东西,以及为什么我无法控制线程:这是使用CORBA.

因此,CORBA可能会比我预期的更长时间地保持对对象的引用.

c++ multithreading corba pthreads

8
推荐指数
1
解决办法
4447
查看次数

RMI和CORBA的差异?

我正在学习决赛,并且有一些关于RMI和CORBA的问题.这些是从学习指南中获取的讨论问题,因此没有真正的应用背景.

  1. 为什么RMI和CORBA基于TCP?问题表明要根据调用语义来回答.

到目前为止我所想到的是TCP将比UDP更可靠,而在RMI/CORBA中,我们需要网络可靠性.我还读到了TCP深深嵌入本机Java网络类的地方.我对此声明没有信心,因为CORBA可以用任何语言实现.

  1. 讨论RMI和CORBA名称服务之间的区别.

我对这个问题有点困惑,因为我到目前为止所读到的是RMI和CORBA是融合技术,RMI可以访问CORBA对象.我现在如何理解,名称服务似乎非常相似,任何差异都不值得注意.

  1. 为什么RMI需要显式动态调用而不像CORBA?

我没想出任何东西.

我意识到我问了三个不同的问题,但它们似乎都有关系.

java corba rmi

8
推荐指数
1
解决办法
3502
查看次数

在客户端查找本机java CORBA的超时属性

我使用的是原生Java附带的CORBA(ORB),没有使用第三方库.

我需要CORBA客户端属性超时,以便在客户端设置超时并限制连接保持打开的时间; 应该为所有场景设置,以限制最大请求时间:

  • 初始化连接

  • 重新绑定连接

  • 总请求时间

我正在测试通过在服务器上休眠(在服务器方法逻辑内),并且客户端根本没有超时.

在网上找到适当的文件非常困难; 我试图使用以下所有属性,但无济于事:

aProperties.put("com.sun.CORBA.transport.ORBTCPReadTimeouts","100:300:3000:20"); aProperties.put("com.sun.corba.eetransport.ORBTCPTimeouts","500:2000:50:1000"); aProperties.put("com.sun.corba.ee.transport.ORBWaitForResponseTimeout",10);

为了更清楚,在这些属性(上面)旁边使用属性org.omg.CORBA.ORBInitialHostorg.omg.CORBA.ORBInitialPort设置主机和端口.

任何帮助表示赞赏:)

java timeout corba properties

8
推荐指数
2
解决办法
6707
查看次数

gRPC和CORBA有什么区别?

我在开发SOAP和REST Web服务(在java平台中)方面有着丰富的经验.我试图理解gRPC和CORBA在各个方面的区别,除了它们都能在分布式环境中实现平台中立的通信方式.无论如何,这两个概念的目标/目的在哪里以及如何不同?

提前致谢.

rpc corba grpc

8
推荐指数
2
解决办法
2491
查看次数

标签 统计

corba ×10

java ×4

glassfish ×2

.net ×1

c# ×1

c++ ×1

ejb ×1

grpc ×1

iiop ×1

java-ee ×1

multithreading ×1

properties ×1

pthreads ×1

python ×1

remoting ×1

rmi ×1

rpc ×1

soa ×1

timeout ×1