2014-09-30 1 views
1

플러그인 가능한 구성 요소 아키텍처 (플러그인)를 사용하여 웹 응용 프로그램을 디자인하고 있습니다. 내 요구 사항은 응용 프로그램을 다시 시작하지 않고 새 플러그인 jar (클래스)를 추가하는 것입니다. 웹 응용 프로그램의 lib 디렉토리 또는 플러그인 디렉토리에 삭제해야하며 응용 프로그램에서 가져올 수 있어야합니다.런타임시 jar 파일에서 클래스를로드하는 방법은 무엇입니까?

나는 Tomcat 서버로 이것을 시도했지만 lib 디렉토리로 떨어 뜨린 jar 파일을 시작하면로드 할 수 없다.

누구나 최선의 방법을 제안 할 수 있습니까?

+1

이 목적으로 OSGI를 사용하는 것이 더 좋습니다. 런타임시 Jars/Packages/Classes를 클래스 경로에서로드 및 언로드 할 수 있습니다. 또한 이름을 알 필요없이 검색 및 다운로드 할 수있는 저장소에 정의 할 수도 있습니다. – Stefan

+0

방금이 포인터를 추가하려고했습니다. 주요 논거 : 학문적 오락을위한 것이 아닌 이상, 당신이 * 모든 것을 못 박았을 때 또 다른 구성 요소 틀을 발명, 구현 및 유지하기를 원하지 않습니다. 하지만 그때조차도이 문제는 OSGI에서 아주 잘 해결된다고 생각합니다. –

답변

0

당신의 시도가 아래 코드로 당신을 도울 수있는 일을하려고하는 무엇도 좋은

URL urls [] = {}; 

JarFileLoader cl = new JarFileLoader (urls); 

cl.addFile ("/opt/mysql-connector-java-5.0.4/mysql-connector-java-5.0.4-bin.jar"); 

System.out.println ("attempt..."); 

cl.loadClass ("org.gjt.mm.mysql.Driver"); 

System.out.println ("Success!"); 

나는 이것이 당신에게 JVM이 순서로 클래스를로드 검색

도움이되기를 바랍니다 :

부트 스트랩 클래스는 rt.jar 및 기타 중요한 JAR 파일의 클래스를 비롯하여 Java 플랫폼을 구성하는 클래스입니다.

Java 확장 메커니즘을 사용하는 확장 클래스. 이러한 클래스는 JAR 파일로 번들로 제공되며 extensions 디렉토리에 있습니다.

사용자 클래스는 개발자와 제 3자가 정의한 클래스이며 확장 메커니즘을 사용하지 않습니다.

+0

고맙습니다. Santosh,하지만 제 경우에는 jarfile 이름이나 클래스 이름을 말할 수 없을 수도 있습니다. 왜냐하면 런타임에 그것이 무엇이든 될 수 있기 때문입니다. @ 플러그인 주석으로 각 플러그인 클래스에 주석을 달았습니다. 그리고 그것은 내 플러그인 논리가 작동하는 유일한 방법입니다. 내가 할 수있는 일은 정기적 인 간격으로이 플러그인 검색 로직을 트리거하는 것입니다. –

관련 문제