2012-04-03 3 views
1

실행하는 동안 JAR 모듈을 등록하는 모듈 식 응용 프로그램이 필요합니다. 그 목적을 위해 Netbeans Lookup API를 사용하고 있습니다.실행 중 JAR 등록

문제는 실행중인 인스턴스가 인식하지 못하기 때문에 일부 JAR 파일을 직접 라이브러리 폴더에 복사 할 수 없다는 것입니다. 모듈에서 인터페이스의 패키지 이름과 모듈 패키지 이름을 사용하여 META-INF.services을 구성했습니다.

while(true){ 
    Lookup lkp; 
    Collection<TestInterface> tests = null; 
    Template tmpl; 
    final Lookup.Result rslt; 

    lkp= Lookup.getDefault(); 
    //lkp=Lookups.forPath("modules-path"); 
    tmpl= new Template(TestInterface.class); 
    rslt= lkp.lookup(testTemplate); 
    tests = rslt.allItems(); 

    Lookup.getDefault().lookup(TestInterface.class); 
     rslt.addLookupListener(new LookupListener() { 
      @Override 
      public void resultChanged(LookupEvent le) { 
       reaction(rslt); 
      } 
     }); 

     reaction(rslt); 
    } 
} 

private static void reaction(Lookup.Result r) { 
    for (Iterator i = r.allInstances().iterator(); i.hasNext();) { 
     TestInterface s = (TestInterface) i.next(); 
     System.out.println(s.somemethod()); 
    } 
} 

가 제안/힌트가 어떻게 그것을 해결하기 위해 모든 : 여기

내 코드의 예입니다?

답변

1

네비게이션 조회 대신 목적에 맞게 OSGi를 사용할 수 있습니다. 분명히로드해야하는 jar 파일을 제어 할 수 있으므로 잘 작동합니다.

OSGi 번들을 얻으려면 jar 구성을 변경해야합니다. 여기에 설명 된대로 이렇게하려면, 당신은, 당신의 MANIFEST.MF 파일을 변경해야합니다 :

http://www.vogella.de/articles/OSGi/article.html#osgiarch_manifest http://www.javaworld.com/javaworld/jw-03-2008/jw-03-osgi1.html? 여기에서 설명하는 것처럼 다음 페이지 = 2

, 당신은 당신이 당신의 매니페스트에 정의 된 BundleActivator를를 사용하여 jar 파일을 활성화 할 수 있습니다

http://www.vogella.de/articles/OSGi/article.html#codebundle

을 그런 다음 서비스로 번들을 게시하고 소비 할 수 귀하의 신청서에 :

http://www.eclipsezone.com/eclipse/forums/t90796.html

+0

OSGi에 대해 알고 있는데 lookup-api가 병목 현상이 될지 고려해 볼 것입니다. OSGi에서 라이브러리를 선언하지 않고 모듈을 "플러그인"할 수 있는지 알고 있습니까? 예를 들어, 주 모듈이 실행 중일 때 폴더에 항아리를 넣은 다음 주 모듈이이를 인식하고 즉시 연결되는 모듈의 메서드를 사용합니다. – xplorer00

+0

저는 OSGi 전문가가 아니므로 당신을 오도하고 싶지는 않습니다. 그렇다고 생각하지 않습니다. 지금까지 내가 아는 한 jar 파일은 OSGi가 인식 할 수 있도록 MANIFEST.MF 파일에 OSGi 매개 변수를 포함해야합니다. 하지만 좀 더 숙련 된 조언은 유용 할 것입니다 ... –

+0

팁, 편집 해 주셔서 감사합니다. :) – xplorer00