Hi Dino,

thanks for the detailed description of this issue. I think it's a bug caused by
PlatformOracleImpl#createSequenceQuery(String sequenceName, Properties prop)

This method build the sequence-String and does ignore the NOCACHE setting. This will be fixed in upcoming OJB 1.0.5 (SVN OJB_1_0_RELEASE branch).
You can patch class org.apache.ojb.broker.platforms.PlatformOracleImpl with:

value = SequenceManagerHelper.getSeqCacheValue(prop);
if(value != null)
{
    long cache = value.longValue();
    if(cache > 0) query.append(" CACHE ").append(value.longValue());
    else query.append(" NOCACHE");
}

I don't have a Oracle database installation to test my patch, so it will be helpful if you could verify the patch.

regards,
Armin

[EMAIL PROTECTED] wrote:
Many thanks Armin for your answer.

You are right for the documentation. :( I only looked at SequenceManagerNextValImpl javadoc
and no other keys rather than 'autoNaming' were
mentioned.

I just ported the application to ojb 1.0.4. However
when I set the following in the repository_database

<sequence-manager className="org.apache.ojb.broker.util.sequence.SequenceManagerNextValImpl">
<attribute attribute-name="autoNaming"
attribute-value="true"/>
<attribute attribute-name="seq.cache"
attribute-value="0"/>
</sequence-manager>

I get the following error:

Creation of new sequence failed with ORA-04010: il numero di valori per CACHE deve essere
maggiore di 1

        at
org.apache.ojb.broker.util.sequence.SequenceManagerNextValImpl.getUniqueLong(Unknown
Source)
        at
org.apache.ojb.broker.util.sequence.AbstractSequenceManager.getUniqueValue(Unknown
Source)
        at
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.assignAutoincrementSequences(Unknown
Source)
        ... 40 more
Caused by: java.sql.SQLException: ORA-04010: il numero
di valori per CACHE deve essere maggiore di 1

        at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:137)
        at
oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:304)
        at
oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:271)
        at
oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:625)
        at
oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:112)
        at
oracle.jdbc.driver.T4CStatement.execute_for_rows(T4CStatement.java:560)
        at
oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1153)
        at
oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1647)
        at
com.evermind.sql.FilterStatement.execute(FilterStatement.java:27)
        at
com.evermind.sql.FilterStatement.execute(FilterStatement.java:27)
        at
com.evermind.sql.StatementBCELProxy.execute(StatementBCELProxy.java:240)
        at
org.apache.ojb.broker.util.sequence.SequenceManagerNextValImpl.createSequence(Unknown
Source)
...
...

It does not accept 0 as cache value.
In fact if I open a sqlplus shell, the following
command

SQL> alter sequence SEQ_SUPPLIES cache 20;

works fine.

Instead the following does not work:

SQL> alter sequence SEQ_SUPPLIES cache 0;
alter sequence SEQ_SUPPLIES cache 0
*
ERRORE alla riga 1:
ORA-04010: il numero di valori per CACHE deve essere
maggiore di 1


To reset the cache it seems only the following command
works:

SQL> alter sequence SEQ_SUPPLIES nocache;

I have the following Oracle version:

Oracle9i Enterprise Edition Release 9.2.0.1.0 -
Production
With the Partitioning, OLAP and Oracle Data Mining
options
JServer Release 9.2.0.1.0 - Production

Do you know this behaviour?

Thanks!

Dino.

ps.
I am sorry Armin for the wrong email address of my
first message, I just replied to the OJB Users List to
share this issue with the community. --

--- Armin Waibel <[EMAIL PROTECTED]> ha scritto:
Hi Dino,

Dino Di Cola wrote:
Armin,

I have a question regarding ojb and oracle
sequences.
I am using the following sequence-manager

<sequence-manager
className="org.apache.ojb.broker.util.sequence.SequenceManagerNextValImpl">
<attribute attribute-name="autoNaming" attribute-value="true"/>
</sequence-manager>

and the sequences get automatically created with
CACHE
parameter set to 20. I am encountering some
problems
with Oracle 10g and it seems that the 20 is added
to
the sequence current value to generate the next
value.
How can I configure OJB by automatically creating
sequences with NOCACHE?
Is SequenceManagerNextValImpl configurable or have
I
to Implement a sequence manager by myself?

Please have a look into OJB's documentation

http://db.apache.org/ojb/docu/guides/sequencemanager.html#Database+sequences+based+implementation
You can set an attribute 'seq.cache'
<attribute attribute-name="seq.cache"
attribute-value="0"/>

These properties are supported since OJB 1.0.4. If
you use an older version of OJB you can extend SequenceManagerNextValImpl to implement your specific SM - e.g. override method
#createSequence(...)

By the way please post your questions to OJB's
user-list - Thanks.

regards,
Armin


Many thank in advance for your help.

Dino.
--



        

        
                
___________________________________ Yahoo! Mail: gratis 1GB per i messaggi e allegati
da 10MB
http://mail.yahoo.it


---------------------------------------------------------------------
To unsubscribe, e-mail:
[EMAIL PROTECTED]
For additional commands, e-mail:
[EMAIL PROTECTED]





                
___________________________________ Bolletta salata? Passa a Yahoo! Messenger with Voice http://it.messenger.yahoo.com

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to