4

我有一个相当典型的 JavaEE 应用程序,使用 EJB3、seam 组件、spring bean 和 JSF 组成,所有这些都打包到一个 ear 文件中的几个 jar 和 war 文件中。对于 JavaEE,我们自然有许多 XML 文件作为应用程序的一部分。其中一些 XML 文件使用 DTD(seam)进行验证,一些使用模式进行验证。

作为从示例和其他项目中获取的大多数文件,所有 DTD 和模式都引用项目的站点,默认 DTD 或模式所在的位置。问题来了:出于某种原因,JBoss 站点今天错过了接缝 DTD(检查http://www.jboss.com/products/seam/components-1.1.dtdhttp://www.jboss.com/products /seam/components-1.2.dtd,http://www.jboss.com/products/seam/components-2.0.dtd)。_ 由于 JBoss 服务器在引导时使用此位置验证 XML,因此应用程序部署失败。

我的问题是:在这种情况下,我应该将 DTD 和定义文件放在哪里?我看到三个选项:

  1. 和我之前一样,使用默认位置。因为这意味着我现在将 JBoss、Sun、Spring 和任何其他供应商的稳定性添加到我的系统中,以防我需要重新部署应用程序,我不想这样做。
  2. 将所有 DTD 和模式文件复制到我的服务器,让 URLS 指向我控制的服务器。
  3. 将所有 DTD 和架构文件复制到我的应用程序或应用服务器,并在本地使用它们。

我倾向于使用选项#3,因为它提供了对文件的完全控制,没有网络依赖。在我们所做的测试中,它甚至显着减少了服务器的引导时间——显然 XML 解析器不会缓存定义。走这条路有什么我想念的吗?

4

2 回答 2

0

不,这是正确的做法。第一个应该只用于乱七八糟或玩代码,但不能用于任何严重的事情,第二个与第三个相比没有优势,同时也更复杂。

于 2009-04-20T20:17:30.570 回答
0

真正的问题是:您真的需要验证 xml 文件吗?在大多数情况下,验证不是在生产代码中完成的——大多数时候它太慢了。

如果您真的想验证,请选择选项#3。

于 2009-04-22T16:26:48.940 回答