当我编写Java EE应用程序时,我使用JBoss Datasources来控制部署使用的数据库。例如。 dev版本将使用一次性的hibernate数据库,ref和ops将使用稳定的MySQL部署。我还使用MBeans来配置各种其他服务和规则。
现在我正在使用Spring,我想要相同的功能 - 部署相同的代码,但配置不同。至关重要的是,我还希望单元测试仍然可以使用存根服务运行。我的问题是 - 在JBoss中,有一种方法可以使用生活在WAR / EAR之外的文件注入配置,并在测试资源中包含这些文件。
答案 0 :(得分:2)
通过将名为xxx-service.xml的文件放入jboss的deploy目录,可以将对象添加到JNDI上下文中。然后,应用程序可以通过JNDI查找值。在下面的示例中,在java:/ modes / deployment中添加了字符串“development”。要在单元测试中使用JNDI,请使用org.springframework.mock.jndi包。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE server PUBLIC "-//JBoss//DTD MBean Service 4.0//EN"
"http://www.jboss.org/j2ee/dtd/jboss-service_4_0.dtd">
<server>
<mbean code="org.jboss.naming.JNDIBindingServiceMgr"
name="c3po.naming:service=jndi-bindings">
<attribute name="BindingsConfig" serialDataType="jbxb">
<jndi:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jndi="urn:jboss:jndi-binding-service:1.0"
xs:schemaLocation="urn:jboss:jndi-binding-service:1.0 resource:jndi-binding-service_1_0.xsd"
>
<jndi:binding name="java:/modes/deployment">
<jndi:value type="java.lang.String">development</jndi:value>
</jndi:binding>
<jndi:binding name="java:/sites/abc">
<jndi:value type="java.lang.String">dev.site.example.com</jndi:value>
</jndi:binding>
<!-- Examples:
<jndi:binding name="urls/jboss-home">
<jndi:value type="java.net.URL">http://www.jboss.org</jndi:value>
</jndi:binding>
<jndi:binding name="hosts/localhost">
<jndi:value editor="org.jboss.util.propertyeditor.InetAddressEditor">
127.0.0.1
</jndi:value>
</jndi:binding>
<jndi:binding name="maps/testProps">
<java:properties xmlns:java="urn:jboss:java-properties"
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:schemaLocation="urn:jboss:java-properties resource:java-properties_1_0.xsd">
<java:property>
<java:key>key1</java:key>
<java:value>value1</java:value>
</java:property>
<java:property>
<java:key>key2</java:key>
<java:value>value2</java:value>
</java:property>
</java:properties>
</jndi:binding>
-->
</jndi:bindings>
</attribute>
<depends>jboss:service=Naming</depends>
</mbean>
</server>