gpt4 book ai didi

java - Oracle JDBC 驱动程序未在遗留 Web 应用程序中使用 JNDI 连接到数据库

转载 作者:行者123 更新时间:2023-11-28 23:40:05 25 4
gpt4 key购买 nike

不是 Java 专家 - 事实上,正在处理将导致新项目的遗留项目。也就是说,目前正在尝试创建旧项目并连接到测试数据库。我可以直接通过 Netbeans 服务面板或通过 SQLDeveloper 正常连接。

当前使用的服务器是 Apache Tomcat 7.0.42。

Oracle JDBC 驱动程序是 ojdbc7.jar - 我知道,很老了,但是为了通过这个文件获得连接,它被包含在源代码中。

Java 平台是 JDK 1.7,尽管这是我的 Netbeans 副本的默认平台 - 同样,这是一个非常古老的项目,我相信它使用的是 DTD Web Application 2.3,所以我什至可能使用错误的 JDK 进行编译,尽管我只看到我应该能够忽略的折旧和限制警告(它们似乎更多地位于源代码包中,而不是项目的这方面。)

项目本身应该可以正常工作 - 我通过版本控制将其拉下。

由于源代码不包含 JNDI 的实际配置,我不得不进行我的研究(仅用于常规的 MySQL 数据库连接;JNDI 的这个世界对我来说是全新的。)- 我最终找到了以下内容建议修改 server.xml(在 Tomcat 上)和 context.xml(在 Web 应用程序中)的链接。 http://www.microdeveloper.com/html/JNDI_Orcl_Tomcat1p.html - 尽管如此,我不确定这是否是开始配置数据源的正确方法。

服务器.XML

 <Resource name="jdbc/travel"
aunt="Container"
type="oracle.jdbc.pool.OracleDataSource"
driverClassName="oracle.jdbc.OracleDriver"
factory="oracle.jdbc.pool.OracleDataSourceFactory"
url="jdbc:oracle:thin:@//dbname.host.com:1521/servicename.host.com"
user="travel"
password="password"
maxActive="20"
maxIdle="10"
maxWait="-1"
/>

上下文.xml

    <ResourceLink global="jdbc/travel" name="jdbc/travel" type="oracle.jdbc.pool.OracleDataSource"/>

Web.xml(不确定是否需要)

<resource-ref>
<description>Travel</description>
<res-ref-name>jdbc/travel</res-ref-name>
<res-type>oracle.jdbc.pool.OracleDataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

我不确定我使用的类型、身份验证或工厂是否正确(还必须从上面的链接更改 driverClassName - 当我在 NetBeans 中测试连接时,属性将 oracle.jdbc.OracleDriver 列为驱动程序名称。)为了进一步混淆,我不确定我是否理解为什么 url 在 @ 之后包含//或者服务是如何工作的——但这只需要我做更多的研究。我应该点击的架构称为旅行(用户名也是如此)。

我不一定包括实际启动连接的类,因为它们很长并且调用许多其他类(不同的数据库取决于配置、不同的工具、模式、表等)我可以包括方法在我的 Jdbc 类中(省略了 log4j 的东西),但是:

private transient Connection conn ;
private transient ResultSet rs ;
private transient Statement stmt ;
private transient Context initContext = null;
private DataSource ds = null;
private String jndiName = null;
public Jdbc( )
{
super ( ) ;
} ;
public Jdbc( final String _jdniName ) throws TravelException , InstantiationException , IllegalAccessException , ClassNotFoundException
{
super ( ) ;
this.jndiName = _jdniName;
}
public void connectToDatabase( ) throws TravelException
{
try
{
this.disconnectFromDatabase ( ) ;
if (this.ds==null)
{
this.initContext = new InitialContext();
Context envCtx = (Context) initContext.lookup("java:comp/env");
this.ds = (DataSource) envCtx.lookup(this.jndiName);
}
this.conn = this.ds.getConnection ( );
}
catch ( final Exception e )
{
this.conn=null ;
throw new TravelException ( e ) ;
}
}

...

我不确定是环境导致问题还是我的 XML 配置 - 我一直遇到的错误是:

 java.sql.SQLException: Io exception: Message file 'oracle.net.mesg.Message' is missing.

这似乎指向一个根本没有被报告的问题——我假设它实际上没有连接到服务器。

如果需要更多详细信息,我很乐意提供我所能提供的信息 - 如果此类问题也不符合 Stack Overflow M.O.,我深表歉意 - 我已经无能为力了!

只是总结我的问题 - 我在通过我的代码连接到 Oracle 10g 数据库时遇到问题,但是,我可以使用 SQLDeveloper 或 Netbeans 中的服务面板使用相同的 URL 和登录信息直接连接正常 - 我相信我的问题在于我对 Web 应用程序的 XML 配置,但我不确定哪里出错了。即使我不再将 oracle jar 包含在我的编译时库中,我似乎也会收到相同的错误消息,这很奇怪,因为当它被包含时我可以在 IDE 的库文件夹中看到它 - 奇怪的是在我的 Tomcat 文件夹中找不到它。也许问题在于未正确包含驱动程序?

最佳答案

原来这是一个 IDE 问题 - JDBC 驱动程序没有像我上面所说的那样传递到服务器。我最终永久关闭了服务器并关闭了 Netbeans - 从那里我启动了 Eclipse 并在不同的 Tomcat 实例中测试了应用程序 - 服务器启动一切正常。关闭它并搬回 Netbeans;服务器正在运行。

IDE问题

关于java - Oracle JDBC 驱动程序未在遗留 Web 应用程序中使用 JNDI 连接到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20550049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com