Weblogic 10.3.1 + Oracle DB 10g:LOB插入时的用户名/密码无效

时间:2011-06-17 23:16:31

标签: oracle hibernate spring weblogic ora-01017

我正在使用带有Oracle DB 10g的Weblogic 10.3.1上的Hibernate 3.3.SP1 + Spring 1.2.6开发一个项目。最近,我们将Hibernate从v3.0.5迁移到3.3.SP1。尝试插入LOB(BLOB或CLOB)时发生了一个奇怪的错误(之前没有发生过)。我收到以下错误:

189202 [[ACTIVE] ExecuteThread: '10' for queue: 'weblogic.kernel.Default (self-tuning)'] 
     WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: null
189202 [[ACTIVE] ExecuteThread: '10' for queue: 'weblogic.kernel.Default (self-tuning)'] 
     ERROR org.hibernate.util.JDBCExceptionReporter - Pool connect failed : 
     weblogic.common.ResourceException: 
     my.wls.datasource(dtJndiName): 0:
Could not connect to 'oracle.jdbc.OracleDriver'.

返回的消息是:

ORA-01017: invalid username/password; logon denied

It is likely that the login or password is not valid.
It is also possible that something else is invalid in
    the configuration or that the database is not available.

之后,数据源“损坏”,并且在连续10次错误连接尝试后,Oracle锁定帐户。

我必须注意,除了Weblogic中预先配置的数据源之外,应用程序绝对没有用于连接数据库的代码。由于应用程序工作正常,直到在DB中插入LOB,因此可以安全地假设数据源已正确配置。

示例映射(我无法发布确切的hbm.xml)是:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="my.model.persist">
    <class name="LobTable" table="LOB_TABLE">
        <id name="id" type="long" column="RS_ID" unsaved-value="null" length="10">
            <generator class="native"></generator>
        </id>   
        <property name="blob1" type="org.springframework.orm.hibernate3.support.BlobByteArrayType" column="BLOB1"></property>
        <property name="blob2" type="org.springframework.orm.hibernate3.support.BlobByteArrayType" column="BLOB2"></property>
    </class>    
</hibernate-mapping>

代码尝试在三个表中保留一些LOB值。尝试保存到第一个时出现错误。如果我删除了保存到第一个的代码,则错误会出现在第二个,依此类推。

我到目前为止找到的唯一解决方案是将数据源连接的初始容量设置为最大连接数(15)。在这种情况下,系统似乎稳定。但是这个解决方案是不可接受的,因为我们不了解问题的本质。

我在四种不同的环境(Weblogic + Oracle)中尝试过这种方法。该错误并不总是以相同的频率出现(在某些系统中,它会在未能插入LOB之前工作一段时间)。此外,在调试时我注意到如果我增加日志输出(我只是在log4j中添加了更多的调试消息),错误就会停止显示。这让我觉得它可能是WLS和DB之间的同步问题。

你有什么想法吗?如果您需要更多说明,请告诉我。


启用Hibernate查询输出并更改hbm.xml以使LOB作为最后声明的字段后的结果仍然是同一个错误:

Hibernate: select hibernate_sequence.nextval from dual
Hibernate: select hibernate_sequence.nextval from dual
Hibernate: insert into LOB_TABLE_1 (field20, field21, field22, field23, field24, field25, field26, field27, field28, field29, field30, field31, LOB_FIELD_3, LOB_FIELD_4, ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into LOB_TABLE_2 (field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, LOB_FIELD_1, LOB_FIELD_2, ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
105039 [[ACTIVE] ExecuteThread: '11' for queue: 'weblogic.kernel.Default (self-tuning)'] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: null
105039 [[ACTIVE] ExecuteThread: '11' for queue: 'weblogic.kernel.Default (self-tuning)'] ERROR org.hibernate.util.JDBCExceptionReporter - Pool connect failed : weblogic.common.ResourceException: 
    my.wls.datasource(dtJndiName): 0:
 Could not connect to 'oracle.jdbc.OracleDriver'.

 The returned message is: ORA-01017: invalid username/password; logon denied

 It is likely that the login or password is not valid.
 It is also possible that something else is invalid in
 the configuration or that the database is not available.

0 个答案:

没有答案