< 이전 | 다음 >

학습 7: 번들 사이에 종속성 인젝션 추가

이전 학습에서 번들 내의 종속성 인젝션을 사용하는 방법을 학습했습니다. 번들 사이의 종속성 인젝션에는 Blueprint 구성 파일에서 추가 참조 항목이 필요합니다.

이 학습을 시작하기 전에 서버를 중지하십시오. 서버 보기( > 보기 표시 > 서버)에서 WebSphere Application Server를 마우스 오른쪽 단추로 클릭하고 중지를 선택하십시오.

번들 프로젝트 작성

번들 프로젝트를 작성하고 이를 OSGi 애플리케이션 프로젝트에 추가하려면 다음을 수행하십시오.
  1. 파일 > 새로 작성 > 기타를 클릭하고 OSGi를 펼치십시오.
  2. OSGi 번들 프로젝트를 클릭하고 다음을 클릭하십시오. 새 OSGi 번들 프로젝트가 열립니다.
  3. 프로젝트 이름 필드에서 CounterWorldBundle을 입력하십시오.
  4. 대상 런타임 목록에서 다음 서버 중 하나를 선택하십시오.
    • WebSphere Application Server v7.0
    • WebSphere Application Server v8.0
    • WebSphere Application Server v8.5
    • WebSphere Application Server V8.5 Liberty Profile
  5. CounterApp가 애플리케이션 프로젝트 필드에 표시되는지 확인하고 완료를 클릭하십시오.

번들에 서비스 추가

이 학습에서 메소드 World.getText()로부터 텍스트 문자열을 리턴하는 단순 서비스 World를 작성합니다.
  1. 패키지를 작성하십시오.
    1. 엔터프라이즈 탐색기에서 CounterWorldBundle을 펼치십시오.
    2. src를 마우스 오른쪽 단추로 클릭하고 새로 작성 > 패키지를 선택하십시오. 새 Java™ 패키지 마법사가 열립니다.
    3. 이름 필드에서 com.ibm.ws.eba.world를 입력하고 완료를 클릭하십시오. src 폴더에 패키지가 작성됩니다.
  2. 인터페이스 클래스를 작성하십시오.
    1. 패키지 com.ibm.ws.eba.world를 마우스 오른쪽 단추로 클릭하고 새로 작성 > 인터페이스를 클릭하십시오. 새 Java 인터페이스 마법사가 열립니다.
    2. 이름 필드에서 World를 입력하고 완료를 클릭하십시오. 인터페이스가 패키지에 작성되고 편집기에서 열립니다.
    3. getText() 메소드를 인터페이스에 추가하십시오. 다음 코드는 결과입니다.
      package com.ibm.ws.eba.world;
      
      public interface World {
      	public String getText();
      }
    4. World.java를 저장하십시오.
  3. 구현 클래스를 작성하십시오.
    1. 패키지 com.ibm.ws.eba.world를 마우스 오른쪽 단추로 클릭하고 새로 작성 > 클래스를 클릭하십시오. 새 Java 클래스 마법사가 열립니다.
    2. 이름 필드에서 WorldImpl을 입력하십시오.
    3. 인터페이스 목록 옆에서 추가를 클릭하십시오. 구현된 인터페이스 선택사항 대화 상자가 열립니다.
    4. 인터페이스 선택 필드에서 World를 입력하십시오. com.ibm.ws.eba.world에 대해 World 인터페이스를 선택하고 확인을 클릭하십시오.
    5. 완료를 클릭하십시오. 클래스가 패키지에 작성되고 편집기에서 열립니다.
    6. getText() 메소드에 대한 구현을 추가하십시오. 서비스가 서버에서 시작되는지 확인하는 초기화 메소드를 추가하십시오. 다음 코드는 결과입니다.
      package com.ibm.ws.eba.world;
      
      public class WorldImpl implements World {
      
        @Override
        public String getText() {
          return " World!";
        }
      		
        public void init() {
         System.out.println("WorldImpl.init() called.");
        }
      }
    7. WorldImpl.java를 저장하십시오.
  4. Blueprint 구성 파일을 작성하십시오.
    1. 프로젝트 CounterWorldBundle을 마우스 오른쪽 단추로 클릭하고 새로 작성 > 기타 > OSGi > Blueprint 파일을 선택하고 다음을 클릭하십시오.
    2. 완료를 클릭하십시오. Blueprint 구성 파일이 편집기에서 열립니다.
  5. 컴포넌트 어셈블리 및 구성 정보를 Blueprint 구성 파일에 추가하십시오.
    1. 편집기의 디자인 탭에서 추가를 클릭하십시오. 항목 추가 대화 상자가 열립니다.
    2. Bean을 클릭하고 확인을 클릭하십시오. 구성에 Bean이 추가됩니다.
    3. Bean을 구성하십시오.
      • ID 필드에서 WorldBean을 입력하십시오.
      • 클래스 필드에서 찾아보기를 클릭하십시오. 유형 선택사항 대화 상자가 열립니다. 유형 선택 이름 필드에서 WorldImpl을 입력하고 WorldImpl 클래스를 선택하십시오. 확인을 클릭하십시오.
      • 초기화 메소드 필드에서 init를 입력하십시오.
    4. Blueprint를 클릭하고 추가를 클릭하십시오. 항목 추가 대화 상자가 열립니다.
    5. 서비스를 클릭하고 확인을 클릭하십시오. 구성에 서비스가 추가됩니다.
    6. 서비스를 구성하십시오.
      • ID 필드에서 WorldService를 입력하십시오.
      • 인터페이스 필드에서 찾아보기를 클릭한 후 World 인터페이스를 선택하십시오.
      • 참조 필드에서 찾아보기를 클릭하여 Bean: WorldBean을 선택하십시오. 확인을 클릭하십시오.
    7. 파일을 저장하십시오.
  6. 패키지를 내보내십시오.
    1. CounterWorldBundle을 펼치고 Manifest: CounterWorldBundle을 두 번 클릭하여 편집기에서 번들 Manifest 파일을 여십시오.
    2. 런타임 탭을 선택하십시오.
    3. 편집기의 내보내진 패키지 섹션에서 추가를 클릭하십시오. 내보내진 패키지 대화 상자가 열립니다.
    4. 패키지 목록에서 com.ibm.ws.eba.world를 클릭하고 확인을 클릭하십시오.
    5. 번들 Manifest 파일을 저장하십시오.

