2017-02-09 5 views
1

derzeit Ich habe eine Feder Projekt mit einem applicationContext.xml, die einige Bohnen definiert, die für die Code-Injektion verwendet werden:Verschieben Bohnen in applicationContext.xml definierten Konfiguration 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> 

ich diesen Code Refactoring wollen in ein anderes Projekt, das keinen Frühling benutzt. Es läuft auf einem JBoss-Server, also nehme ich an, dass diese Beans in ejb-jar.xml oder jboss-ejb3.xml deklariert werden können, aber ich kann nicht herausfinden, wie.

Ist es möglich, dies zu tun und kann mir jemand einige Hinweise geben, wie man das macht?

BEARBEITEN: Die Klassen von ExampleXClientImpl sind nicht im Projekt selbst definiert, sie sind in einer Abhängigkeit des Projekts definiert. Ich könnte diese Abhängigkeit anpassen, aber ich würde es vorziehen, wenn das nicht notwendig ist.

Antwort

2

Wenn Ihr Ziel ist es EJBs aus diesen Bohnen zu machen, dann würde ich versuchen, eine Mischung aus xml und Anmerkungen machen:

ejb-jar.xml

Hier können Sie Ihre Umgebung Eigenschaften definieren:

<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

Hier erstellen Sie eine Singleton (da dies der Standard-Spring-Bereich ist). Wenn Sie die Bohne haben wollen ist die Standard-prototype Umfang von EJB zu haben, dann können Sie es mit Stateless statt mit Anmerkungen versehen:

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

Danke für die Eingabe. Es scheint, dass ich mein Problem nicht richtig erklärt habe, mein Schlechter. Die Klassen von ExampleXClientImpl sind nicht im Projekt selbst definiert, sie sind in einer Abhängigkeit des Projekts definiert. Ich könnte diese Abhängigkeit anpassen, aber ich würde es vorziehen, wenn das nicht notwendig ist. – HerrSubset

1

entschied ich mich @Produces zu verwenden, ich habe vergessen, dass dies existierte. Die Lösung sieht in etwa so aus:

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

Guter Ort .. es ist im Grunde das Äquivalent von Spring @Configuration –

+0

Danke, ich bin immer noch ziemlich neu in JEE und Frühjahr. Es ist nicht wirklich hilfreich, dass die 2 an meinem Arbeitsplatz gemischt werden: p Und nochmals vielen Dank für Ihre Hilfe. – HerrSubset

Verwandte Themen