目标错误“ ORA-28040:无匹配的身份验证协议异常” 我已经扩展了基本DatasourceFactory([Apache Commons] DBCP),如下所示: 公共类MyFactory扩展了BasicDataSourceFactory { 公共myfactory(){} @Override 公共对象

问题描述 投票:0回答:0
public class MyFactory extends BasicDataSourceFactory { public MyFactory () {} @Override public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment) throws SQLException { return super.getObjectInstance(obj, name, nameCtx, environment); } }

我在context.xml中使用该类作为我的资源定义中的工厂。

<Resource name="MyResource" auth="Container" type="javax.sql.DataSource" factory="path.to.my.factory.MyFactory" username="myusername" password="mypassword" driverClassName="oracle.jdbc.OracleDriver" url="myUrl" maxTotal="8" maxIdle="4" defaultAutoCommit="true" removeAbandonedOnBorrow="true" removeAbandonedOnMaintenance="true" removeAbandonedTimeout="60" validationQuery="SELECT 1 FROM DUAL"> </Resource>
然后我尝试检索

Myresource

Context envCtx = (Context) new InitialContext().lookup("java:comp/env"); ds = (DataSource) envCtx.lookup("MyResource"); ds.getConnection().setAutoCommit(false);
数据源似乎可以创建确定,因为

DDS具有context.xml中定义的所有属性(用户,密码,URL,驱动程序...)。但是,当我致电GetConnection时,我会得到ora-28040error

.
。
wow,如果我从数据源资源的定义中删除该行(我认为它将使用通用工厂),则GetConnection可以正常工作。我想念什么?
根据

oracleDocumentation。 我尝试了一些最新版本的ojdbc8,所以我的pom.xml

看起来像:

factory="path.to.my.factory.MyFactory"

或:

<!-- mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 --> <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>23.5.0.24.07</version> </dependency> 我使用Apachetomcat8.5.76.

我终于自己找到了解决方案。问题在于,我必须从org.apache.tomcat.dbcp.dbcp2orgache.apache.apache.apmace.commons.commons.dbcp2扩展

basicdatasourcefactory
。显然,这两个类别都存在一些差异,并且不会以相同的方式管理身份验证。希望它有帮助
    

java oracle-database tomcat8 ojdbc apache-commons-dbcp
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.