Не удается получить доступ к службе OSGI, предоставляемой в Rifidi Edge Server (промежуточное ПО RFID)

Я установил пограничный сервер Rifidi (промежуточное программное обеспечение RFID с открытым исходным кодом предоставляет услуги в виде пакетов osgi) на Windows7 и пытаюсь разработать Java-приложение для подключения и связи с пограничным сервером Rifidi. Я пробовал двумя способами: во-первых, из приложения, внешнего по отношению к серверу Rifidi Edge, а во-вторых, из пакета OSGi, внутреннего для сервера края rifidi, по ссылке http://wiki.rifidi.net/index.php?title=EdgeServerJMS , я сталкиваюсь со следующими проблемами в обоих случаях.

1) От внешнего приложения к пограничному серверу Rfifid

Код rifidi.xml:

 <bean id="connectionFactory"  class="org.apache.activemq.spring.ActiveMQConnectionFactory">
        <property name ="brokerURL" value="tcp://localhost:1099"/>
        <property name="useAsyncSend" value="true"/>
     </bean>

  <bean id="topic" class="org.apache.activemq.command.ActiveMQTopic">
        <constructor-arg value="org.rifidi.edge.external.tags"/>
    </bean>

и код java-файла

   Connection connection;

   ApplicationContext ctx = new ClassPathXmlApplicationContext("rifiditest/rifidi.xml");

   ConnectionFactory cf=(ConnectionFactory) ctx.getBean("connectionFactory");  
        
   connection = cf.createConnection();
          
   Destination dest1=(Topic) ctx.getBean("topic");

   Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

В этом случае код работает нормально, но выдает исключение java.io.EOFException в Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

2) Из внутреннего пакета OSGi в Rifidi Edge Server В этом случае я использую 2 способа получения данных с помощью JMS. Во-первых, с помощью объекта JMS ConnectionFactory и JMS Topic, а во-вторых, с помощью интерфейса MessageListener.

2)(i) С помощью JMS ConnectionFactory и объекта JMS Topic

Код spring xml:

      <bean id="connectionFactory"  class="org.apache.activemq.spring.ActiveMQConnectionFactory">         
         <property name ="brokerURL" value="vm://externalBroker"/>
        <property name="useAsyncSend" value="true"/>
     </bean> 
     <bean id="externalMB" class="org.apache.activemq.command.ActiveMQTopic">
                <constructor-arg value="org.rifidi.edge.external.tags"/>
      </bean> 

   <bean name="hello" class="com.javaworld.rifiditest.Helloworld"
    init-method="start" destroy-method="stop" >
     <property name="connectionFactory" ref="connectionFactory"/>
     <property name="externalMB" ref="externalMB"/>
   </bean>

Код com.javaworld.rifiditest.Helloworld.java:

    Connection connection;
  
    connection = connectionFactory.createConnection();
   
     Session session = connection.createSession(false,  Session.AUTO_ACKNOWLEDGE);
   
     connection.start();

     Destination dest=externalMB;

     MessageConsumer consumer=session.createConsumer(dest);

 TextMessage m=(TextMessage) consumer.receive();

     System.out.println("---"+m.getText());

     connection.close();

Он выполняется нормально, но выполнение зависает на TextMessage m=(TextMessage) Consumer.receive(); и не выдает никаких ошибок.

2)(ii) С помощью интерфейса MessageListener

При использовании org.rifidi.edge.internal не получает никаких данных и выдает предупреждение WARN org.apache.activemq.broker.jmx.ManagementContext:357 — Не удалось запустить jmx-коннектор : Не удается выполнить привязку к URL-адресу [rmi://localhost:1099/jmxrmi]: javax.naming.NameAlreadyBoundException: jmxrmi [Корневое исключение — java.rmi.AlreadyBoundException: jmxrmi]

При использовании org.rifidi.edge.external.tags никаких ошибок и данных не получено.

Помогите мне решить эту ПРОБЛЕМУ


person Faisal Habib    schedule 14.12.2013    source источник
comment
Это не работает, не очень полезное описание ошибки. Что на самом деле произошло, чего вы ожидали, были ли какие-либо сообщения об ошибках и т. д....   -  person Neil Bartlett    schedule 14.12.2013
comment
Уважаемый Нил! Большое спасибо за ваш любезный ответ. Я не получаю никаких сообщений об ошибках. Я ожидаю получить POJO, предоставленный Rifidi Edge Server, используя ‹osgi:reference id=confac interface=javax.jms.ConnectionFactory bean-name=externalBrokerConFac/ › ‹osgi:reference id=externalMB interface=javax.jms.Topic bean-name=externalNotificationsDest/› в spring xml. Но при этом мой Osgi Bundle не читает xml. Я точно следую этим ссылкам wiki.rifidi.net/index.php?title=Edge_Server_Architecture wiki.rifidi.net/index.php?title=EdgeServerJMS для доступа к сервисам пограничного сервера rifidi   -  person Faisal Habib    schedule 14.12.2013
comment
@NeilBartlett Пожалуйста, спросите, если вы все еще не получили мой вопрос. Я создал и экспортировал свой собственный сервис в пакет OSGI и получил доступ к нему из другого пакета OSGI с помощью тега ‹osgi:reference...› в spring xml, Bundle читает xml, и я Я легко получаю объект из экспортируемой службы. Но когда я пытаюсь получить доступ к службам, экспортированным пограничным сервером Rifidi, мой пакет не читает xml. Для справки эти ссылки wiki.rifidi.net/index.php?title=Edge_Server_Architecture & wiki.rifidi.net/index.php?title=EdgeServerJMS показывает, что именно я пытаюсь сделать. Пожалуйста, помогите мне с этой проблемой.   -  person Faisal Habib    schedule 14.12.2013
comment
Привет @NeilBartlett, я получаю следующую ошибку, когда использую тег osgi:reference ERROR org.springframework.osgi.extender.internal.dependencies .startup.DependencyWaiterApplicationContextExecutor:395 - невозможно создать контекст приложения для [com.javaworld .rifiditest], неудовлетворенные зависимости: нет java.lang.NoSuchMethodError: org.springframework.osgi.service.importer.support.A bstractOsgiServiceImportFactoryBean.isMandatory()Z   -  person Faisal Habib    schedule 18.12.2013


Ответы (2)


Ничего не знаю о пограничном сервере Rifidi, но с точки зрения OSGi/JMS решение немного зависит от того, что вы хотите:

  • Если вы хотите запустить свое собственное приложение в среде OSGi, в которой работает сервер Rifidi, вам необходимо создать пакет и подписаться на имя раздела JMS (согласно указанная вами ссылка) org.rifidi.edge.internal (имя под вашим вопросительным знаком).
  • Если вы хотите запустить собственное приложение вне среды OSGi сервера Rifidi (как отдельную виртуальную машину), имя раздела JMS — org.rifidi.edge.external.tags. В этом случае вам, конечно же, нужно настроить JMS и в своем приложении. Из вашего поста я не могу определить, удалось ли вам это на шаге 1.
person Arie van Wijngaarden    schedule 16.12.2013

Rifidi 3.1 теперь поддерживает интеграцию rest и mqtt с примером приложения.

Скачать последнюю версию здесь

http://sourceforge.net/projects/rifidi/files/?source=navbar

Вики

Wiki.rifidi.net

person Brian    schedule 10.11.2014
comment
У вас также есть предложение/опыт по конкретному вопросу? - person Gábor Bakos; 11.11.2014