2013-09-10 7 views
0

내 REST (저지) 및 직렬 포트 통신을 통합해야합니다. 이제 서버 작업 처리 문제가 있습니다. 기본적으로 내가 직접 (시리얼 포트 매개 변수를 하드 코드)에 RXTXcomm.jar 라이브러리와 열린 포트를 사용하고 있습니다 :직렬 포트 통신 및 웹 응용 프로그램

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

내 문제 :

  1. 초기화 클래스는 내 API에 대한 첫 번째 호출 인스턴스화됩니다 . 서버를 시작한 직후에 어떻게 든 초기화를 강제로 수행 할 수 있습니까?
  2. 두 번째 포트가 닫힙니다. 서버를 중지 할 때 포트를 닫아야합니다. 서버 중지 이벤트를 감지하는 방법?
  3. 이 접근법에 몇 가지 문제점이 있습니까? (이것은 선택적 질문입니다).

감사합니다.


HTTP 요청을 통해 데이터를 전달하고 싶지 않습니다. 일부 매개 변수를 사용하고 나중에 직렬 데이터를 REST 리소스 내부에서 채 웁니다. 요청은 매우 드물며 한 명의 '고객'만 가능합니다.

답변

1

ServletContextListener을 구현하면 서버가 시작될 때와 마찬가지로 init 클래스를 초기화 할 수 있습니다.

  1. ServletContextListener 서버가 귀하의 초기화 클래스를 초기화 오버라이드 (override) 할 수있는 시작될 때 호출되는 contextInitialized(javax.servlet.ServletContextEvent) 방법이있다.
  2. ServletContextListener은 서버가 멈 추면 호출되며 서버를 무시하여 포트를 닫을 수 있습니다.
  3. 당신은 취미 프로젝트 같아서 먼저 작업하게하고 나중에 최적화/정리에 대해 생각해보십시오.
+0

데모/평가판 프로젝트와 비슷합니다. 나는 너의 제안을 실행한다. 하나의 START/STOP 사이클은 잘 작동합니다. 하지만 애플리케이션을 재배포 할 때'java.lang.UnsatisfiedLinkError : 네이티브 라이브러리 rxtxSerial.dll이 이미 gnu.io.RXTXCommDriver를로드하는 동안 다른 클래스 로더에로드되었습니다. '예외가 발생합니다. – flyer

+0

재배포하는 대신 서버를 중지/시작할 수도 있습니다. 코드를 게시하면 디버그하는 데 도움이 될 수 있습니다. –

+0

'UnsatisfiedLinkError'를 잡으면서'System.load()'호출을 try/catch로 감쌀 수도 있습니다. –

1

두 번째 요청이 첫 번째가 직렬 포트에 계속 기록되는 동안 문제가 발생할 수 있다고 생각합니다.

tcp/ip (또는 명명 된 파이프 또는 ipc의 다른 수단)를 통해 데이터를 수신하고 대기열에 버퍼링 한 다음 직렬 포트로 전달하는 독립 실행 형 응용 프로그램을 만들 수 있습니다.

+0

감사합니다. 내 요청은 매우 드물며 한 명의 '고객'만 가능합니다. 나는 시간이 없어서 매우 복잡한 솔루션을 사용하고 싶지 않다. 그러나 나는 당신의 요점을 이해한다고 생각합니다. 좋은 해결책이 될 수 있습니다. – flyer