0

概括

我们有一个中央 LDAP 服务器,我们部署的 Java Web 应用程序应该连接到该服务器。我们的 JUnit 测试依赖于 LDAP 存储库中的特定数据,因此它们需要连接到嵌入式 ApacheDS LDAP 服务器,并以示例数据集为基础。当我们部署我们的 webapp 时,我们如何确保 ApacheDS 服务器不会启动?

细节

我们正在使用 Spring 安全性,并在 ldap-context.xml 中有以下行来启动嵌入式 LDAP 服务器:

<security:ldap-server root="dc=test,dc=com" port="33389" ldif="classpath:EmbeddedServerRoot.ldif" />

目前,我们的 web.xml 引用了这个测试上下文文件和我们的顶级 application-context.xml:

    <context-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>
           classpath:ldap-context.xml
           classpath:application-context.xml 
       </param-value>
   </context-param>

我们需要确保在运行 JUnit 测试以及直接从 eclipse(通过 WTP)运行 webapp 时包含 ldap-context.xml,但在打包 war 并将其部署到服务器时排除。

我们使用 maven 作为构建工具。我们可以很容易地为我们的 JUnit 测试处理这种情况,方法是确保它们在上下文配置中包含两个 spring 上下文文件:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:ldap-context.xml", "classpath:application-context.xml" })
public class TestStuff {
}

然后,我们的 web.xml 将只包含 application-context.xml,除了一件事——从 WTP 运行时这不起作用——在这种情况下我们也需要启动嵌入式服务器。有什么建议么?

4

2 回答 2

1

如果您使用的是 Maven,为什么不使用 Assembly 插件来管理您的环境部署。看起来您的 spring 文件并不那么复杂,因此您可以拥有一个没有 ldap-context.xml 引用的通用 spring 文件,然后是一个具有 ldap 引用的特定于测试的版本。配置并运行程序集时,环境特定文件将覆盖通用版本,然后您可以部署打包的应用程序。

于 2008-10-16T20:26:10.313 回答
0

另一种可能性是使用 pom 中的一些属性和过滤的 spring bean 文件,为 bean 定义别名以在环境之间切换。但是您需要在配置中同时使用两个 bean,但您将使用其中一个。

于 2008-10-16T22:29:20.957 回答