【问题标题】:Jetty Data Source, Hibernate, datasource not found码头数据源,休眠,未找到数据源
【发布时间】:2025-12-10 10:05:01
【问题描述】:

我正在尝试在 Jetty 7.4 中配置数据源。我能够在 Tomcat context.xml 中使用我的 webapp 成功完成此操作。

这是我在 jetty.xml 中的内容(这将是此 jetty 实例中的唯一应用程序,所以我不介意在服务器范围内使用数据库连接 - 我宁愿不必在内部配置它战争)。它位于最后一个 </Configure> 上方的最底部:

<New class="org.eclipse.jetty.plus.jndi.Resource" id="myDB">
    <Arg>
      <Ref id="Server"/>
    </Arg>
    <Arg>jdbc/myDB</Arg>
    <Arg>
        <New class="com.microsoft.sqlserver.jdbc.SQLServerDataSource">
            <Set name="URL">jdbc:sqlserver://SERVERNAME;databaseName=DATABASENAME;sendStringParametersAsUnicode=false</Set>
            <Set name="user">USERNAME</Set>
            <Set name="password">PASSWORD</Set>
        </New>
    </Arg>
</New>

在我的 webapp 的 WEB-INF/web.xml 中:

<resource-ref>
  <description>Database Connection</description>
  <res-ref-name>jdbc/myDB</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
</resource-ref>

最后,在我的 hibernate.cfg.xml 中:

<property name="connection.datasource">java:comp/env/jdbc/myDB</property>

然而,我收到了一个找不到数据源的错误,我还看到了以下 NameNotFoundException:

javax.naming.NameNotFoundException; remaining name 'env/jdbc/myDB'

当我在启用调试的情况下启动 Jetty 时,看起来它正在注册名称和所有内容,尽管我远非 Jetty 专家。我在这里错过了一步吗?还剩下什么?

【问题讨论】:

  • 我在配置数据源时也遇到了一些麻烦,您将数据源(SQL 文件)具体放在了哪里?另外,您所说的 jetty.xml 是您的特定项目之一还是来自 Jetty 配置的那个?

标签: hibernate jetty datasource jndi


【解决方案1】:

是的,这是一些应用程序服务器的奇特之处。有些需要在 JNDI 资源名称前附加“java:comp/env”,有些则不需要。我认为 Spring 甚至可以在您声明 JNDI 资源 bean(如数据源)时启用/禁用该前缀。

试试:

<property name="connection.datasource">jdbc/myDB</property>

在您的 Hibernate 配置中。

【讨论】:

  • 总是那么简单。谢谢!