I will test it out and let you know.
----- Original Message -----
From: "Werner Guttmann" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Wednesday, May 14, 2008 1:21 PM
Subject: Re: [castor-user] read-only connection for generating keys for
postgres.
Yes, driver-specific in that a few RDBMS do *not* support read-only
connections. But that should not be the case in your environment.
Let know whether using this property makes a difference for you ....
otherwise we'll have to add some code to how connections are being
obtained.
Werner
Stephen Ince wrote:
No. I did not. I see that it is driver specific. Hmmm. The error only
appeared when I used connection pooling.
Steve
----- Original Message ----- From: "Werner Guttmann"
<[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Wednesday, May 14, 2008 5:36 AM
Subject: Re: [castor-user] read-only connection for generating keys for
postgres.
Stephen,
have you had a look at
http://commons.apache.org/dbcp/configuration.html
and the 'defaultReadOnly' parameter in particular ?
Werner
Stephen Ince wrote:
Tomcat 4.1.36 comes with apache db common connection pooling. The
reason
that hsqldb,db2, oracle and mysql don't not see it, is that the
respective jdbc drivers must be handling the error case and doing the
switch from readOnly == true --> readOnly == false.
commons-dbcp-1.2.1.jar
commons-pool-1.3.jar
jdbc pool configuration
------------------------------------------------------------------------------
<Resource name="jdbc/ods" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/ods">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>8</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>120000</value>
</parameter>
<parameter>
<name>username</name>
<value>postgres</value>
</parameter>
<parameter>
<name>password</name>
<value>postgres</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.postgresql.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:postgresql://localhost:5432/ods</value>
</parameter>
<parameter>
<name>validationQuery</name>
<value>select count(*) from users</value>
</parameter>
<parameter>
<name>removeAbandoned</name>
<value>true</value>
</parameter>
<parameter>
<name>removeAbandonedTimeout</name>
<value>120</value>
</parameter>
<parameter>
<name>testWhileIdle</name>
<value>true</value>
</parameter>
<parameter>
<name>testOnReturn</name>
<value>true</value>
</parameter>
<parameter>
<name>numTestsPerEvictionRun</name>
<value>8</value>
</parameter>
<parameter>
<name>timeBetweenEvictionRunsMillis</name>
<value>500000</value>
</parameter>
<parameter>
<name>minEvictableIdleTimeMillis</name>
<value>500000</value>
</parameter>
</ResourceParams>
Steve
----- Original Message ----- From: "Werner Guttmann"
<[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Wednesday, May 14, 2008 3:45 AM
Subject: Re: [castor-user] read-only connection for generating keys for
postgres.
No problem. But let's think aloud a bit more: what connection pool are
you using, if I may ask ?
Werner
Stephen Ince wrote:
reset jdbc connection in
org.castor.persist.LocalTransactionContext.createConnection()
Hmm, trying to get my head around this .. ;-). I guess you are
saying
that - once a connection is being re-used - it will have a wrong
state
associated upon retrieval from the connection pool, correct ?
Ideally,
it would be nice if such code could be added to
Yes but I do not think it is really a bug in castor. The connection
pool
classes should reset the connections.
I did this in Castor because it was easier.
----- Original Message ----- From: "Werner Guttmann"
<[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Tuesday, May 13, 2008 4:07 AM
Subject: Re: [castor-user] read-only connection for generating keys
for
postgres.
Stephen Ince wrote:
FYI.
I was able to get my app working with castor/postgres and derby.
I am
using castor 1.01. It seems to be a lot faster than the current
release.
FIXES and work arounds.
1) Changed to using IDENTITY key generator from HIGH/LOW. Over a
period
of time (week) the high/low seems to get out of sync.
2) ReadOnly transaction issue. This is not really a castor issue
but
apache/db connection pooling issue. It is not resetting the
connections.
Work around.
reset jdbc connection in
org.castor.persist.LocalTransactionContext.createConnection()
Hmm, trying to get my head around this .. ;-). I guess you are
saying
that - once a connection is being re-used - it will have a wrong
state
associated upon retrieval from the connection pool, correct ?
Ideally,
it would be nice if such code could be added to
Database.close()/TransactionContext.close(), but that would imply
that
we woul dhave to force folks to close a Database instance (rather
than
waiting for it to be 'auto-closed'.
conn.setReadOnly(false)
3) Derby identity generator bug.
In
org.exolab.castor.jdo.keygen.IdentityKeyGenerator
public void supportsSqlType( int sqlType )
throws MappingException
{
if (sqlType != Types.INTEGER &&
sqlType != Types.NUMERIC &&
sqlType != Types.DECIMAL &&
sqlType != Types.BIGINT) {
throw new MappingException(
Messages.format("mapping.keyGenSQLType",
getClass().getName(), new Integer(sqlType)));
}
if (sqlType != Types.INTEGER &&
fName.equals("hsql")) {
throw new MappingException(
Messages.format("mapping.keyGenSQLType",
getClass().getName(), new Integer(sqlType)));
}
// ODS: fix
if (sqlType == Types.NUMERIC &&
fName.equals("derby")) {
throw new MappingException(
Messages.format("mapping.keyGenSQLType",
getClass().getName(), new Integer(sqlType)));
}
}
Steve
----- Original Message ----- From: "Stephen Ince"
<[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Wednesday, January 30, 2008 1:19 PM
Subject: Re: [castor-user] read-only connection for generating keys
for
postgres.
Werner,
I am having a hard time reproducing "read-only transaction"
case
outside of my webapp. I am also getting the read-only error for
MAX-KEY key generation. Any suggestions on how I can reproduce
it. I
am thinking about spawning a few threads and do not close the jdo
sessions. Sofar the single threaded case is not reproducible.
Here is a the stack trace for the webapp.
a.. This Database operation failed: : SQL exception in the key
generator org.exolab.castor.jdo.keygen.MaxKeyGenerator:
org.postgresql.util.PSQLException: ERROR: transaction is
read-only.:
ERROR: transaction is read-only
Caused by: org.postgresql.util.PSQLException: ERROR: transaction
is
read-only
at
org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryEx
ecutorImpl.java:1548)
at
org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutor
Impl.java:1316)
at
org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.ja
va:191)
at
org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Stat
ement.java:452)
at
org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(Abstract
Jdbc2Statement.java:351)
at
org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc
2Statement.java:255)
at
org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(Dele
gatingPreparedStatement.java:92)
at
org.exolab.castor.jdo.keygen.MaxKeyGenerator.generateKey(MaxKeyGenera
tor.java:162)
at
org.exolab.castor.jdo.engine.SQLStatementCreate.generateKey(SQLStatem
entCreate.java:384)
at
org.exolab.castor.jdo.engine.SQLStatementCreate.executeStatement(SQLS
tatementCreate.java:189)
at
org.exolab.castor.jdo.engine.SQLEngine.create(SQLEngine.java:313)
at
org.exolab.castor.persist.ClassMolder.create(ClassMolder.java:694)
at
org.exolab.castor.persist.LockEngine.create(LockEngine.java:532)
at
org.castor.persist.AbstractTransactionContext.walkObjectsToBeCreated(
AbstractTransactionContext.java:817)
at
org.castor.persist.AbstractTransactionContext.create(AbstractTransact
ionContext.java:777)
at
org.exolab.castor.jdo.engine.AbstractDatabaseImpl.create(AbstractData
baseImpl.java:302)
Steve
----- Original Message ----- From: "Werner Guttmann"
<[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Friday, January 25, 2008 6:22 PM
Subject: Re: [castor-user] read-only connection for generating
keys
for postgres.
I think I'll need a full test case so that I am able to run it
against e.g. Derby. Can you please supply us with one ?
Werner
Stephen Ince wrote:
Werner,
The read-only connection error showed up again on postgres.
So
"<param name="same-connection" value="false"/>" didn't resolve
the
problem. This problem only occurs with postgresql and derby.
Hsqldb, db2, oracle and sqlserver all work fine. I think it has
something to do with getting a connection from a pool that was
previously set to read-only.
Steve
A fatal error occurred while creating/updating
com.opendemand.security.UserProfi
le using SQL: UPDATE "users" SET
"user_name"=?,"title"=?,"fname"=?,"minitial"=?,
"lname"=?,"passwd"=?,"role"=?,"status"=?,"license"=?,"total_test_ran"=?,"test_ti
me"=?,"last_login_time"=?,"test_time_elapsed"=?,"group_id"=?,"company"=?,"accept
_license"=?,"email"=?,"url"=?,"referred_by"=?,"telephone"=?,"fax"=?,"address"=?,
"city"=?,"state"=?,"zipcode"=?,"country"=? WHERE "user_id"=?
org.postgresql.util.PSQLException: ERROR: transaction is
read-only
at
org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryEx
ecutorImpl.java:1548)
at
org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutor
Impl.java:1316)
at
org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.ja
Steve
----- Original Message ----- From: "Werner Guttmann"
<[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Friday, January 25, 2008 4:30 PM
Subject: Re: [castor-user] read-only connection for generating
keys
for postgres.
Interesting, indeed. How did you come about this solution for
postgreSQL, if I may ask ?
Werner
Stephen Ince wrote:
Werner,
I think I solved the problem for postgres but not derby.
<mapping>
<key-generator name="HIGH-LOW" alias="keygen">
:
<param name="same-connection" value="false"/>
</key-generator>
</mapping>
This seemed to worked for postgres. With derby I get a
similiar
error.
Nested error: java.sql.SQLException: An SQL data change is
not
permitted for a read-only connection, user or database.: An
SQL
data change is not permitted for a read-only connection,
user or
database.
Steve
----- Original Message -----
From: "Werner Guttmann" <[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>>
To: <[email protected]
<mailto:[email protected]>>
Sent: Friday, January 25, 2008 3:48 PM
Subject: Re: [castor-user] read-only connection for generating
keys for postgres.
> Stephen,
>
> can you supply me with a test case (packaged as part of a
Jira
issue) so
> that I could easily replay this problem ?
>
> Regards
> Werner
>
> Stephen Ince wrote:
>> I am getting the following error when I try to save an
object
using a
>> key sequence.
>> This works fine for oracle, sqlserver, hsqldb and db2.
>>
>> Here is my database.xml. Is there something I can do it
to
force castor
>> to use a different connection to get the keys or change
connection from
>> read-only to non read-only?
>>
>> org.exolab.castor.jdo.keygen.MaxKeyGenerator:
>> org.postgresql.util.PSQLException: ERROR: transaction is
read-only.:
>> ERROR: transaction is read-only
>>
>> <!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD
Version
1.0//EN"
>> "http://castor.exolab.org/mapping.dtd">
>> <mapping>
>> <key-generator name="HIGH-LOW" alias="keygen">
>> <param name="table" value="seq"/>
>> <param name="key-column" value="seq_table_name"/>
>> <param name="value-column" value="max_pk_value"/>
>> <param name="grab-size" value="50"/>
>> <param name="same-connection" value="true"/>
>> </key-generator>
>> </mapping>
>>
>> Steve
>>
>>
---------------------------------------------------------------------
>> To unsubscribe from this list please visit:
>>
>> http://xircles.codehaus.org/manage_email
>>
>>
>
>
>
---------------------------------------------------------------------
> To unsubscribe from this list please visit:
>
> http://xircles.codehaus.org/manage_email
>
>
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email