2017-02-09 33 views
1

目前我有與applicationContext.xml中的彈簧的項目,定義了被用於代碼注入一些豆:移動豆到JBoss配置

<bean class="com.example.Example1ClientImpl"> 
    <constructor-arg type="java.lang.String" value="${EXAMPLE1_URL}" /> 
</bean> 

<bean class="com.example.Example2ClientImpl"> 
    <constructor-arg type="java.lang.String" value="${EXAMPLE2_URL}" /> 
</bean> 

欲重構這個代碼轉換成另一個不使用彈簧的項目。它運行在JBoss服務器上,所以我假設這些bean可以在ejb-jar.xmljboss-ejb3.xml中聲明,但我無法弄清楚。

是否有可能做到這一點,有人可以給我一些指導如何做到這一點?

編輯:ExampleXClientImpl類沒有在項目本身中定義,它們是在項目的依賴項中定義的。我可以適應這種依賴性,但我更喜歡如果沒有必要。

回答

2

如果你的目的是使EJB的掉那些豆子的話,我會嘗試做XML和註釋的混合:

ejb-jar.xml中

在這裏定義你的環境屬性:

<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" version="3.0" metadata-complete="false"> 
    <enterprise-beans> 
    <session> 
     <ejb-name>Configuration</ejb-name> 
     <env-entry> 
     <env-entry-name>EXAMPLE1_URL</env-entry-name> 
     <env-entry-type>java.lang.String</env-entry-type> 
     <env-entry-value>url1</env-entry-value> 
     </env-entry> 
     <env-entry> 
     <env-entry-name>EXAMPLE2_URL</env-entry-name> 
     <env-entry-type>java.lang.String</env-entry-type> 
     <env-entry-value>url2</env-entry-value> 
     </env-entry> 
    </session> 
    </enterprise-beans> 
</ejb-jar> 

的ejb

在這裏,您創建一個Singleton(因爲這是默認的Spring作用域)。如果你想有豆有EJB的默認prototype範圍,那麼你可以用Stateless,而不是將其標註爲:

import javax.annotation.Resource; 
import javax.ejb.Singleton; 

@Singleton 
public class Example1ClientImpl{ 

    @Resource(name = "EXAMPLE1_URL") 
    private String url; 

    ... 

} 

@Singleton 
public class Example2ClientImpl{ 

    @Resource(name = "EXAMPLE2_URL") 
    private String url; 

    ... 

} 
+0

感謝您的輸入。看來我沒有正確解釋我的問題,我的不好。 ExampleXClientImpl類沒有在項目本身中定義,它們是在項目的依賴項中定義的。我可以適應這種依賴性,但我更喜歡如果沒有必要。 – HerrSubset

1

我決定使用@Produces,我忘了,這個存在了。解決方案看起來像這樣:

public class ClientProducer { 
    private static final String CLIENT1_ENDPOINT_VAR = "CLIENT1_URL"; 
    private static final String CLIENT2_ENDPOINT_VAR = "CLIENT2_URL"; 

    @Produces 
    public Example1Client produceExample1Client() { 
     String uri = System.getProperty(CLIENT1_ENDPOINT_VAR); 
     return new Example1ClientImpl(uri); 
    } 

    @Produces 
    public Example2Client produceExample2Client() { 
     String uri = System.getProperty(CLIENT2_ENDPOINT_VAR); 
     return new Example2ClientImpl(uri); 
    } 
} 
+0

好點。它基本上相當於Spring的@Configuration –

+0

謝謝,我對JEE和spring還是很新的。在我的工作場所混合使用2並不是很有幫助:p再次感謝您的幫助。 – HerrSubset