새 서비스를 사용하기 위해 Bean 업데이트

World 서비스를 구현했기 때문에 World 서비스를 사용하기 위해 GreetImpl bean 및 CounterServiceBundle 번들 manifest 파일을 업데이트해야 합니다.
  1. 패키지를 가져오십시오.
    1. 엔터프라이즈 탐색기에서 CounterServiceBundle을 펼쳐서 Manifest: CounterServiceBundle을 두 번 클릭하여 편집기에서 번들 Manifest 파일을 여십시오.
    2. 종속 항목 탭을 선택하십시오.
    3. 편집기의 가져온 패키지 섹션에서 추가를 클릭하십시오. 가져온 패키지 대화 상자가 열립니다.
    4. 패키지 목록에서 com.ibm.ws.eba.world를 클릭하고 확인을 클릭하십시오.
    5. 번들 Manifest 파일을 저장하십시오.
  2. GreetImpl.java를 업데이트하십시오.
    1. 엔터프라이즈 탐색기에서 CounterServiceBundle > src > com.ibm.ws.eba.counter를 펼쳐서 GreetImpl.java를 두 번 클릭하여 편집기에서 파일을 여십시오.
    2. 다음 변수 선언을 추가하고 World Bean에 대한 메소드를 설정하십시오.
      private World worldBean;
      public void setWorldBean(World b)
      {
        worldBean = b;
      }
    3. 기본 메뉴에서 소스 > 가져오기 구성을 클릭하십시오. 누락된 import 문이 코드에추가됩니다.
    4. getText() 메소드를 업데이트하여 샤 서비스를 호출하십시오.
      public String getText(){
        return counter.getCount()+" Hello"+worldBean.getText();
      }
    5. 파일을 저장하십시오.
    다음 코드는 결과입니다.
    package com.ibm.ws.eba.counter;
    
    import com.ibm.ws.eba.world.World;
    
    public class GreetImpl implements Greet {
      private World worldBean;
      public void setWorldBean(World b)
      {
        worldBean = b;
      }
    	
      private Counter counter;
    	
      public void setCounter(Counter c) {
        counter = c;
      }
    
      @Override
      public String getText(){
        return counter.getCount()+" Hello"+worldBean.getText();
    }
    	
      public void init() {
        System.out.println("GreetImpl.init() called");
      }
    
    }

Blueprint 구성 파일 업데이트

