질문은 this one과 매우 비슷하지만 다른 문제에 집중해야합니다.Java에서 샌드 박스 플러그인 확장 응용 프로그램 만들기
대형 데이터베이스 (예 : 영화 데이터베이스)가있는 애플리케이션이 있다고 가정 해 보겠습니다. 응용 프로그램 사용자는 자신의 플러그인을 추가하고 플러그인을 실행할 수 있어야합니다.
시나리오는 다음과 같이 수 :
- 출시 주요 응용 프로그램은
- 의 주요 응용 프로그램을 말해/응용 프로그램/플러그인 디렉토리에
- 장소 통계-plugin.jar 새로운 플러그인을로드 할 수
- 는 (예 : 하나를 설치 한)과
- 을 실행 통계-plugin.jar가 조회하는 플러그인을 선택 플러그인을
- 을 나열하는 응용 프로그램을 말해 영화에 대한 DB와 공포 영화를 계산 메인 앱이 결과
각 플러그인을 호출 할 것이다 표준 방법 (공통 Plugin
인터페이스), 예를 들어, 몇 가질 수를 제공
onInitialize
, onRun
등메인 앱이 보장해야하는 것은 플러그인이 충돌 (예 : 0으로 나누기)하면 메인 앱이 안정적으로 유지됩니다 (예 : 오류 대화 상자가 표시되지만 충돌하지 않음) . 또한 실행 시간을 제한하고 플러그인이 수행중인 작업을 확인할 수도 있습니다.
이것은 모두 샌드 박스 플러그인 환경을 요약 한 것입니다. 가장 중요한 사항은 플러그인 스타일의 확장 성 및 플러그인 샌드 박스이므로 안전한 작업 (예 : DB 읽기는 업데이트하지만 업데이트하지 않음) 만 허용됩니다.
플러그인을 Java로 작성하지 않아도됩니다. 어떤 식 으로든 실행 파일이 필요합니다 ... 가능한 경우 JavaScript 파일 일 수도 있습니다.
어떻게 이러한 작업에 접근하겠습니까?
RW 작업은 그 예입니다. 앱에 공개 메소드'read'와'write'가 있다고 가정하고 플러그인이 호출되면 기본 앱 (예 : 요청 레코드)과 통신 할 수 있습니다. 반면에, 번들이 아닌 (원래가 아닌) 플러그인은'write'를 호출 할 수 없습니다. 이것을 달성하는 방법? 반사? – emesx
프레임 워크는 사용자 정의 권한을 처리하기 위해 필요하다면 (예 : 아마도'read' /'write' 메소드 내에서)'checkPermission'을 호출해야합니다. 정책은 위치 (코드베이스)에 따라 특정 클래스로 제한 될 수 있습니다. 플러그인을로드 할 때 클래스 로더가 올바르게 설정해야합니다. 이것은 전체적으로 꽤 복잡한 시스템 일 것 같다. [이 질문] (http://stackoverflow.com/q/502218/372643) 관심이 있어야합니다. – Bruno
글쎄, 당신의 adivice 아마 좋은 것입니다,하지만 짧은 연구 후 전혀 Java 플러그인을 허용하지 않을;) – emesx