2013-09-10 2 views
0

Мне нужно интегрировать связь REST (Джерси) и последовательного порта. У меня проблема с обработкой действий сервера. В основном я использую библиотеку RXTXcomm.jar и открыть порт непосредственно в (параметры последовательного порта жестко закодированы):Связь с последовательным портом и веб-приложение

public class ApplicationConfig extends Application { 
     public ApplicationConfig() { 
      // init serial port here 
     } 
} 

Мои проблемы:

  1. Класс инициализации создается с первым вызовом моей API , Могу ли я как-то принудительно инициализировать раньше сразу после запуска сервера?
  2. Второй порт закрыт. Когда я останавливаю сервер, мне нужно закрыть порт. Как обнаружить событие остановки сервера?
  3. Вы видите некоторые проблемы с этим подходом? (это необязательный вопрос).

Спасибо.


Я не хочу передавать данные по HTTP-запросам. Просто используйте некоторый параметр, а затем запишите внутренние данные внутри ресурса REST. Запрос будет очень редок и только у одного «клиента».

ответ

1

Если вы реализуете ServletContextListener, вы можете инициализировать свой класс инициализации точно так же, как начинается сервер.

  1. ServletContextListener имеет contextInitialized(javax.servlet.ServletContextEvent) метод который вызывается при запуске сервера, который вы можете переопределить для инициализации класса инициализации.
  2. ServletContextListener имеет contextDestroyed(javax.servlet.ServletContextEvent), который вызывается, когда сервер останавливается, и вы можете отменить его, чтобы закрыть порт.
  3. Ваш проект похож на хобби, поэтому я предлагаю вам сделать его первым и подумать об оптимизации/очищении позже.
+0

Это больше похоже на демонстрационный/пробный проект. Я запустил ваше предложение. За один цикл START/STOP работает нормально. Но при повторном развертывании моего приложения я вижу исключение: 'java.lang.UnsatisfiedLinkError: Native Library rxtxSerial.dll уже загружен в другой загрузчик классов, загружаемый при загрузке gnu.io.RXTXCommDriver'. – flyer

+0

Возможно, вы захотите остановить/запустить свой сервер, а не просто перераспределять. И если вы не хотите этого делать, размещение кода может помочь нам отладить. –

+0

Вы можете также обернуть вызов 'System.load()' при попытке/уловом при ловле 'UnsatisfiedLinkError'. –

1

Я бы предположил, что может возникнуть потенциальная проблема, если второй запрос сделан, в то время как первый все еще записывает в последовательный порт.

Вы можете создать автономное приложение, которое будет получать данные по tcp/ip (или именованным каналам или другим средствам ipc), буферизировать его в очереди и отправить его на последовательный порт.

+0

Спасибо за ввод. Моя просьба будет очень редка и только от одного «клиента». Я не хочу использовать очень сложные решения из-за отсутствия времени для этого. Но я думаю, что понимаю вашу мысль. Это может быть хорошим решением. – flyer

Смежные вопросы