2013-12-13 3 views
0

더블 클릭으로 열 수있는 Java 앱과 같은 IPOJO 앱을 어떻게 만들 수 있습니까?자바 팰리스와 같은 Apache felix Ipojo 삽입

나는 몇 가지 코드가 있습니다

//App.java 
package app; 
import app.testipojo.HelloComponent; 
import java.util.HashMap; 
import java.util.Map; 
import org.apache.felix.ipojo.annotations.Component; 
import org.apache.felix.ipojo.annotations.Instantiate; 
import org.apache.felix.framework.FrameworkFactory; 
import org.apache.felix.ipojo.annotations.Requires; 
import org.apache.felix.ipojo.annotations.Validate; 
import org.apache.felix.main.AutoProcessor; 
import org.osgi.framework.Bundle; 
import org.osgi.framework.BundleContext; 
import org.osgi.framework.BundleException; 
import org.osgi.framework.Constants; 
import org.osgi.framework.launch.Framework; 


@Component 
@Instantiate 
public class HelloComponentApp { 

@Requires 
HelloComponent c; 
public HelloComponentApp() { 
} 


    @Validate 
    public void start(){ 
     c.test(); 
    } 

    public static void main(String args[]) throws BundleException, InterruptedException{ 




    FrameworkFactory ff = new FrameworkFactory(); 
    Map<String,Object> config; 
     config = new HashMap<>(); 

     config.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA,"org.osgi.service.log;version=1.3, org.apache.felix.ipojo.architecture;version=1.11.0, org.apache.felix.ipojo;version=1.11.0,"+ 
       "org.osgi.service.cm;version=1.2,"+"app.testipojo;version=1.0.0.SNAPSHOT"); 

    config.put(Constants.FRAMEWORK_STORAGE_CLEAN, Constants.FRAMEWORK_STORAGE_CLEAN_ONFIRSTINIT); 

    config.put(Constants.FRAMEWORK_STORAGE_CLEAN, "true"); 

    Framework fwk = ff.newFramework(config); 
    fwk.start(); 
    BundleContext context = fwk.getBundleContext(); 


     String home_dir="file:/G:/HOW_TO_PRONOUNCE/install/jar/"; 
    AutoProcessor.process(config, context); 
    Bundle bundle = context.installBundle(home_dir+"testipojo/target/testipojo-1.0-SNAPSHOT.jar"); 
    bundle.start(); 

    System.out.println("Started"); 

     bundle.stop(); 


     fwk.stop(); 
     fwk.waitForStop(1000); 

     } 
} 

IPOJO 그것은 오류없이 실행

package app.testipojo; 

import org.apache.felix.ipojo.annotations.Component; 
import org.apache.felix.ipojo.annotations.Instantiate; 

@Component 
@Instantiate 
public class HelloComponent { 

public HelloComponent() { 

} 

    public void test(){ 
     System.out.println("Hello world!"); 
    } 
} 

을 시작 번들을하지만, 그것은 단지 '시작했다.'인쇄합니다 'Hello world'는 인쇄되지 않습니다. 이 문제를 해결하는 데 도움을주십시오.

+0

귀하의 앱에서 start() 메소드가 실행되지 않았다고 생각합니다. main 메소드 만 실행됩니다. –

답변

1

나는 응용 프로그램을 실행할 osgi 컨텍스트가 있어야한다고 생각합니다. felix 인스턴스를 부트 스트랩하는 다른 방법은 https://ilikeorangutans.github.io/2012/10/23/osgi-bootstrapping/을 참조하십시오.

펠릭스 인스턴스가 실행되면 ipojo 번들을 설치하고 시작하면 구성 요소가 실행됩니다.

요약하면 링크를 두 번 클릭 할 때 일어날 일은 ipojo가 (osgi 컨테이너 : felix, 춘분 등)에서 실행되도록 환경을 설정 한 다음 애플리케이션 번들을 설치하는 것입니다. 그런 일이 발생하고 모든 것이 해결되면 컨테이너는 컴포넌트에서 start를 호출합니다.

그리고 코드를 실제로 읽은 후 http://felix.apache.org/site/apache-felix-framework-launching-and-embedding.html을 살펴보십시오. 나는이 과정에서 도움이 될 일들을 놓치고 있다고 생각합니다.