< 이전 | 다음 >

학습 6: 번들 내 종속성 인젝션 추가

종속성 인젝션을 사용하면 한 개의 Bean이 Bean 인스턴스를 작성하기 위한 모든 코드를 구현할 필요 없이 다른 Bean에 액세스할 수 있습니다. 필수 Bean 인스턴스는 Blueprint 구성 파일에 포함되는 정보를 사용하여 Blueprint 컨테이너에서 작성됩니다.

이 학습을 시작하기 전에 서버를 중지하십시오. 서버 보기( > 보기 표시 > 서버)에서 WebSphere Application Server를 마우스 오른쪽 단추로 클릭하고 중지를 선택하십시오.
번들 내에서 종속성 인젝션을 추가하려면 다음을 수행하십시오.
  1. 번들에 서비스 추가
  2. Blueprint 구성 파일 업데이트
  3. 새 서비스를 호출하기 위해 서블릿 업데이트
  4. 애플리케이션 배치

번들에 서비스 추가

  1. 인터페이스 클래스를 작성하십시오.
    1. 엔터프라이즈 탐색기에서 CounterServiceBundle > src를 펼치십시오.
    2. com.ibm.ws.eba.counter를 마우스 오른쪽 단추로 클릭하고 새로 작성 > 인터페이스를 선택하십시오. 새 Java™ 인터페이스 마법사가 열립니다.
    3. 이름 필드에서 Greet를 입력한 후 완료를 클릭하십시오. 인터페이스가 패키지에 작성되고 편집기에서 열립니다.
    4. getText() 프로토타입을 인터페이스에 추가하십시오. 다음 코드는 결과입니다.
      package com.ibm.ws.eba.counter;
      
      public interface Greet {
      		public String getText();
      }
  2. 구현 클래스를 작성하십시오.
    1. com.ibm.ws.eba.counter를 마우스 오른쪽 단추로 클릭하고 새로 작성 > 클래스를 선택하십시오. 새 Java 클래스 마법사가 열립니다.
    2. 이름 필드에 GreetImpl을 입력하십시오.
    3. 인터페이스 목록 옆에서 추가를 클릭하십시오. 구현된 인터페이스 선택사항 대화 상자가 열립니다.
    4. 인터페이스 선택 필드에서 Greet를 입력하십시오. Greet 인터페이스를 선택하고 확인을 클릭하십시오.
    5. 완료를 클릭하십시오. 클래스가 패키지에 작성되고 편집기에서 열립니다.
    6. GreetImpl 클래스를 다음 구현으로 바꾸십시오.
      package com.ibm.ws.eba.counter;
      
      public class GreetImpl implements Greet {
      	
      	private Counter counter;
      	
      	public void setCounter(Counter c) {
      		counter = c;
      	}
      
      	@Override
      	public String getText() {
      		return counter.getCount()+" Hello";
      	}
      	
      	public void init() {
      		System.out.println("GreetImpl.init() called");
      	}
      
      }
    7. GreetImpl.java를 저장하십시오.
개인용 변수 counter는 종속성 인젝션을 사용하여 컨테이너가 초기화하는 카운터 서비스의 인스턴스에 대한 참조입니다. setCounter 메소드를 사용하여 설정됩니다.

Blueprint 구성 파일 업데이트

다음 단계를 실행하여 Greet 서비스를 시작하고 카운터 서비스의 인스턴스를 삽입하도록 Blueprint 구성 파일을 구성하십시오.
  1. 엔터프라이즈 탐색기에서 CounterServiceBundle을 마우스 오른쪽 단추로 클릭하고 OSGi > Blueprint 파일 열기를 선택하여 편집기에서 Blueprint 파일을 여십시오.
  2. 컴포넌트 어셈블리 및 구성 정보를 Blueprint 구성 파일에 추가하십시오.
    1. 편집기의 디자인 탭에서 Blueprint를 선택한 후 추가를 클릭하십시오. 항목 추가 대화 상자가 열립니다.
    2. Bean을 클릭하고 확인을 클릭하십시오. Bean 세부사항 대화 상자가 열립니다.
    3. Bean을 구성하십시오.
      1. Bean ID 필드에서 GreetBean을 입력하십시오.
      2. 클래스 필드에서 찾아보기를 클릭하십시오. 유형 선택사항 대화 상자가 열립니다. 유형 이름 선택 필드에서 GreetImpl을 입력하고 GreetImpl 클래스를 선택하십시오. 확인을 클릭하십시오.
      3. 확인을 클릭하여 변경사항을 승인하고 대화 상자를 닫으십시오.
      4. 편집기의 초기화 메소드 필드에서 init를 입력하십시오.
      Blueprint 파일에 Bean이 추가됩니다.
    4. 개요 섹션에서 GreetBean (Bean)을 클릭한 후 추가를 클릭하십시오. 항목 추가 대화 상자가 열립니다.
    5. 특성을 클릭하고 확인을 클릭하십시오.
    6. 특성을 구성하십시오.
      • 이름 필드에 counter를 입력하십시오.
      • 참조 필드에서 찾아보기를 클릭하십시오. 참조 선택사항 대화 상자가 열립니다. Bean: CounterBean을 클릭하고 확인을 클릭하십시오.
    7. 개요 섹션에서 Blueprint를 클릭한 후 추가를 클릭하십시오.
    8. 서비스를 클릭하고 확인을 클릭하십시오. 서비스 세부사항 대화 상자가 열립니다.
    9. 서비스를 구성하십시오.
      1. 서비스 인터페이스 필드에서 찾아보기를 클릭한 후 Greet 인터페이스를 선택하십시오.
      2. Bean 참조 필드에서 찾아보기를 클릭하여 Bean: GreetBean을 선택하십시오. 확인을 클릭하십시오.
      3. 확인을 클릭하여 변경사항을 승인하고 대화 상자를 닫으십시오.
      구성에 서비스가 추가됩니다.
  3. 파일을 저장하십시오.

