SeamFramework.orgCommunity Documentation
지금까지 어노테이션을 사용하여 명시된 여러 가지 Web Beans의 예를 살펴보았습니다. 하지만 Web Bean을 정의하기 위해 어노테이션을 사용할 수 없는 경우가 종종 있습니다:
구현 클래스가 일부 기존 라이브러에서 비롯되었을 경우,
동일한 구현 클래스를 갖는 다수의 Web Beans이 있을 경우
이러한 경우, Web Beans는 두 가지 옵션을 제공합니다:
생산자 방식 작성 또는
XML을 사용하여 Web Bean 명시
다수의 프레임워크는 XML을 사용하여 Java 클래스 관련 메타테이터를 제공합니다. 하지만, Web Beans는 다양한 접근 방법을 사용하여 Java 클래스 이름, 영역, 방식을 대부분의 다른 프레임워크에 지정합니다. XML 요소 및 속성의 문자열 값으로 클래스 및 멤버 이름을 작성하는 대신, Web Beans는 XML 요소 이름으로 클래스 또는 멤버 이름을 사용하게 합니다.
이러한 접근 방법의 장점은 XML 문서에서 스펠링 오류가 나타나지 않게 하는 XML 스키마를 작성할 수 있다는 것입니다. 컴파일된 Java 코드에서 XML 스키마를 자동으로 생성하기 위한 도구를 만들 수 도 있습니다. 또는 통합된 개발 환경은 중간 생성 단계를 거치지 않고 동일한 검증을 실행할 수 있습니다.
각각의 Java 패키지의 경우, Web Beans는 해당 XML namespace를 지정합니다. namespace는 Java 패키지 이름에 urn:java:
를 덧붙이기하여 형성됩니다. com.mydomain.myapp
패키지의 경우, XML namespace는 urn:java:com.mydomain.myapp
입니다.
패키지에 속한 Java 유형은 패키지에 해당하는 namespace에 있는 XML 요소를 사용하여 참조합니다. 요소 이름은 Java 유형의 이름이 됩니다. 유형 영역 및 방식은 동일한 namespace에 있는 자식 요소에 의해 지정됩니다. 유형이 어노테이션되어 있을 경우, 멤버는 요소의 속성에 의해 지정됩니다.
예를 들어, 다음의 XML 부분에 있는 <util:Date/>
요소는 java.util.Date
클래스를 참조합니다:
<WebBeans xmlns="urn:java:javax.webbeans"
xmlns:util="urn:java:java.util">
<util:Date/>
</WebBeans
>
Date
는 심플 Web Bean임을 명시해야 할 모든 코드입니다! Date
의 인스턴스는 기타 다른 Web Bean에 의해 삽입될 수 있습니다:
@Current Date date
Web Bean 명시의 직접적인 자식 요소를 사용하여 범위, 배치 유형, 인터셉터 바인딩 유형을 명시할 수 있습니다:
<myapp:ShoppingCart>
<SessionScoped/>
<myfwk:Transactional requiresNew="true"/>
<myfwk:Secure/>
</myapp:ShoppingCart
>
이름 및 바인딩 유형을 지정하기 위해 동일한 방법을 사용합니다:
<util:Date>
<Named
>currentTime</Named>
</util:Date>
<util:Date>
<SessionScoped/>
<myapp:Login/>
<Named
>loginTime</Named>
</util:Date>
<util:Date>
<ApplicationScoped/>
<myapp:SystemStart/>
<Named
>systemStartTime</Named>
</util:Date
>
여기서 @Login
및 @SystemStart
는 바인딩 어노테이션 유형입니다.
@Current Date currentTime;
@Login Date loginTime;
@SystemStart Date systemStartTime;
일반적으로 Web Bean은 여러 바인딩 유형을 지원할 수 있습니다:
<myapp:AsynchronousChequePaymentProcessor>
<myapp:PayByCheque/>
<myapp:Asynchronous/>
</myapp:AsynchronousChequePaymentProcessor
>
인터셉터 및 데코레이터는 심플 Web Beans이므로, 기타 다른 심플 Web Bean같이 나타낼 수 있습니다:
<myfwk:TransactionInterceptor>
<Interceptor/>
<myfwk:Transactional/>
</myfwk:TransactionInterceptor
>
Web Beans는 삽입 지점에서 Web Bean을 지정할 수 있게 합니다. 예:
<myapp:System>
<ApplicationScoped/>
<myapp:admin>
<myapp:Name>
<myapp:firstname
>Gavin</myapp:firstname>
<myapp:lastname
>King</myapp:lastname>
<myapp:email
>gavin@hibernate.org</myapp:email>
</myapp:Name>
</myapp:admin>
</myapp:System
>
<Name>
요소는 초기화 영역값 설정과 함께 @Dependent
범위의 심플 Web Bean 및 Name
클래스를 명시합니다. Web Bean은 특정한 컨테이너 생성 바인딩이 있으므로 명시된 특정 삽입 지점에만 삽입할 수 있습니다.
이러한 간단하지만 강력한 기능은 Web Beans XML 포맷이 Java 객체의 전체 그래프를 지정하는데 사용하게 합니다. 이는 완전한 데이터바인딩 솔루션이 아니지만, 근접한 솔루션입니다!
Java 개발자 이외나 또는 코드로 액세스할 수 없는 사람들에 의해 작성된 XML 문서 형식을 원하실 경우, 스키마를 제공해야 합니다. 스키마를 사용 또는 작성에 관해 Web Beans에 특정한 사항이 없습니다.
<WebBeans xmlns="urn:java:javax.webbeans"
xmlns:myapp="urn:java:com.mydomain.myapp"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:java:javax.webbeans http://java.sun.com/jee/web-beans-1.0.xsd
urn:java:com.mydomain.myapp http://mydomain.com/xsd/myapp-1.2.xsd">
<myapp:System>
...
</myapp:System>
</WebBeans
>
XML 스키마 작성은 다소 장황합니다. 따라서 Web Beans RI 프로젝트는 컴파일된 자바 코드에서 XML 스키마를 자동으로 생성하는 도구를 제공하게 됩니다.