Я установил пограничный сервер 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 никаких ошибок и данных не получено.
Помогите мне решить эту ПРОБЛЕМУ