【问题标题】:Isn't it necessary to mention the name of archive in the Resource tag?Resource标签里不是必须要提档案的名字吗?
【发布时间】:2012-07-16 05:02:34
【问题描述】:

为了在使用Tomcat 时连接到derby 数据库,我下载了the jar of core Apache Derby database engine (version : 10.9.1.0)。我把这个jar文件保存在Tomcat的lib文件夹下。

现在有人告诉我在 Tomcatcontext.xml 中添加以下内容。

<Resource name="jdbc/PollDatasource" auth="Container" type="javax.sql.DataSource"
    driverClassName="org.apache.derby.jdbc.EmbeddedDriver" 
    url="jdbc:derby://localhost:1527/polldatabase;create=true"
    username="suhail" password="suhail"
    maxActive="20" maxIdle="10" maxWait="-1" />
  • 这个标签有什么作用?我的意思是它的用途是什么?

  • 虽然我下载的 Jar 文件包含 org.apache.derby.jdbc.EmbeddedDriver 模式,但我在这个标签中提到了我下载的 jar?是不是需要在标签里加上存档的名字?

【问题讨论】:

  • java 可执行文件必须在其“类路径”上包含它使用的所有 jar。尝试加载 .class 然后遍历所有这些 jar 并查找 org.apache.derby.jdbc.EmbeddedDriver。 (当然这样做效率更高,一个jar可以在META-INF下有一个索引,等等。)
  • @Joop Eggen 如何检查这个 jar 是否在我的类路径中。我刚刚下载并把那个 jar 放到 lib 文件夹下。
  • 这确实是一个关于 Web 应用程序中的类路径的一般 Tomcat/JavaEE 问题,并且完全不是针对 Derby。所以我认为你应该重新标记它以删除“数据库”和“德比”标签。

标签: java database jakarta-ee tomcat derby


【解决方案1】:

一旦你在 Tomcat 的 lib 文件夹下放了一个 jar,Tomcat 会自动加载它并将它放在类路径中,这样所有运行在 Tomcat 上的应用程序都知道这个 jar。

XML 中的定义仅仅意味着您定义了一个数据源。应用程序服务器中使用数据源来管理数据库连接池,因此您不必这样做,它是首选方式,而不是使用普通的 JDBC。

在您定义的 xml 中:driverClassName="org.apache.derby.jdbc.EmbeddedDriver" 并且由于您将包含此类的驱动程序 jar 放在 lib 文件夹中,它会知道在哪里查找它,而无需告诉它 jar 在哪里。

请注意,将 jar 放在 Tomcat lib 下并不总是最好的解决方案,因为就像我说的那样,tomcat 下的所有应用程序都会知道这个 jar,如果有一个应用程序已经使用这个 jar 的不同版本,这可能会导致冲突。

更好的解决方案可能是将 jar 放在 WEB-INF/lib 下,这样只有该应用程序知道该 jar。

【讨论】:

    猜你喜欢
    • 2018-11-02
    • 1970-01-01
    • 2014-10-08
    • 2010-11-15
    • 2011-10-10
    • 1970-01-01
    • 2021-01-24
    • 2018-09-13
    • 2020-09-17
    相关资源
    最近更新 更多