Java程序调用OpenDDS
一、前言
前面我們用三篇博客介紹了
-
OpenDDS在WIndows上的環境配置
Windows下的OpenDDS編譯(超詳細)_山中野竹的博客-CSDN博客_opendds windows
-
三種方式運行發布訂閱示例程序
OpenDDS運行示例(Messenger)程序_山中野竹的博客-CSDN博客
-
創建自己的發布訂閱程序
OpenDDS 創建自己的發布訂閱程序_山中野竹的博客-CSDN博客
但上述都是OpenDDS自己的一個操作,那么如何在Java里面調用OpenDDS呢?
接下來介紹一下,如何使用Java來調用OpenDDS程序,介紹其準備工作和實例。
-
首先,你的OpenDDS配置環境要能支持Java,因此之前的環境配置則不能滿足,需要重新配置
有了上述配置環境的基礎,配置Java支持的環境就簡單很多了,直接參考下面這篇博客OpenDDS配置Java運行環境_山中野竹的博客-CSDN博客
-
通過一個實例,在IDEA開發工具上,進行Java調用OpenDDS服務
二、實例演示
調用過程主要分為以下幾步
-
生成要調用的發布訂閱的 java程序和jar包文件
-
將 相應的jar包上傳到本地maven倉庫,并在Java項目中引用該Jar包
-
將生成的 Java程序放在項目中,并調用程序實現發布訂閱服務
1. 生成 要調用的java相關文件
這一步和前面介紹過 創建自己的發布訂閱程序有點像,因此就簡要介紹了。主要步驟為:
-
創建一個 messenger文件夾,創建一個 UserMessenger.idl 文件
-
在cmd命令行窗口,在messenger路徑下執行命令生成 UserManager_Export.h 文件
??
-
創建 UserManager.mpc 文件
-
cmd命令窗口,在該路徑下,使用mwc命令編譯 mpc文件
-
使用vc++ 編譯 messenger.sln文件,先在vc++中打開文件,選擇自己的運行環境(32位或者64位)然后生成解決方案即可
基本上配置完Java的環境都是64位的。
得到我們需要的 UserMessenger.jar包文件
生成成功后,檢查生成Jar包文件是否完整,檢查生成文件中“classes-UserManager”文件夾下是否有UserTypeSupportImpl.class,即類型支持實現類文件
如果沒有該文件,后期Java調用Jar包會有問題,為防止此問題,再使用VS對?Messenger.sln編譯一下即可。
第二步第三步參考了以下兩篇博客,大家可以先學習一下
OpenDDS Java開發(一):理解Messenger示例_hbyangland的博客-CSDN博客_java opendds
OpenDDS Java開發(二):根據IDL進行代碼生成_hbyangland的博客-CSDN博客_idl 代碼生成
2. 上傳 jar包文件到倉庫,并在項目中引用
在項目創建libs文件夾,并添加jar包文件,前三個jar是在OpenDDS/lib文件夾中,第四個是第一步生成的,根據業務需要確定第四個
第一次執行示例時,第四個jar包請采用OpenDDS自帶的項目Jar包,jar包為messenger_idl_test.jar,jar包位置在:\OpenDDS\java\tests\messenger\messenger_idl?
然后將jar包上傳到maven倉庫,使用cmd命令進行上傳
// 上傳格式 mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging> // 格式說明 <path-to-file>: 要安裝的JAR的本地路徑 ./libs/json-simple-1.1.1.jar <group-id>:要安裝的JAR的Group Id <artifact-id>: 要安裝的JAR的 Artificial Id <version>: JAR 版本 <packaging>: 打包類型,例如JAR // 上傳案例 mvn install:install-file –Dfile=E:\Software\Work\OpenDDS\OpenDDS-3.10\java\tests\messenger\messenger_idl\messenger_idl_test.jar -DgroupId=com.dds.messenger -DartifactId=dds-messenger -Dversion=1.0 -Dpackaging=JAR在maven倉庫檢查是否上傳成功
倉庫位置C:\Users\admin.m2\repository
上傳成功后,在項目中設置pom文件, ?
// 添加jar包依賴(第一個依賴根據自己需要jar包更換)<dependency><groupId>com.dds.messengerAll</groupId><artifactId>dds-messengerAll</artifactId><version>1.0</version><scope>system</scope><systemPath>${basedir}/src/libs/UserManager.jar</systemPath></dependency><dependency><groupId>com.dds.OpenDDS_DCPS</groupId><artifactId>dds-OpenDDS_DCPS</artifactId><version>1.0</version><scope>system</scope><systemPath>${basedir}/src/libs/OpenDDS_DCPS.jar</systemPath></dependency><dependency><groupId>com.dds.tao_java</groupId><artifactId>dds-tao_java</artifactId><version>1.0</version><scope>system</scope><systemPath>${basedir}/src/libs/tao_java.jar</systemPath></dependency><dependency><groupId>com.dds.i2jrt</groupId><artifactId>dds-i2jrt</artifactId><version>1.0</version><scope>system</scope><systemPath>${basedir}/src/libs/i2jrt.jar</systemPath></dependency>// 因為idea的默認配置文件都是放在src/main/resources目錄下,如果想要編譯src/libs目錄下的jar包,要在pom的build里配置resource<resources><resource><!-- directory 表示取該目錄下的文件 --><directory>src/libs</directory><!--targetPath 指定打包到哪個目錄下 默認是放到class目錄下--><targetPath>/BOOT-INF/lib/</targetPath><!-- 取符合格式的所有文件 *代表全部 --><includes><include>**/*.jar</include></includes></resource><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><resource><directory>src/main/resources</directory></resource></resources>// 準備工作完成3.將生成的 Java程序放在項目中,并調用程序實現發布訂閱服務
使用OpenDDS自帶的java文件
\OpenDDS-3.10\java\tests\messenger\publisher下的TestPublisher.java
\OpenDDS-3.10\java\tests\messenger\subscriber下的TestSubscriber.java和DataReaderListenerImpl.java
將文件放進項目中,然后調用文件執行發布訂閱
?平臺執行發布訂閱需要給定發布訂閱啟動參數
// 在發布訂閱執行前,先定義字符串數組,后期要用 String[] ARGS = {"-DCPSBit","0","-DCPSConfigFile","C:\\Users\\lwy\\Desktop\\ddsexample\\demo-java\\messenger\\rtps.ini"};// 注意最后一項是發布訂閱的方式的配置文件路徑,可以選用點對點方式,或者倉庫方式 // 點對點方式,最后一項選擇本地點對點配置文件,配置文件內容如下: // 文件格式為.ini [common] DCPSGlobalTransportConfig=$file DCPSDefaultDiscovery=DEFAULT_RTPS[transport/the_rtps_transport] transport_type=rtps_udp// 倉庫方式,最后一項選擇本地倉庫配置文件,配置文件內容如下: // 其中第一項是你的倉庫repo文件路徑,注意file://+路徑 // 文件格式為.ini [common] DCPSInfoRepo=file://E:\Software\Work\OpenDDS\OpenDDS-3.10\java\tests\messenger\repo.ior DCPSGlobalTransportConfig=$file[transport/1] transport_type=tcp然后分別調用發布和訂閱函數(只寫了業務邏輯,前后端如何調用大家自行編寫)
先調用訂閱
// 注入訂閱類 @Resource private TestSubscriber testSubscriber;// 訂閱 testPublisher.publish(ARGS);調用發布
// 注入發布類 @Resource private TestPublisher testPublisher;// 發布 testSubscriber.subscribe(ARGS);然后進行項目打包,通過項目中的maven-lifecycle-package,雙擊進行項目打包,
打包完成后,開始部署項目,測試發布訂閱。在項目打包好的jar路徑下執行命令行命令
運行命令如下:命令行中兩個路徑分別是opendds/lib路徑和自己jar包位置路徑
// 使用點對點方式,在項目jar文件路徑下,使用命令行運行 java -ea -Dopendds.native.debug=true -Djava.library.path=E:\Software\Work\OpenDDS\OpenDDS-3.10\lib;C:\Users\lwy\Desktop\ddsexample\0830ceshi\Messenger -jar XXX.jar // 使用倉庫方式 // 首先,在一個cmd窗口開啟倉庫,該窗口執行路徑在對應的倉庫配置文件和repo.ior文件路徑下 DCPSInfoRepo -o // 然后第二個窗口,項目jar文件路徑下,執行如下命令 java -ea -Dopendds.native.debug=true -Djava.library.path=E:\Software\Work\OpenDDS\OpenDDS-3.10\lib;C:\Users\lwy\Desktop\ddsexample\0830ceshi\Messenger -jar XXX.jar!!!! 記錄自己的一個小問題
在新電腦上集成DDS程序,集成好跑程序時,顯示找不到自定義的jar包,此時自定義的jar包我拷貝到一個路徑上了,卻顯示找不到,于是在新電腦上重新生成了該jar包(前面生成jar包的步驟,在新電腦上來了一遍!),之后就能跑通程序了。? 也不知道是不是這個問題,衰
出了問題就是根據報錯,去猜想,去試,去問,去查!? ?共勉!
自己的一點實踐,內容較多,細節不易一一展示,希望能幫到大家!
點個贊吧
總結
以上是生活随笔為你收集整理的Java程序调用OpenDDS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NSString 中包含中文字符时转换为
- 下一篇: iOS学习之iOS沙盒(sandbox)