2012-08-02 9 views
0

Tomcat에서 작업하면서 RAP/RWT가있는 디자인을 연구 중입니다. 나는 지금 랩을 배우고 있으며 몇 가지 질문이 내 마음에옵니다.Eclipse RAP/RWT 독립 실행 형 응용 프로그램 - 최고의 디자인?

내 응용 프로그램에는 특정 소스의 데이터를 지속적으로 수집하는 백엔드가 있습니다. 다른 한편으로는 프론트 엔드 (RWT 독립 실행 형 응용 프로그램 또는 워크 벤치 기능이있는 RAP, 아직 결정되지 않음)를 웹 응용 프로그램으로 실행하려고합니다.

  • 첫 번째 질문 : 백엔드를 별도의 프로세스로 유지해야하며 프론트 엔드 RAP 애플리케이션이 어떻게 든 통신 할 수 있도록해야합니까? 아니면 RAP 애플리케이션에 모든 것을 통합 할 수 있습니까? 모든 것을 통합하면 두 번째 질문이 나온다.

  • 두 번째 질문 : RAP 응용 프로그램 내에서 브라우저 창/탭에 내 응용 프로그램이있을 때 어떻게 감지합니까? 사용자가 그래픽 인터페이스를 닫을 때 (즉 브라우저를 닫을 때) 리소스 정리를하고 싶습니다. RWT 독립 실행 형 응용 프로그램에서 ApplicationWorkbenchWindowAdvisor#preWindowShellClose과 같은 항목을 찾을 수 없습니다. 응용 프로그램이 시작될 때와 동일합니다. 일반적으로 RWT 독립형 응용 프로그램의 webapp 수명주기를 따르는 콜백이 있습니까?

도움을 주셔서 감사합니다.

답변

0

(*) 첫 번째 : 디커플링이 항상 최선의 방법입니다. 나는 백엔드 애플리케이션 (다른 RMI 객체 또는 EJB 빈)으로부터 수신 알림을 받기 위해 RMI 스텁을 사용한다. 스텁 사용 무언가에

MyEJBListener stub = UnicastRemoteObject.exportObject(new MyEJBListener(display, page, 
            manager, handlermanager), 0) 
MyEJBClient client1 = MyEJBLocator.findEJBClient("abc"); 
client1.addListener(stub); 

public void notify(Event event){ 

    UICallBack.activate("stubthread"); 
    Display..asyncExec(new Runnable() { 
    // update event info 
    }); 
} 

(*)

같은 둘째 방법 WorkbenchWindowAdvisor#postWindowClose 당신을 도울? 및 somethig에 방법 형태 백엔드 응용 프로그램을 호출 할 수 있습니다.

1

첫 번째 사항에 대해 : EJB를 사용할 때 요청 스레드에서 Java EE 컨텍스트에만 직접 액세스 할 수 있다는 점에 유의하십시오. JEE_COMPATIBILITY 모드에서 실행하면 문제가되지 않지만 SWT_COMPATIBILITY 모드에서는 RWT.requestThreadExec(Runnable);을 통해 EJB에 액세스해야 할 수 있습니다.

두 번째 질문에 대해서는 RAP 서버에 현재 브라우저 종료시 알림이 없습니다. 이 문제는 bug 284273 - Session kill mechanism on browser close에서 논의됩니다. IIRC는 모든 브라우저에서 작동하는 안정적인 방법을 찾을 수 없었기 때문에 아직 구현되지 않았습니다.

a) JSExecutor를 사용하여 브라우저 닫기 요청을 보내는 클라이언트에 JavaScript를 넣고 b) 이러한 요청을 수신하고 세션을 종료하는 PhaseListener를 사용하여 자체 솔루션을 구현할 수 있습니다.