Blueprint 컨테이너가 World Bean의 인스턴스를 GreetImpl에 삽입하려면 Blueprint 구성 파일에 참조를 추가해야 합니다.
  1. CounterServiceBundle > BundleContent > OSGI-INF > blueprint를 펼치고 blueprint.xml을 두 번 클릭하여 편집기에서 Blueprint 구성 파일을 여십시오.
  2. 편집기의 디자인 탭에서 Blueprint를 선택한 후추가를 클릭하십시오. 항목 추가 대화 상자가 열립니다.
  3. 참조를 클릭하고 확인을 클릭하십시오. 참조 세부사항 대화 상자가 열립니다.
  4. 참조를 구성하십시오.
    • 참조 ID 필드에서 WorldRef를 입력하십시오.
    • 참조 인터페이스 필드에서 찾아보기를 클릭하고 작성한 World 인터페이스를 선택하십시오. 확인을 클릭하십시오.
    • 확인을 클릭하여 변경사항을 승인하고 대화 상자를 닫으십시오.
    참조가 Blueprint 파일에 추가됩니다.
  5. 개요 섹션에서 GreetBean (Bean) 노드를 클릭한 후 추가를 클릭하십시오. 항목 추가 대화 상자가 열립니다.
  6. 특성을 클릭하고 확인을 클릭하십시오. 구성에 특성이 추가됩니다.
  7. 특성을 구성하십시오.
    • 이름 필드에 worldBean을 입력하십시오.
    • 참조 필드에서 찾아보기를 클릭하십시오. 참조 선택사항 대화 상자가 열립니다. Reference:WorldRef를 클릭하고 확인을 클릭하십시오.
  8. 파일을 저장하십시오.

애플리케이션 배치

  1. 엔터프라이즈 탐색기에서CounterWebBundle > CounterWebBundle > 서블릿을 펼치십시오.
  2. CounterServlet을 마우스 오른쪽 단추로 클릭하고 실행 도구 > 서버에서 실행을 선택하십시오. 서버에서 실행 대화 상자가 열립니다.
  3. 완료를 클릭하십시오.

greet.getText()=0 Hello World! 문자열이 브라우저에 표시됩니다. 페이지를 다시 로드할 때마다 값이 증가합니다.

콘솔 보기( > 보기 표시 > 콘솔)로 전환하여 서버의 출력을 보십시오. 성공하면 Blueprint 파일의 CounterImpl, GreetImpl, WorldImpl Bean에 대한 초기화 메소드 항목에 따라 CounterImpl.init(), GreetImpl.init(), WorldImpl.init()의 출력을 표시합니다.
1/10 13:07:26:250 EDT] 000000aa StepStartBLA  A   CWWMH0300I: Starting business-level application "WebSphere:blaname=CounterApp".
[3/31/10 13:07:27:000 EDT] 000000aa webapp        I com.ibm.ws.webcontainer.webapp.WebGroupImpl WebGroup SRVE0169I: Loading Web Module: CounterWebBundle.
[3/31/10 13:07:27:046 EDT] 000000aa WASSessionCor I SessionContextRegistry getSessionContext SESN0176I: Will create a new session context for application key default_hostCounterWebBundle
[3/31/10 13:07:27:062 EDT] 000000aa webcontainer  I com.ibm.ws.wswebcontainer.VirtualHost addWebApplication SRVE0250I: Web Module CounterWebBundle has been bound to default_host[*:9083,*:80,*:9446,*:5067,*:5066,*:443].
[3/31/10 13:07:27:078 EDT] 000000aa FileLocatorIm E   CWPST0164E: The CounterWebBundle composition unit is not found.
[3/31/10 13:07:27:093 EDT] 000000aa StepStartBLA  A   CWWMH0196I: Business-level application "WebSphere:blaname=CounterApp" was started successfully.
[3/31/10 13:07:27:109 EDT] 00000066 SystemOut     O WorldImpl.init() called
[3/31/10 13:07:27:109 EDT] 00000015 SystemOut     O CounterImpl.init() called
[3/31/10 13:07:27:125 EDT] 00000015 SystemOut     O GreetImpl.init() called
NoteColonSymbol CounterImpl.init(), GreetImpl.init()WorldImpl.init()로부터의 출력이 콘솔 출력에 표시되지 않는 경우, 애플리케이션의 배치 및 시작 동안 오류 메시지에 대한 출력을 확인하고 Bean 및 서비스 정의에서 가능한 오류에 대한 Blueprint 파일을 확인하십시오.

학습 체크포인트

Blueprint 종속성 인젝션을 사용하여 하나의 Bean이 다른 것의 서비스를 사용할 수 있도록 허용하는 방법에 대해 학습했습니다.

이 학습서에서 Blueprint 참조를 사용하여 번들 종속성 인젝션을 통해 구성하는 방법에 대해 학습했습니다.
< 이전 | 다음 >
주제 유형을 표시하는 아이콘 학습서 학습 주제
Information Center의 이용 약관 | 피드백

시간소인 아이콘 마지막 업데이트 날짜: 2014-05-22

파일 이름: counter_lesson8.html