2012-05-10 6 views
3

У нас есть очень сложный файл конфигурации для управляемых bean-компонентов JSF, который выглядит следующим образом.
Есть ли способ конвертировать это в какую-то конфигурацию CDI?
Теперь, когда мы используем @Inject на AbcConfigFactory, он не инициализирует значения из файла конфигурации. Я думаю, это потому, что мы используем 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

Первоначальная версия КДИ спецификации была XML-конфигурации бобы в нем, но он был удален позже, просто чтобы быть повторно включены в будущих версиях спецификации недавно (AFAIK).

Итак, короткий ответ: Нет, вы не можете использовать XML для настройки CDI бобы (и как CDI и JSF являются две разные вещи, вы не могли бы повторно использовать конфигурационный файл JSF без изменений - очевидно).

Решение проблемы поставляется с кодом Seam Solder, в котором используется механизм расширения CDI, чтобы добавить именно эту функциональность (и многое другое). Но вам все равно придется переделать свою конфигурацию, чтобы она соответствовала вашим CDI-компонентам.

Не зная ничего о вашей проблемной области:

Если XML-конфигурация является своим родом исторического реликта, который не вынужден реальные требования (например, имеющие различные токопроводящие для различных сценариев развертывания), я настоятельно рекомендуется сбрасывать XML и переключиться на подход, основанный на стандартном аннотации CDI. Существуют концепции для всех основных приложений (например, разные проводки для тестирования), и вы освобождаетесь от бремени «кодирования» в XML.

Если вам действительно нужна (или по-прежнему требуется) конфигурация на основе XML, Seam Solder - это ваш путь.

+0

Я ** думаю ** мы используем XML-конфигурацию, чтобы упростить настройку приложения. Но я не уверен здесь. – Pierre