2009-04-20 34 views
4

我有一个相当典型的JavaEE应用程序,它使用EJB3,seam组件,spring beans和JSF组成,所有这些应用程序都被打包成耳朵文件中的几个jar和war文件。当然对于JavaEE来说,我们有许多XML文件作为应用程序的一部分。其中一些XML文件使用DTD(seam)进行验证,另一些使用模式进行验证。把DTD和模式文件放在何处

作为大多数从示例和其他项目中获取的文件,所有的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解析器不会缓存定义。通过走这条道路,我错过了吗?

回答

0

不,这是正确的做法。第一个应该只是用来混淆或玩代码,但不应该用于任何严肃的事情,第二个应该没有第三个优势,同时也更复杂。

0

真正的问题是:你真的需要验证xml文件吗? 在大多数情况下,验证不在生产代码中完成 - 大部分时间太慢。

如果您确实想验证,请转到选项#3。

+0

如何在JBoss中关闭验证?我不是那个调用XML解析器的人。 – 2009-04-22 18:04:22