2017-02-09 35 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