无法访问Rifidi边缘服务器(RFID中间件)中提供的OSGI服务



我已经在windows7上安装了Rifidi边缘服务器(开源RFID中间件以osgi捆绑包的形式提供服务),我正在尝试开发一个java应用程序来连接和通信Rifidi边缘服务器。我尝试了两种方式,第一种是从Rifidi Edge Server外部的应用程序,第二种是从Rifidi Edge服务器内部的OSGi捆绑包,链接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);

在这种情况下,代码运行良好,但在Session Session=connection.createSession(false,Session.AUTO_ACKNOWLEDGE)处出现异常java.io.EOFException

2)从Rifidi边缘服务器内部的OSGi捆绑包在这种情况下,我使用两种方法来使用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.rifidiest.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.rereceive()并且没有给出任何错误。

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时没有错误,也没有获取任何数据。

帮助我解决这个问题

对Rifidi边缘服务器一无所知,但从OSGi/JMS的角度来看,解决方案在一定程度上取决于您想要什么:

  • 如果您想在Rifidi服务器运行的OSGi框架内运行自己的应用程序,您需要创建一个捆绑包并订阅JMS主题名称(根据您指示的链接)org.rifidi.edge.internal(问号上的名称)
  • 如果您想在Rifidi服务器OSGi框架之外运行自己的应用程序(作为一个单独的VM),JMS主题名称为org.rifidi.edge.external.tags。在这种情况下,您当然也需要在自己的应用程序中设置JMS。根据你的帖子,我无法确定你是否在第一步就成功了

Rifidi 3.1现在支持rest和mqtt与示例应用的集成

在这里下载最新版本

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

Wiki

Wiki.rifidi.net

相关内容

  • 没有找到相关文章

最新更新