目录
三.接收消息:TestSubscriber & DataReaderListenerImpl
一.准备
首先需要安装好OpenDDS并开启Java支持:Windows下OpenDDS安装
然后在IDEA创建空项目
Java开发OpenDDS需要以下jar包:
其中 messenger_idl_test.jar 是自带示例的包,并不是必需的,这里因为基于示例进行修改,所以还是要引入
引入方法:
File菜单 - Project Structure -Libraries - 点击"+"号 - Java ,然后定位到 %DDS_ROOT%\lib,选中三个jar包,messenger_idl_test.jar同理
注:由于OpenDDS需要CORBA,而Java 9开始移除了CORBA,所以请在Java 8环境下开发,或者引入1.8版本的rt.jar
然后去%DDS_ROOT%\java\tests\messenger下,将publisher和subscriber两个目录下的TestPublisher、TestSubscriber、DataReaderListenerImpl三个java文件复制到IDEA项目的src目录下:
二.发送消息:TestPublisher
DomainParticipantFactory dpf =
TheParticipantFactory.WithArgs(new StringSeqHolder(args));
DomainParticipant dp = dpf.create_participant(4,
PARTICIPANT_QOS_DEFAULT.get(), null, DEFAULT_STATUS_MASK.value);
第一行用来创建域参与者工厂,需要读取参数(实际上就是读取repo.ior文件)
第二行是创建具体的域参与者,create_participant方法的定义(实际在DomainParticipantFactoryImpl.cpp文件中)为:
DDS::DomainParticipant_ptr
DomainParticipantFactoryImpl::create_participant(
DDS::DomainId_t domainId,
const DDS::DomainParticipantQos & qos,
DDS::DomainParticipantListener_ptr a_listener,
DDS::StatusMask mask)
{
DDS::DomainParticipantQos par_qos = qos;
if (par_qos == PARTICIPANT_QOS_DEFAULT) {
get_default_participant_qos(par_qos);
}
if (!Qos_Helper::valid(par_qos)) {
ACE_ERROR((LM_ERROR,
ACE_TEXT("(%P|%t) ERROR: ")
ACE_TEXT("DomainParticipantFactoryImpl::create_participant, ")
ACE_TEXT("invalid qos.\n")));
return DDS::DomainParticipant::_nil();
}
if (!Qos_Helper::consistent(par_qos)) {
ACE_ERROR((LM_