새 서비스를 호출하기 위해 서블릿 업데이트

  1. 엔터프라이즈 탐색기에서 CounterWebBundle > Java 자원 > src > com.ibm.ws.eba.servlet을 펼치십시오.
  2. CounterServlet.java를 두 번 클릭하여 편집기에서 여십시오.
  3. doGet() 메소드를 찾고 이를 다음 구현으로 바꾸십시오.
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		Greet greet;
    		try {
    			InitialContext ic = new InitialContext();
    			greet = (Greet) ic.lookup("osgi:service/"+Greet.class.getName());
    			response.getOutputStream().println("greet.getText()="+greet.getText());
    		} catch (NamingException e) {
    			e.printStackTrace(System.out);
    		}
    	}
  4. 기본 메뉴에서 소스 > 가져오기 구성을 클릭하십시오. Import 문이 업데이트됩니다.
  5. CounterServlet.java를 저장하십시오.

애플리케이션 배치

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

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

콘솔 보기( > 보기 표시 > 콘솔)로 전환하여 서버의 출력을 보십시오. 성공적인 출력은 CounterImpl.init()GreetImpl.init()로부터 출력을 표시합니다. 이는 Blueprint 파일에서 CounterImplGreetImpl Bean에 대한 초기화 메소드 항목을 기반으로 합니다.
[3/30/10 16:59:41:734 EDT] 00000072 StepStartBLA  A   CWWMH0300I: Starting business-level application "WebSphere:blaname=CounterApp".
[3/30/10 16:59:42:406 EDT] 00000072 webapp        I com.ibm.ws.webcontainer.webapp.WebGroupImpl WebGroup SRVE0169I: Loading Web Module: CounterWebBundle.
[3/30/10 16:59:42:453 EDT] 00000072 WASSessionCor I SessionContextRegistry getSessionContext SESN0176I: Will create a new session context for application key default_hostCounterWebBundle
[3/30/10 16:59:42:468 EDT] 00000072 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/30/10 16:59:42:468 EDT] 00000072 FileLocatorIm E   CWPST0164E: The CounterWebBundle composition unit is not found.
[3/30/10 16:59:42:500 EDT] 00000072 StepStartBLA  A   CWWMH0196I: Business-level application "WebSphere:blaname=CounterApp" was started successfully.
[3/30/10 16:59:42:500 EDT] 00000016 SystemOut     O CounterImpl.init() called
[3/30/10 16:59:42:500 EDT] 00000016 SystemOut     O GreetImpl.init() called
NoteColonSymbol CounterImpl.init()GreetImpl.init()로부터의 출력이 콘솔 출력에 표시되지 않는 경우, 애플리케이션의 시작 또는 배치 동안 오류 메시지에 대한 출력을 확인한 후 Bean 및 서비스 정의에서 가능한 오류를 위해 Blueprint 파일을 확인하십시오.

학습 체크포인트

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

이 학습에서 다음 주제에 대해 학습했습니다.
  • 다른 Bean을 사용하는 Bean에 대한 코드 작성 방법.
  • 종속성 인젝션을 사용하여 변수를 초기화하기 위한 Blueprint 컨테이너를 지시하는 Blueprint 구성 파일에 특성을 정의하는 방법.
< 이전 | 다음 >
주제 유형을 표시하는 아이콘 학습서 학습 주제
Information Center의 이용 약관 | 피드백

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

파일 이름: counter_lesson7.html