python通过omniORBpy调用CORBA

omniORB参考地址:

omniORB

omniORB - Browse Files at SourceForge.net

omniORB - Browse /omniORBpy/omniORBpy-4.3.0 at SourceForge.net

Windows

普通使用好像不需要安装omniorb。就对接北向接口业务需要使用python3.10的windows包,但目前好像没有python3.10的包,因此对接北向接口建议在linux上运行。

pip install omniorb==4.2.3

只下载不安装python -m pip download -d ./ omniorb==4.2.3

python -m pip download -d ./ omniorb

找到指定模块包进行安装python -m pip install --no-index --find-links=./ omniorb==4.2.3

需要网络安装python -m pip install --find-links=./ omniorb==4.2.3

或者网页下载:Links for omniorb

yum reinstall --downloadonly --downloaddir=/tmp/ bzip2

下载解压omniORBpy-4.3.0-win64-python310.zip

注意:需要使用3.10版本的python环境

环境变量配置

PATH添加E:\2022software\omniORBpy-4.3.0\bin\x86_win32 # 命令行下直接运行omniORBpy提供的命令(如编译IDL文件的omniidl和命名服务的omniNames等)

创建PYTHONPATH添加E:\2022software\omniORBpy-4.3.0\bin\x86_win32;E:\2022software\omniORBpy-4.3.0\lib\python;E:\2022software\omniORBpy-4.3.0\lib\x86_win32 # 使python可以搜索到omniORBpy提供的CORBA编程模块

创建OMNINAMES_DATADIR添加E:\2022software\omniORBpy-4.3.0\data # 指定命名服务的数据存储目录

创建LD_LIBRARY_PATH添加E:\2022software\omniORBpy-4.3.0\lib\x86_win32 # 找到omniORB核心库

两种定位分布式对象的方式:

1,使用IOR定位

2,使用命名服务定位(推荐)

使用命名服务需要注册表中添加信息

HKEY_LOCAL_MACHINE\SOFTWARE\omniORB下创建InitRef字符串,并赋值NameService=corbaname::localhost

好像不不需要注册表添加信息

启动方式

命名服务数据文件不存在时omniNames.exe -start

命名服务数据文件存在时omniNames.exe

查看omniNames监听端口并配置代码进行连接

windows上对接北向接口问题,均为解决,转用linux上的包并部署得以解决:

    import _omnipy

ImportError: Module use of python310.dll conflicts with this version of Python.

    import _omnipy

ImportError: DLL load failed while importing _omnipy: 找不到指定的模块。

2

Linux

只能在root用户下启动Naming Service命名服务,然后让程序来使用。

192.168.124.92

说明:omniORB的安装是否成功和gcc和omniORBpy和python3.10都无关

1,安装配置omniORB

cd /home

tar -xvf omniORB-4.3.0.tar.bz2

mkdir /home/omniORB-4.3.0/build

mkdir /home/myomniORB

cd /home/omniORB-4.3.0/build

../configure --prefix=/home/myomniORB # 选择安装目录,默认/usr/local

../configure PYTHON=/usr/local/bin/python3 # 指定python(查看所有路径whereis pyton,查看当前使用的路径which python)

make # 编译(时间较久)

make install # 安装

make遇到问题:Python.h:没有那个文件或目录

参考:

【已解决】致命错误:Python.h:没有那个文件或目录-CSDN博客

linux yum 离线安装rpm包(转) - 走看看

离线下载yum re/install --downloadonly --downloaddir=./ python3-devel

离线安装rpm -Uvh --force --nodeps *.rpm

不好使

没有权限:sudo chmod -R 777 /usr/local/bin/python3

不好使

不指定PYTHON

好使

2,安装配置omniORBpy

cd /home

tar -xvf omniORBpy-4.3.0.tar.bz2

mkdir /home/omniORBpy-4.3.0/build

mkdir /home/myomniORBpy

cd /home/omniORBpy-4.3.0/build

../configure --prefix=/home/myomniORBpy --with-omniorb=/home/myomniORB

../configure PYTHON=/usr/local/bin/python3 # 指定python(查看所有路径whereis pyton,查看当前使用的路径which python)

# 选择安装目录,默认/usr/local

make

make install

make遇到问题:configure: error: You must specify the omniORB root directory.

需要指定omni ORB的安装目录,使用../configure -h查看所有参数,发现--with-omniorb参数,配置该参数即可。

系统中配置环境变量

vim ~/.bashrc

export PYTHONPATH=/home/omniORB-4.3.0/bin:/home/myomniORB/lib/python3.7/site-packages:/home/myomniORBpy/lib/python3.7/site-packages

export LD_LIBRARY_PATH=/home/myomniORB/lib:/home/myomniORBpy/lib

export OMNINAMES_DATADIR=/home/myomniORB/omninames

3,测试

python3

>>>import CORBA # 不报错说明成功

若报错,查看/home/myomniORB/lib是否存在python3.7目录,若不存在,使用which python查看默认python环境,若不是指向python3.7,则修改/usr/bin/python软连接指向python3.7后重新安装。

4,其他命令

更新pip:

python3 -m pip install --upgrade pip

或conda install mingw libpython

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java调用corba接口的流程和代码实例如下: 1. 定义IDL文件 在IDL文件中定义接口和数据类型。例如: ``` module Example { interface Calculator { float add(in float a, in float b); float subtract(in float a, in float b); float multiply(in float a, in float b); float divide(in float a, in float b); }; }; ``` 2. 编译IDL文件 使用IDL编译器将IDL文件转换为Java代码和C++代码。例如: ``` idlj -fall Example.idl ``` 3. 实现服务端 实现IDL中定义的接口,提供服务。例如: ``` public class CalculatorImpl extends Example.CalculatorPOA { public float add(float a, float b) { return a + b; } public float subtract(float a, float b) { return a - b; } public float multiply(float a, float b) { return a * b; } public float divide(float a, float b) { if (b == 0) { throw new Example.DivisionByZero(); } return a / b; } } ``` 4. 启动服务端 将服务端启动起来,等待客户端调用。例如: ``` public static void main(String[] args) { try { ORB orb = ORB.init(args, null); POA rootPOA = POAHelper.narrow(orb.resolve_initial_references("RootPOA")); rootPOA.the_POAManager().activate(); CalculatorImpl calculatorImpl = new CalculatorImpl(); org.omg.CORBA.Object ref = rootPOA.servant_to_reference(calculatorImpl); Example.Calculator calculator = Example.CalculatorHelper.narrow(ref); orb.run(); } catch (Exception e) { e.printStackTrace(); } } ``` 5. 实现客户端 使用IDL生成的Java代码调用服务端接口。例如: ``` public static void main(String[] args) { try { ORB orb = ORB.init(args, null); org.omg.CORBA.Object objRef = orb.string_to_object("corbaname::localhost:1050#Calculator"); Example.Calculator calculator = Example.CalculatorHelper.narrow(objRef); float result = calculator.add(1.0f, 2.0f); System.out.println("Result: " + result); } catch (Exception e) { e.printStackTrace(); } } ``` 以上就是Java调用corba接口的流程和代码实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值