2017-02-09 8 views
1

В настоящее время у меня есть весенний проект с applicationContext.xml, который определяет некоторые бобы, которые используются для инъекций коды:Перемещение зерна определяется в 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, поэтому я предполагаю, что эти бобы могут быть объявлены в ejb-jar.xml или jboss-ejb3.xml, но я не могу понять, как это сделать.

Возможно ли это сделать, и может ли кто-нибудь дать мне несколько указателей на то, как это сделать?

EDIT: классы ExampleXClientImpl не определены в самом проекте, они определены в зависимости от проекта. Я мог бы адаптировать эту зависимость, но я бы предпочел, если это не обязательно.

ответ

2

Если ваша цель состоит в том, чтобы сделать из EJB в этих бобов, то я хотел бы попробовать делать смесь XML и аннотации:

-jar.xml EJB

Здесь вы определяете свойства среды:

<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 и весне. Не очень полезно, чтобы эти 2 были смешаны на моем рабочем месте: p И еще раз спасибо за вашу помощь. – HerrSubset