2014-04-18 3 views
1

나는 돌고래 UI가 내장 된 데스크탑 응용 프로그램과 Java의 일부 SWING UI를 가지고 있습니다. 임베디드 jetty 서블릿에서 내 애플리케이션 클래스로 메시지를 보내려 할 때 akka를 활용하고 싶습니다. (액터가 들어오는 메시지의 스윙 UI를 업데이트 할 수있는 기능 포함). 전체 응용 프로그램에 대해 단일 액터 시스템이 있어야한다는 것을 이해합니다. 질문은 그것에 대한 참조를 처리하는 가장 좋은 방법은 무엇입니까? 배우 시스템에 대한 참조를 포함하는 일종의 싱글 톤을 만들어야합니까? jetty가 자신의 클래스 로더를 사용하기 때문에 클래스 로더에 문제가있을 수 있습니까?배우 시스템에 대한 참조 유지

+0

서블릿 컨테이너가 수행중인 내용을 이해할 수 없습니다. 누가 또는 무엇을 연결하고 무엇을 그 서블릿 컨테이너에 보내고 그 애플리케이션과 관련된 것은 무엇입니까? – simbo1905

답변

0

일반적으로 서블릿을 사용하면 jvm, 내장 된 서버 인스턴스 또는 웹 애플리케이션별로 액터 시스템을 사용할 것인지 결정할 수 있습니다. 일반적인 유스 케이스의 대부분의 사람들은 웹 애플리케이션마다 액터 시스템을 원할 것입니다. 어떤 경우에는 ServletContextListener을 서브 클래스로 만들고, 액터 시스템을 생성 한 다음 ServletContextEvent에서 ServletContext을 얻고 액터 시스템을 속성으로 추가하십시오. 그런 다음 서블릿 및 서블릿 필터에서 서블릿 컨텍스트에서 액터 시스템을 조회 할 수 있습니다. 일반적으로 새로운 프로젝트를 시작하는 사람들은 Play, 그렇지 않으면 Socko 웹 프레임 워크를 살펴보아야합니다.이 프레임 워크는 Akka와 함께 잘 작동하도록 제작되었습니다.

당신의 경우에는 서블릿 컨테이너를 임베딩하고 클래스 로딩에 대해 질문하는 것입니다. 서블릿 컨테이너는 '부모 마지막'클래스 로더 의미를 갖는다. akka 클래스가 전쟁에서 항아리에없는 경우에는 기본 응용 프로그램 클래스 경로에서로드 될 것으로 예상됩니다. maven과 같은 것을 사용하는 건물이라면 웹 프로젝트 의존성의 공유 라이브러리를 '제공됨'으로 표시하여 클래스를 컴파일 할 수 있습니다. 그러나 war 파일에 패키징됩니다. 그런 다음 webapp의 클래스가 이러한 라이브러리 클래스를 사용하는 경우 webapp에서 실행되지 않는 코드와 공유 할 수있는 기본 클래스 경로에서 올 수 있습니다.

실제로 웹 컨테이너를 사용하여 코드를 동적으로 재배포하는 경우 작업의 잘못된 도구 일 것입니다. 대신 osgi 컨테이너를 사용하십시오. 다음은 osgi를 사용하여 비즈니스 로직을 동적으로 재배치하는 코드에 대한 링크입니다. https://github.com/simbo1905/osgi-extensible 샘플 코드에서 felix를 사용하지만 다른 것이있는 여러 가지 좋은 osgi 엔터프라이즈 스펙 컨테이너가 있습니다. 서블릿 컨테이너를 사용하는 유일한 이유는 기술과 같은 JSP를 사용하여 웹 페이지를 제공하기 위해서입니다. Akka는 원격 메시징 등을 제공하며 서블릿 컨테이너가 필요없이 HTML5 웹 소켓과 잘 작동합니다. Akka로 작성된 Socko 웹 서버를 사용하여 akka 비즈니스 로직을 호스팅하고 json을 사용하여 전체 서블릿 컨테이너의 팽창없이 메시지에 메시지를 보낼 수 있습니다. 여기에 어떤 코드에 대한 링크가 있습니다. https://github.com/simbo1905/sprint-planning

관련 문제