2014-05-19 5 views
5

이 주제에 관해 많은 의문 사항이 있습니다. 그러나 그들은 주로 클래스와 변수의 상태를 보존하는 데 있습니다.JVM 런타임 중에 클래스를 다시로드하십시오.

내 응용 프로그램을 최신 버전 (모든 단일 항아리에 패키지 됨)으로 만들고 자체를 다시 시작하고 싶습니다.

내 응용 프로그램은 main() 함수를 시작점으로 사용하므로 하나의 클래스 만 초기화하면 전체 응용 프로그램이 거기에서 시작됩니다. 그래서 그 생각이 들었어. main()에서 전체 응용 프로그램을 중지 할 수 있습니다. 이전 jar를 덮어 쓰면 JVM은 이론적으로 main()을 포함하는 클래스를 제외하고 모든 클래스를 다시로드 할 수 있고 main은 모든 것을 다시 초기화하고 실행합니다.

너무 많은 번거 로움이 있습니까? 난 그냥 항아리의 출시를 처리하고 최신 버전을 다운로드 부트 스트랩 항아리를 사용해야합니다.

+4

부트 스트랩 쉘 스크립트가 가장 단순합니다. –

+0

런타임시 Jar를 변경 하시겠습니까? JVM을 다시 시작 하시겠습니까? – Vipin

+0

내 추측으로는 적어도 메인 클래스와 재로드 가능한 클래스에 대해 다른 항아리가 필요합니다. b) 기본 클래스에서만 리플렉션을 사용합니다. c) 재로드 가능한 항아리에 대해 다른 ClassLoader를 사용할 가능성이 큽니다. – EasterBunnyBugSmasher

답변

-3

자동 업데이트 거의 대부분 항상에는 항상 기본 앱의 실행을 제어하는 ​​부트 스트랩 응용 프로그램이 있습니다. 이것에 대한 예제도 많이 있습니다.

0

OSGi 컨테이너 사용을 고려할 것입니다. Apache Felix 또는 Eclipse Equinox과 같이 많은 가볍고 낮은 오버 헤드 구현이 여기에 있습니다. 많은 Java 응용 프로그램 서버는 OSGi 커널 위에 구축됩니다. 거의 모든 작업을 수행하지 않고 런타임시 전체 병 (번들) 또는 덜 세분화 된 단위 (기능)를 쉽게 핫 스왑 할 수 있습니다.

관련 문제