2012-05-10 2 views
3

아래와 같이 보이는 JSF 관리 빈에 대한 매우 복잡한 구성 파일이 있습니다.
어떤 종류의 CDI 구성으로 변환 할 수있는 방법이 있습니까?
@Inject을 사용하면 구성 파일에서 값을 초기화하지 않습니다. CDI를 사용하여 JSF가 아닌 초기화 할 수 있기 때문입니다. :)관리 속성을 사용하여 JSF를 CDI로 변환

<?xml version="1.0" encoding="UTF-8"?> 
<faces-config version="1.2" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"> 

    <managed-bean> 
     <managed-bean-name>AbcConfig</managed-bean-name> 
     <managed-bean-class>com.a.b.c.AbcConfigFactory</managed-bean-class> 
     <managed-bean-scope>application</managed-bean-scope> 
     <managed-property> 
     <property-name>abcSites</property-name> 
     <list-entries> 
      <value-class>com.a.b.c.SiteConfigBean</value-class> 
      <value>#{SiteConfig$A}</value> 
      <value>#{SiteConfig$B}</value> 
     </list-entries> 
     </managed-property> 
    </managed-bean> 


    <managed-bean> 
     <managed-bean-name>SiteConfig$A</managed-bean-name> 
     <managed-bean-class>com.a.b.c.SiteConfigBean</managed-bean-class> 
     <managed-bean-scope>none</managed-bean-scope> 
     <managed-property> 
     <property-name>siteName</property-name> 
     <value>A</value> 
     </managed-property> 

     <managed-property> 
     <property-name>starConfig</property-name> 
     <property-class>com.a.b.c.StarConfigBean</property-class> 
     <value>#{StarConfig$A}</value> 
     </managed-property> 
    </managed-bean> 

    <managed-bean> 
     <managed-bean-name>SiteConfig$B</managed-bean-name> 
     <managed-bean-class>com.a.b.c.SiteConfigBean</managed-bean-class> 
     <managed-bean-scope>none</managed-bean-scope> 
     <managed-property> 
     <property-name>siteName</property-name> 
     <value>B</value> 
     </managed-property> 

     <managed-property> 
     <property-name>starConfig</property-name> 
     <property-class>com.a.b.c.StarConfigBean</property-class> 
     <value>#{StarConfig$A}</value> 
     </managed-property> 
    </managed-bean> 

    <managed-bean> 
     <managed-bean-name>StarConfig$A</managed-bean-name> 
     <managed-bean-class>com.a.b.c.StarConfigBean</managed-bean-class> 
     <managed-bean-scope>none</managed-bean-scope> 
     <managed-property> 
     <property-name>siteName</property-name> 
     <value>A</value> 
     </managed-property> 
    </managed-bean> 
</faces-config> 

답변

1

CDI 사양의 초기 버전은 그것에서 XML 구성 콩을했다하지만 최근 스펙의 향후 버전 (AFAIK)에 다시 포함시킬 나중에 제거되었습니다.

따라서 짧은 대답은입니다. 아니요, XML을 사용하여 CDI 빈을 구성 할 수 없습니다 (CDI와 JSF는 서로 다른 두 가지 이유로 변경하지 않고 JSF 구성 파일을 재사용 할 수 없습니다). - 분명히).

의 솔루션은 Seam Solder과 함께 제공되며,이 기능은 CDI의 확장 메커니즘을 사용하여 해당 기능을 추가합니다. 그러나 CDI 빈에 맞게 구성을 다시해야합니다. 문제 도메인에 대해 아무것도 모른 채

는 :

는 XML 구성 나는, 실제 요구 사항에 의해 강제 하지 (다른 배포 시나리오에 대해 서로 다른 배선을 가진 같은)이다 역사적인 잔존 어떤 종류의 경우 XML을 덤프하고 CDI의 타입 안전 주석 기반 방식으로 전환하는 것이 좋습니다. 테스트를위한 다른 배선과 같은 모든 주류 용도에 대한 개념이 있으며, XML로 "코딩"을 수행해야하는 부담으로부터 해방됩니다.

XML 기반 구성이 정말로 필요하거나 여전히 필요하다면 Seam Solder를 사용하십시오.

+0

** 우리가 XML 구성을 사용하여 응용 프로그램을보다 쉽게 ​​구성 할 수 있다고 생각합니다. 그러나 나는 여기에서 확실하지 않다. – Pierre

관련 문제