You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-user@db.apache.org by Charles Harvey III <ch...@alloy.com> on 2005/10/12 22:37:04 UTC

impossibly long insert time for one object

Hello.
My application is taking "years" to insert an object and I can't figure
out why for the life of me.  For starters, my test DB is in a different
location than my dev box, so there is a lag time, and I am ok with that.
But for one specific object the lag time is huge.  It is slightly faster
when I put the app in production because of the proximity to the database.

Here are my log statements from my test case as an example:

-----------------------------------------------------------------------
4686  INFO (CalculateLogic.java:177) :: quizReport created: \
      com.alloyinc.quiz.bean.QuizReport@d402dd

4703  INFO (OJBRepositoryDefaultImpl.java:567) :: \
      Inserting Object [com.alloyinc.quiz.bean.QuizReport].
[org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl] \
DEBUG: SQL:INSERT INTO QUIZ_REPORT (quiz_id,date_time_taken) VALUES (?,?)

20652  INFO (CalculateLogic.java:181) :: quizReport inserted: \   
       com.alloyinc.quiz.bean.QuizReport@d402dd -- getId(): 537986
-----------------------------------------------------------------------


See here, there is a pretty good lag time to insert QuizReport.  But
that's not the lag time I'm talking about:

-----------------------------------------------------------------------
20653  INFO (CalculateLogic.java:190) :: questionAnswer created: \
       com.alloyinc.quiz.bean.QuestionAnswer@135133

20678  INFO (OJBRepositoryDefaultImpl.java:567) :: Inserting Object \
       [com.alloyinc.quiz.bean.QuestionAnswer].
[org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl] DEBUG: \
SQL:INSERT INTO QUIZ_QUESTION_ANSWER (question_answer_value,question_id, \
quiz_report_id) VALUES (?,?,?)

112932  INFO (CalculateLogic.java:202) :: questionAnswer inserted: \
        com.alloyinc.quiz.bean.QuestionAnswer@135133 -- getId(): 3168835
-----------------------------------------------------------------------

15949 ms for the first object.

92254 ms for the second object.

15 seconds I can attribute to our network connection (hopefully).
But 92 seconds - a minute and a half.  No way.  And its not much faster
when I do it from a server next to the DB.

Any ideas?  Could it be the data structure?  A setting in OJB?  Something
wrong with the database (MSSQL)?


Any ideas are extremely helpful.  Thanks a lot.


Charlie





---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: impossibly long insert time for one object

Posted by Thomas Dudziak <to...@gmail.com>.
On 10/12/05, Charles Harvey III <ch...@alloy.com> wrote:
> Hello.
> My application is taking "years" to insert an object and I can't figure
> out why for the life of me.  For starters, my test DB is in a different
> location than my dev box, so there is a lag time, and I am ok with that.
> But for one specific object the lag time is huge.  It is slightly faster
> when I put the app in production because of the proximity to the database.

Have you considered using a profiler for this (eclipse profiler,
YourKit, JProfiler, ...) ? Eg. set two breakpoints immediately before
and after the insert operation, and then let the profiler run between
these breakpoints. This will give you a detailed analysis of where the
most time is spent. Eg. if you have a network problem, then a lot of
time will be spent in a Socket method.

Tom

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: impossibly long insert time for one object

Posted by Thomas Dudziak <to...@gmail.com>.
On 10/28/05, Charles Harvey III <ch...@alloy.com> wrote:
> I just ran a little test on this query.
> My test, wipe out all the data.  I am inserting into 3 tables when
> a user takes a quiz.  Each had close to or over a million rows.  So,
> I wiped 'em out.  Than ran it again.  Works like a charm.
>
> Something in the insert is making it take minutes to commit.  And, I
> think it is the @@IDENTITY.
>
> I have to take a look at the code for the PlatformMsSQLServerImpl.
> But from looking at the sql profiler I can see that when it does an
> insert it also selects the "@@IDENTITY AS id" so that it can return
> the id to the newly created object.
>
> For some reason, that @@IDENTITY part takes minutes when there are
> close to a million rows.  This is probably a SQL Server problem and
> not an OJB problem.  But, does anyone have an idea on how I could
> get around this problem?

If you have an Sql Server 2000, you could try the alternatives to @@IDENTITY:

http://www.sqlteam.com/item.asp?ItemID=319

e.g. SCOPE_IDENTITY() might be faster ?

Tom

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: impossibly long insert time for one object

Posted by Charles Harvey III <ch...@alloy.com>.
I just ran a little test on this query.
My test, wipe out all the data.  I am inserting into 3 tables when
a user takes a quiz.  Each had close to or over a million rows.  So,
I wiped 'em out.  Than ran it again.  Works like a charm.

Something in the insert is making it take minutes to commit.  And, I
think it is the @@IDENTITY.

I have to take a look at the code for the PlatformMsSQLServerImpl.
But from looking at the sql profiler I can see that when it does an
insert it also selects the "@@IDENTITY AS id" so that it can return
the id to the newly created object.

For some reason, that @@IDENTITY part takes minutes when there are
close to a million rows.  This is probably a SQL Server problem and
not an OJB problem.  But, does anyone have an idea on how I could
get around this problem?

Thanks for all the previous help on this issue.


Charlie


Armin Waibel said the following on 10/18/2005 8:34 PM:

> Hi Charlie,
>
> class QA has a 1:1 reference to Q and QR, the auto-update attributes 
> are set 'false' for both (correct me if I'm wrong), thus OJB will only 
> "link" the FK's to QR and Q and method
>
> >    ojbRepository.insertObject( questionAnswer );
>
> have to do the rest (update/insert QR and Q). Maybe the problem is 
> caused by this method. I can't believe that this is an issue caused by 
> OJB (but maybe I'm wrong).
>
> If you really use ConnectionFactoryPooledImpl then skip this 
> paragraph, because attribute 'removeAbandoned' is only supported by 
> ConnectionFactoryDBCPImpl.
> You set whenExhaustedAction="2" (grow) and removeAbandoned="true" in 
> your jdbc-connection-descriptor. Especially the second attribute will 
> cause significant overhead and it's not recommended to use this 
> setting in production environment. If "leaking connections" occur, 
> it's recommended to fix the code instead of using this attribute ;-)
>
> Do have any problems with exhausted connection- or PB-pools (leaking 
> connections and PB instances) when running your tests?
>
> Which version of OJB do you use?
>
> I'm (nearly) sure that it's not possible to reproduce your issue in 
> OJB test-suite (there are many tests using 1:1 references and I never 
> observed such a behavior). So (as Tom suggested in a previous post) 
> use a profiling tool to find the hot spot.
>
> regards,
> Armin
>
>
> Charles Harvey III wrote:
>
>> I use the PB API.
>>
>> ConnectionFactoryClass = ConnectionFactoryPooledImpl
>> ObjectCacheClass = ObjectCacheDefaultImpl
>>
>> Here is the block of code that does the most damage:
>>
>> while( questionIter.hasNext() )
>> {
>>    Question question = (Question)questionIter.next();
>>    QuestionAnswer questionAnswer = new QuestionAnswer();
>>    questionAnswer.setQuizReport( quizReport );
>>    questionAnswer.setQuestion( question );
>>    Integer questionNumber = question.getQuestionNumber();
>>    questionAnswer.setQuestionAnswerValue( new Integer(
>>        (String)questionMap.get( "question" + questionNumber ) ) );
>>    ojbRepository.insertObject( questionAnswer );
>>    _log.info( "inserted QA id: " + questionAnswer.getId() );
>> }
>>
>>
>> I do not extend any of the pluggable classes.  the "ojbRepository"
>> class is my wrapper class for ojb methods.  It does the standard ojb
>> stuff right from the website, nothing different at all.
>>
>> And, below is my repository.xml file.
>>
>>
>> Thanks so much for all the help, it is much appreciated.
>>
>>
>> Charlie
>>
>>
>> ------------------------------------------------------------------------------------ 
>>
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>>
>> <!-- defining entities for include-files -->
>> <!DOCTYPE descriptor-repository PUBLIC
>>        "-//Apache Software Foundation//DTD OJB Repository//EN"
>>        "http://db.apache.org/ojb/repository.dtd" [
>> ]>
>>
>> <descriptor-repository version="1.0" isolation-level="read-uncommitted">
>>
>>    <!-- Development JDBC Connection. -->
>>    <jdbc-connection-descriptor
>>            jcd-alias="development"
>>            default-connection="false"
>>            platform="MsSQLServer"
>>            jdbc-level="4.0"
>>            driver="net.sourceforge.jtds.jdbc.Driver"
>>            protocol="jdbc"
>>            subprotocol="jtds"
>>            dbalias="sqlserver://10.4.3.10:1433/CCSQuiz"
>>            username="ccsquizuser"
>>            password="ccsquizuser"
>>            eager-release="false">
>>        <connection-pool
>>                maxActive="100"
>>                maxIdle="5"
>>                maxWait="200"
>>                minEvictableIdleTimeMillis="1000000"
>>                timeBetweenEvictionRunsMillis="600000"
>>                validationQuery=""
>>                removeAbandoned="true"
>>                whenExhaustedAction="2"/>
>>        <sequence-manager
>>                
>> className="org.apache.ojb.broker.util.sequence.SequenceManagerNativeImpl"> 
>>
>>        </sequence-manager>
>>    </jdbc-connection-descriptor>         <!-- include user defined 
>> mappings here -->
>>
>>    <!-- TABLE CATEGORY -->
>>    <class-descriptor
>>            class="com.alloyinc.quiz.bean.Category"
>>            table="QUIZ_CATEGORY">
>>        <field-descriptor
>>                name="id"
>>                column="category_id"
>>                jdbc-type="INTEGER"
>>                primarykey="true"
>>                autoincrement="true"
>>                access="readonly"/>
>>        <field-descriptor
>>                name="categoryDesc"
>>                column="category_desc"
>>                jdbc-type="VARCHAR"
>>                access="readwrite"/>
>>    </class-descriptor>
>>
>>    <!-- TABLE QUIZ -->
>>    <class-descriptor
>>            class="com.alloyinc.quiz.bean.Quiz"
>>            table="QUIZ">
>>        <field-descriptor
>>                name="id"
>>                column="quiz_id"
>>                jdbc-type="INTEGER"
>>                primarykey="true"
>>                autoincrement="true"
>>                access="readonly"/>
>>        <field-descriptor
>>                name="quizDisplayTitle"
>>                column="quiz_display_title"
>>                jdbc-type="VARCHAR"
>>                access="readwrite"/>
>>        <field-descriptor
>>                name="quizDisplayTeaser"
>>                column="quiz_display_teaser"
>>                jdbc-type="VARCHAR"
>>                access="readwrite"/>
>>        <field-descriptor
>>                name="quizIntroText"
>>                column="quiz_intro_text"
>>                jdbc-type="VARCHAR"
>>                access="readwrite"/>
>>        <field-descriptor
>>                name="imagePath"
>>                column="image_path"
>>                jdbc-type="VARCHAR"
>>                access="readwrite"/>
>>        <field-descriptor
>>                name="archiveImage"
>>                column="archive_image"
>>                jdbc-type="VARCHAR"
>>                access="readwrite"/>
>>        <field-descriptor
>>                name="numberOfPages"
>>                column="number_of_pages"
>>                jdbc-type="INTEGER"
>>                access="readwrite"/>
>>        <field-descriptor
>>                name="publishStatus"
>>                column="publish_status"
>>                jdbc-type="BIT"
>>                access="readwrite"/>
>>        <field-descriptor
>>                name="dateCreated"
>>                column="date_created"
>>                jdbc-type="DATE"
>>                access="readwrite"/>
>>        <field-descriptor
>>                name="timesTaken"
>>                column="times_taken"
>>                jdbc-type="INTEGER"
>>                access="readwrite"/>
>>        <field-descriptor
>>                name="scoreType"
>>                column="score_type"
>>                jdbc-type="VARCHAR"
>>                access="readwrite"/>
>>        <field-descriptor
>>                name="channelName"
>>                column="channel_name"
>>                jdbc-type="VARCHAR"
>>                access="readwrite"/>
>>        <collection-descriptor
>>                name="questions"
>>                element-class-ref="com.alloyinc.quiz.bean.Question"
>>                orderby="questionNumber"
>>                sort="ASC"
>>                proxy="true">
>>            <inverse-foreignkey
>>                    field-ref="quizId"/>
>>        </collection-descriptor>
>>    </class-descriptor>
>>
>>    <!-- TABLE QUESTION -->
>>    <class-descriptor
>>            class="com.alloyinc.quiz.bean.Question"
>>            table="QUIZ_QUESTION">
>>        <field-descriptor
>>                name="id"
>>                column="question_id"
>>                jdbc-type="INTEGER"
>>                primarykey="true"
>>                autoincrement="true"
>>                access="readonly"/>
>>        <field-descriptor
>>                name="questionDesc"
>>                column="question_desc"
>>                jdbc-type="VARCHAR"
>>                access="readwrite"/>
>>        <field-descriptor
>>                name="questionType"
>>                column="question_type"
>>                jdbc-type="VARCHAR"
>>                access="readwrite"/>
>>        <field-descriptor
>>                name="quizId"
>>                column="quiz_id"
>>                jdbc-type="INTEGER"
>>                access="anonymous"/>
>>        <reference-descriptor
>>                name="quiz"
>>                class-ref="com.alloyinc.quiz.bean.Quiz"
>>                auto-update="false">
>>            <foreignkey
>>                    field-ref="quizId"/>
>>        </reference-descriptor>
>>        <field-descriptor
>>                name="questionNumber"
>>                column="question_number"
>>                jdbc-type="INTEGER"
>>                access="readwrite"/>
>>        <field-descriptor
>>                name="pageNumber"
>>                column="page_number"
>>                jdbc-type="INTEGER"
>>                access="readwrite"/>
>>        <collection-descriptor
>>                name="questionChoices"
>>                element-class-ref="com.alloyinc.quiz.bean.QuestionChoice"
>>                orderby="id"
>>                sort="ASC"
>>                proxy="true">
>>            <inverse-foreignkey
>>                    field-ref="questionId"/>
>>        </collection-descriptor>
>>    </class-descriptor>
>>
>>    <!-- TABLE QUESTION_CHOICE -->
>>    <class-descriptor
>>            class="com.alloyinc.quiz.bean.QuestionChoice"
>>            table="QUIZ_QUESTION_CHOICE">
>>        <field-descriptor
>>                name="id"
>>                column="question_choice_id"
>>                jdbc-type="INTEGER"
>>                primarykey="true"
>>                autoincrement="true"
>>                access="readonly"/>
>>        <field-descriptor
>>                name="questionChoiceDesc"
>>                column="question_choice_desc"
>>                jdbc-type="VARCHAR"
>>                access="readwrite"/>
>>        <field-descriptor
>>                name="questionChoiceValue"
>>                column="question_choice_value"
>>                jdbc-type="INTEGER"
>>                access="readwrite"/>
>>        <field-descriptor
>>                name="questionId"
>>                column="question_id"
>>                jdbc-type="INTEGER"
>>                access="anonymous"/>
>>        <reference-descriptor
>>                name="question"
>>                class-ref="com.alloyinc.quiz.bean.Question"
>>                auto-update="false">
>>            <foreignkey
>>                    field-ref="questionId"/>
>>        </reference-descriptor>
>>    </class-descriptor>
>>
>>    <!-- TABLE QUESTION_ANSWER -->
>>    <class-descriptor
>>            class="com.alloyinc.quiz.bean.QuestionAnswer"
>>            table="QUIZ_QUESTION_ANSWER">
>>        <field-descriptor
>>                name="id"
>>                column="question_answer_id"
>>                jdbc-type="INTEGER"
>>                primarykey="true"
>>                autoincrement="true"
>>                access="readonly"/>
>>        <field-descriptor
>>                name="questionAnswerValue"
>>                column="question_answer_value"
>>                jdbc-type="INTEGER"
>>                access="readwrite"/>
>>        <field-descriptor
>>                name="questionId"
>>                column="question_id"
>>                jdbc-type="INTEGER"
>>                access="anonymous"/>
>>        <reference-descriptor
>>                name="question"
>>                class-ref="com.alloyinc.quiz.bean.Question"
>>                auto-update="false">
>>            <foreignkey
>>                    field-ref="questionId"/>
>>        </reference-descriptor>
>>        <field-descriptor
>>                name="quizReportId"
>>                column="quiz_report_id"
>>                jdbc-type="INTEGER"
>>                access="anonymous"/>
>>        <reference-descriptor
>>                name="quizReport"
>>                class-ref="com.alloyinc.quiz.bean.QuizReport"
>>                auto-update="false">
>>            <foreignkey
>>                    field-ref="quizReportId"/>
>>        </reference-descriptor>
>>    </class-descriptor>
>>
>>    <!-- TABLE QUIZ_REPORT -->
>>    <class-descriptor
>>            class="com.alloyinc.quiz.bean.QuizReport"
>>            table="QUIZ_REPORT">
>>        <field-descriptor
>>                name="id"
>>                column="quiz_report_id"
>>                jdbc-type="INTEGER"
>>                primarykey="true"
>>                autoincrement="true"
>>                access="readonly"/>
>>        <field-descriptor
>>                name="quizId"
>>                column="quiz_id"
>>                jdbc-type="INTEGER"
>>                access="anonymous"/>
>>        <reference-descriptor
>>                name="quiz"
>>                class-ref="com.alloyinc.quiz.bean.Quiz">
>>            <foreignkey
>>                    field-ref="quizId"/>
>>        </reference-descriptor>
>>        <field-descriptor
>>                name="dateTimeTaken"
>>                column="date_time_taken"
>>                jdbc-type="TIMESTAMP"
>>                access="readwrite"/>
>>    </class-descriptor>
>>
>>    <!-- TABLE QUIZ_REPORT_SCORE -->
>>    <class-descriptor
>>            class="com.alloyinc.quiz.bean.QuizReportScore"
>>            table="QUIZ_REPORT_SCORE">
>>        <field-descriptor
>>                name="id"
>>                column="quiz_report_score_id"
>>                jdbc-type="INTEGER"
>>                primarykey="true"
>>                autoincrement="true"
>>                access="readonly"/>
>>        <field-descriptor
>>                name="resultTypeId"
>>                column="result_type_id"
>>                jdbc-type="INTEGER"
>>                access="anonymous"/>
>>        <reference-descriptor
>>                name="resultType"
>>                class-ref="com.alloyinc.quiz.bean.ResultType">
>>            <foreignkey
>>                    field-ref="resultTypeId"/>
>>        </reference-descriptor>
>>        <field-descriptor
>>                name="quizReportId"
>>                column="quiz_report_id"
>>                jdbc-type="INTEGER"
>>                access="anonymous"/>
>>        <reference-descriptor
>>                name="quizReport"
>>                class-ref="com.alloyinc.quiz.bean.QuizReport">
>>            <foreignkey
>>                    field-ref="quizReportId"/>
>>        </reference-descriptor>
>>    </class-descriptor>
>>
>>    <!-- TABLE RESULT_TYPE -->
>>    <class-descriptor
>>            class="com.alloyinc.quiz.bean.ResultType"
>>            table="QUIZ_RESULT_TYPE">
>>        <field-descriptor
>>                name="id"
>>                column="result_type_id"
>>                jdbc-type="INTEGER"
>>                primarykey="true"
>>                autoincrement="true"
>>                access="readonly"/>
>>        <field-descriptor
>>                name="header"
>>                column="header"
>>                jdbc-type="VARCHAR"
>>                access="readwrite"/>
>>        <field-descriptor
>>                name="longDesc"
>>                column="long_desc"
>>                jdbc-type="VARCHAR"
>>                access="readwrite"/>
>>        <field-descriptor
>>                name="imagePath"
>>                column="image_path"
>>                jdbc-type="VARCHAR"
>>                access="readwrite"/>
>>        <field-descriptor
>>                name="pointRange"
>>                column="point_range"
>>                jdbc-type="VARCHAR"
>>                access="readwrite"/>
>>        <field-descriptor
>>                name="quizId"
>>                column="quiz_id"
>>                jdbc-type="INTEGER"
>>                access="anonymous"/>
>>        <reference-descriptor
>>                name="quiz"
>>                class-ref="com.alloyinc.quiz.bean.Quiz">
>>            <foreignkey
>>                    field-ref="quizId"/>
>>        </reference-descriptor>
>>    </class-descriptor>
>>
>>
>> </descriptor-repository>
>>
>>
>> ------------------------------------------------------------------------------------ 
>>
>>
>>
>>
>> Armin Waibel said the following on 10/18/2005 1:50 PM:
>>
>>> Hi Charlie,
>>>
>>> > Should I attach my repository.xml?  What should I be looking for 
>>> that would
>>> > be making this so slow?  I've never seen anything like this.
>>>
>>> yep, the metadata mapping for TestCalculateLogic.java (and all 
>>> referenced objects) would be helpful.
>>> Which API do you use (PB-api, ODMG-api)?
>>> Did you extend one or more of the pluggable classes (e.g. RowReader, 
>>> ...)?
>>> Which cache, connection-factory implementation do you use?
>>>
>>> regards
>>> Armin
>>>
>>>
>>>
>>> Charles Harvey III wrote:
>>>
>>>> Ok.  I did that.  I setup a JDBC method and did everything via JDBC.
>>>> (Been a while since I've had to do that, no wonder I use ORM 
>>>> software.)
>>>>
>>>> 3710  INFO (TestCalculateLogic.java:37) :: *** testCommitAnswers() ***
>>>> 31095  INFO (CalculateLogic.java:186) :: inserted QuizReport id: 
>>>> 537991
>>>> 153408  INFO (CalculateLogic.java:301) :: inserted QuestionAnswer 
>>>> id: 3168866
>>>> 327598  INFO (CalculateLogic.java:301) :: inserted QuestionAnswer 
>>>> id: 3168867
>>>>
>>>> 2158  INFO (TestCalculateLogic.java:81) :: *** 
>>>> testCommitAnswersJDBC() ***
>>>> 3322  INFO (CalculateLogic.java:274) :: inserted QuizReport id: 537992
>>>> 4673  INFO (CalculateLogic.java:301) :: inserted QuestionAnswer id: 
>>>> 3168869
>>>> 6004  INFO (CalculateLogic.java:301) :: inserted QuestionAnswer id: 
>>>> 3168870
>>>>
>>>>
>>>> HUGE difference between the two in the log time on the left.  What is
>>>> happening?
>>>>
>>>> Should I attach my repository.xml?  What should I be looking for 
>>>> that would
>>>> be making this so slow?  I've never seen anything like this.
>>>>
>>>>
>>>>
>>>> Charlie
>>>>
>>>>
>>>>
>>>> Thomas Franke said the following on 10/13/2005 3:26 AM:
>>>>
>>>>> Charles Harvey III wrote:
>>>>>
>>>>>  
>>>>>
>>>>>> Any ideas?  Could it be the data structure?  A setting in OJB?  
>>>>>> Something
>>>>>> wrong with the database (MSSQL)?
>>>>>>   
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> How about to try your statement without OJB e.g. only with JDBC? 
>>>>> So you could
>>>>> figure out if it is an OJB or another problem. Maybe you are using 
>>>>> the wrong driver?
>>>>>
>>>>> Regards,
>>>>>
>>>>> Thomas
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>>>>> For additional commands, e-mail: ojb-user-help@db.apache.org
>>>>>
>>>>>
>>>>>  
>>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>>>> For additional commands, e-mail: ojb-user-help@db.apache.org
>>>>
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>>> For additional commands, e-mail: ojb-user-help@db.apache.org
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>> For additional commands, e-mail: ojb-user-help@db.apache.org
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: impossibly long insert time for one object

Posted by Armin Waibel <ar...@apache.org>.
Hi Charlie,

class QA has a 1:1 reference to Q and QR, the auto-update attributes are 
set 'false' for both (correct me if I'm wrong), thus OJB will only 
"link" the FK's to QR and Q and method

 >    ojbRepository.insertObject( questionAnswer );

have to do the rest (update/insert QR and Q). Maybe the problem is 
caused by this method. I can't believe that this is an issue caused by 
OJB (but maybe I'm wrong).

If you really use ConnectionFactoryPooledImpl then skip this paragraph, 
because attribute 'removeAbandoned' is only supported by 
ConnectionFactoryDBCPImpl.
You set whenExhaustedAction="2" (grow) and removeAbandoned="true" in 
your jdbc-connection-descriptor. Especially the second attribute will 
cause significant overhead and it's not recommended to use this setting 
in production environment. If "leaking connections" occur, it's 
recommended to fix the code instead of using this attribute ;-)

Do have any problems with exhausted connection- or PB-pools (leaking 
connections and PB instances) when running your tests?

Which version of OJB do you use?

I'm (nearly) sure that it's not possible to reproduce your issue in OJB 
test-suite (there are many tests using 1:1 references and I never 
observed such a behavior). So (as Tom suggested in a previous post) use 
a profiling tool to find the hot spot.

regards,
Armin


Charles Harvey III wrote:
> I use the PB API.
> 
> ConnectionFactoryClass = ConnectionFactoryPooledImpl
> ObjectCacheClass = ObjectCacheDefaultImpl
> 
> Here is the block of code that does the most damage:
> 
> while( questionIter.hasNext() )
> {
>    Question question = (Question)questionIter.next();
>    QuestionAnswer questionAnswer = new QuestionAnswer();
>    questionAnswer.setQuizReport( quizReport );
>    questionAnswer.setQuestion( question );
>    Integer questionNumber = question.getQuestionNumber();
>    questionAnswer.setQuestionAnswerValue( new Integer(
>        (String)questionMap.get( "question" + questionNumber ) ) );
>    ojbRepository.insertObject( questionAnswer );
>    _log.info( "inserted QA id: " + questionAnswer.getId() );
> }
> 
> 
> I do not extend any of the pluggable classes.  the "ojbRepository"
> class is my wrapper class for ojb methods.  It does the standard ojb
> stuff right from the website, nothing different at all.
> 
> And, below is my repository.xml file.
> 
> 
> Thanks so much for all the help, it is much appreciated.
> 
> 
> Charlie
> 
> 
> ------------------------------------------------------------------------------------ 
> 
> 
> <?xml version="1.0" encoding="UTF-8"?>
> 
> <!-- defining entities for include-files -->
> <!DOCTYPE descriptor-repository PUBLIC
>        "-//Apache Software Foundation//DTD OJB Repository//EN"
>        "http://db.apache.org/ojb/repository.dtd" [
> ]>
> 
> <descriptor-repository version="1.0" isolation-level="read-uncommitted">
> 
>    <!-- Development JDBC Connection. -->
>    <jdbc-connection-descriptor
>            jcd-alias="development"
>            default-connection="false"
>            platform="MsSQLServer"
>            jdbc-level="4.0"
>            driver="net.sourceforge.jtds.jdbc.Driver"
>            protocol="jdbc"
>            subprotocol="jtds"
>            dbalias="sqlserver://10.4.3.10:1433/CCSQuiz"
>            username="ccsquizuser"
>            password="ccsquizuser"
>            eager-release="false">
>        <connection-pool
>                maxActive="100"
>                maxIdle="5"
>                maxWait="200"
>                minEvictableIdleTimeMillis="1000000"
>                timeBetweenEvictionRunsMillis="600000"
>                validationQuery=""
>                removeAbandoned="true"
>                whenExhaustedAction="2"/>
>        <sequence-manager
>                
> className="org.apache.ojb.broker.util.sequence.SequenceManagerNativeImpl">
>        </sequence-manager>
>    </jdbc-connection-descriptor>      
>    <!-- include user defined mappings here -->
> 
>    <!-- TABLE CATEGORY -->
>    <class-descriptor
>            class="com.alloyinc.quiz.bean.Category"
>            table="QUIZ_CATEGORY">
>        <field-descriptor
>                name="id"
>                column="category_id"
>                jdbc-type="INTEGER"
>                primarykey="true"
>                autoincrement="true"
>                access="readonly"/>
>        <field-descriptor
>                name="categoryDesc"
>                column="category_desc"
>                jdbc-type="VARCHAR"
>                access="readwrite"/>
>    </class-descriptor>
> 
>    <!-- TABLE QUIZ -->
>    <class-descriptor
>            class="com.alloyinc.quiz.bean.Quiz"
>            table="QUIZ">
>        <field-descriptor
>                name="id"
>                column="quiz_id"
>                jdbc-type="INTEGER"
>                primarykey="true"
>                autoincrement="true"
>                access="readonly"/>
>        <field-descriptor
>                name="quizDisplayTitle"
>                column="quiz_display_title"
>                jdbc-type="VARCHAR"
>                access="readwrite"/>
>        <field-descriptor
>                name="quizDisplayTeaser"
>                column="quiz_display_teaser"
>                jdbc-type="VARCHAR"
>                access="readwrite"/>
>        <field-descriptor
>                name="quizIntroText"
>                column="quiz_intro_text"
>                jdbc-type="VARCHAR"
>                access="readwrite"/>
>        <field-descriptor
>                name="imagePath"
>                column="image_path"
>                jdbc-type="VARCHAR"
>                access="readwrite"/>
>        <field-descriptor
>                name="archiveImage"
>                column="archive_image"
>                jdbc-type="VARCHAR"
>                access="readwrite"/>
>        <field-descriptor
>                name="numberOfPages"
>                column="number_of_pages"
>                jdbc-type="INTEGER"
>                access="readwrite"/>
>        <field-descriptor
>                name="publishStatus"
>                column="publish_status"
>                jdbc-type="BIT"
>                access="readwrite"/>
>        <field-descriptor
>                name="dateCreated"
>                column="date_created"
>                jdbc-type="DATE"
>                access="readwrite"/>
>        <field-descriptor
>                name="timesTaken"
>                column="times_taken"
>                jdbc-type="INTEGER"
>                access="readwrite"/>
>        <field-descriptor
>                name="scoreType"
>                column="score_type"
>                jdbc-type="VARCHAR"
>                access="readwrite"/>
>        <field-descriptor
>                name="channelName"
>                column="channel_name"
>                jdbc-type="VARCHAR"
>                access="readwrite"/>
>        <collection-descriptor
>                name="questions"
>                element-class-ref="com.alloyinc.quiz.bean.Question"
>                orderby="questionNumber"
>                sort="ASC"
>                proxy="true">
>            <inverse-foreignkey
>                    field-ref="quizId"/>
>        </collection-descriptor>
>    </class-descriptor>
> 
>    <!-- TABLE QUESTION -->
>    <class-descriptor
>            class="com.alloyinc.quiz.bean.Question"
>            table="QUIZ_QUESTION">
>        <field-descriptor
>                name="id"
>                column="question_id"
>                jdbc-type="INTEGER"
>                primarykey="true"
>                autoincrement="true"
>                access="readonly"/>
>        <field-descriptor
>                name="questionDesc"
>                column="question_desc"
>                jdbc-type="VARCHAR"
>                access="readwrite"/>
>        <field-descriptor
>                name="questionType"
>                column="question_type"
>                jdbc-type="VARCHAR"
>                access="readwrite"/>
>        <field-descriptor
>                name="quizId"
>                column="quiz_id"
>                jdbc-type="INTEGER"
>                access="anonymous"/>
>        <reference-descriptor
>                name="quiz"
>                class-ref="com.alloyinc.quiz.bean.Quiz"
>                auto-update="false">
>            <foreignkey
>                    field-ref="quizId"/>
>        </reference-descriptor>
>        <field-descriptor
>                name="questionNumber"
>                column="question_number"
>                jdbc-type="INTEGER"
>                access="readwrite"/>
>        <field-descriptor
>                name="pageNumber"
>                column="page_number"
>                jdbc-type="INTEGER"
>                access="readwrite"/>
>        <collection-descriptor
>                name="questionChoices"
>                element-class-ref="com.alloyinc.quiz.bean.QuestionChoice"
>                orderby="id"
>                sort="ASC"
>                proxy="true">
>            <inverse-foreignkey
>                    field-ref="questionId"/>
>        </collection-descriptor>
>    </class-descriptor>
> 
>    <!-- TABLE QUESTION_CHOICE -->
>    <class-descriptor
>            class="com.alloyinc.quiz.bean.QuestionChoice"
>            table="QUIZ_QUESTION_CHOICE">
>        <field-descriptor
>                name="id"
>                column="question_choice_id"
>                jdbc-type="INTEGER"
>                primarykey="true"
>                autoincrement="true"
>                access="readonly"/>
>        <field-descriptor
>                name="questionChoiceDesc"
>                column="question_choice_desc"
>                jdbc-type="VARCHAR"
>                access="readwrite"/>
>        <field-descriptor
>                name="questionChoiceValue"
>                column="question_choice_value"
>                jdbc-type="INTEGER"
>                access="readwrite"/>
>        <field-descriptor
>                name="questionId"
>                column="question_id"
>                jdbc-type="INTEGER"
>                access="anonymous"/>
>        <reference-descriptor
>                name="question"
>                class-ref="com.alloyinc.quiz.bean.Question"
>                auto-update="false">
>            <foreignkey
>                    field-ref="questionId"/>
>        </reference-descriptor>
>    </class-descriptor>
> 
>    <!-- TABLE QUESTION_ANSWER -->
>    <class-descriptor
>            class="com.alloyinc.quiz.bean.QuestionAnswer"
>            table="QUIZ_QUESTION_ANSWER">
>        <field-descriptor
>                name="id"
>                column="question_answer_id"
>                jdbc-type="INTEGER"
>                primarykey="true"
>                autoincrement="true"
>                access="readonly"/>
>        <field-descriptor
>                name="questionAnswerValue"
>                column="question_answer_value"
>                jdbc-type="INTEGER"
>                access="readwrite"/>
>        <field-descriptor
>                name="questionId"
>                column="question_id"
>                jdbc-type="INTEGER"
>                access="anonymous"/>
>        <reference-descriptor
>                name="question"
>                class-ref="com.alloyinc.quiz.bean.Question"
>                auto-update="false">
>            <foreignkey
>                    field-ref="questionId"/>
>        </reference-descriptor>
>        <field-descriptor
>                name="quizReportId"
>                column="quiz_report_id"
>                jdbc-type="INTEGER"
>                access="anonymous"/>
>        <reference-descriptor
>                name="quizReport"
>                class-ref="com.alloyinc.quiz.bean.QuizReport"
>                auto-update="false">
>            <foreignkey
>                    field-ref="quizReportId"/>
>        </reference-descriptor>
>    </class-descriptor>
> 
>    <!-- TABLE QUIZ_REPORT -->
>    <class-descriptor
>            class="com.alloyinc.quiz.bean.QuizReport"
>            table="QUIZ_REPORT">
>        <field-descriptor
>                name="id"
>                column="quiz_report_id"
>                jdbc-type="INTEGER"
>                primarykey="true"
>                autoincrement="true"
>                access="readonly"/>
>        <field-descriptor
>                name="quizId"
>                column="quiz_id"
>                jdbc-type="INTEGER"
>                access="anonymous"/>
>        <reference-descriptor
>                name="quiz"
>                class-ref="com.alloyinc.quiz.bean.Quiz">
>            <foreignkey
>                    field-ref="quizId"/>
>        </reference-descriptor>
>        <field-descriptor
>                name="dateTimeTaken"
>                column="date_time_taken"
>                jdbc-type="TIMESTAMP"
>                access="readwrite"/>
>    </class-descriptor>
> 
>    <!-- TABLE QUIZ_REPORT_SCORE -->
>    <class-descriptor
>            class="com.alloyinc.quiz.bean.QuizReportScore"
>            table="QUIZ_REPORT_SCORE">
>        <field-descriptor
>                name="id"
>                column="quiz_report_score_id"
>                jdbc-type="INTEGER"
>                primarykey="true"
>                autoincrement="true"
>                access="readonly"/>
>        <field-descriptor
>                name="resultTypeId"
>                column="result_type_id"
>                jdbc-type="INTEGER"
>                access="anonymous"/>
>        <reference-descriptor
>                name="resultType"
>                class-ref="com.alloyinc.quiz.bean.ResultType">
>            <foreignkey
>                    field-ref="resultTypeId"/>
>        </reference-descriptor>
>        <field-descriptor
>                name="quizReportId"
>                column="quiz_report_id"
>                jdbc-type="INTEGER"
>                access="anonymous"/>
>        <reference-descriptor
>                name="quizReport"
>                class-ref="com.alloyinc.quiz.bean.QuizReport">
>            <foreignkey
>                    field-ref="quizReportId"/>
>        </reference-descriptor>
>    </class-descriptor>
> 
>    <!-- TABLE RESULT_TYPE -->
>    <class-descriptor
>            class="com.alloyinc.quiz.bean.ResultType"
>            table="QUIZ_RESULT_TYPE">
>        <field-descriptor
>                name="id"
>                column="result_type_id"
>                jdbc-type="INTEGER"
>                primarykey="true"
>                autoincrement="true"
>                access="readonly"/>
>        <field-descriptor
>                name="header"
>                column="header"
>                jdbc-type="VARCHAR"
>                access="readwrite"/>
>        <field-descriptor
>                name="longDesc"
>                column="long_desc"
>                jdbc-type="VARCHAR"
>                access="readwrite"/>
>        <field-descriptor
>                name="imagePath"
>                column="image_path"
>                jdbc-type="VARCHAR"
>                access="readwrite"/>
>        <field-descriptor
>                name="pointRange"
>                column="point_range"
>                jdbc-type="VARCHAR"
>                access="readwrite"/>
>        <field-descriptor
>                name="quizId"
>                column="quiz_id"
>                jdbc-type="INTEGER"
>                access="anonymous"/>
>        <reference-descriptor
>                name="quiz"
>                class-ref="com.alloyinc.quiz.bean.Quiz">
>            <foreignkey
>                    field-ref="quizId"/>
>        </reference-descriptor>
>    </class-descriptor>
> 
> 
> </descriptor-repository>
> 
> 
> ------------------------------------------------------------------------------------ 
> 
> 
> 
> 
> Armin Waibel said the following on 10/18/2005 1:50 PM:
> 
>> Hi Charlie,
>>
>> > Should I attach my repository.xml?  What should I be looking for 
>> that would
>> > be making this so slow?  I've never seen anything like this.
>>
>> yep, the metadata mapping for TestCalculateLogic.java (and all 
>> referenced objects) would be helpful.
>> Which API do you use (PB-api, ODMG-api)?
>> Did you extend one or more of the pluggable classes (e.g. RowReader, 
>> ...)?
>> Which cache, connection-factory implementation do you use?
>>
>> regards
>> Armin
>>
>>
>>
>> Charles Harvey III wrote:
>>
>>> Ok.  I did that.  I setup a JDBC method and did everything via JDBC.
>>> (Been a while since I've had to do that, no wonder I use ORM software.)
>>>
>>> 3710  INFO (TestCalculateLogic.java:37) :: *** testCommitAnswers() ***
>>> 31095  INFO (CalculateLogic.java:186) :: inserted QuizReport id: 537991
>>> 153408  INFO (CalculateLogic.java:301) :: inserted QuestionAnswer id: 
>>> 3168866
>>> 327598  INFO (CalculateLogic.java:301) :: inserted QuestionAnswer id: 
>>> 3168867
>>>
>>> 2158  INFO (TestCalculateLogic.java:81) :: *** 
>>> testCommitAnswersJDBC() ***
>>> 3322  INFO (CalculateLogic.java:274) :: inserted QuizReport id: 537992
>>> 4673  INFO (CalculateLogic.java:301) :: inserted QuestionAnswer id: 
>>> 3168869
>>> 6004  INFO (CalculateLogic.java:301) :: inserted QuestionAnswer id: 
>>> 3168870
>>>
>>>
>>> HUGE difference between the two in the log time on the left.  What is
>>> happening?
>>>
>>> Should I attach my repository.xml?  What should I be looking for that 
>>> would
>>> be making this so slow?  I've never seen anything like this.
>>>
>>>
>>>
>>> Charlie
>>>
>>>
>>>
>>> Thomas Franke said the following on 10/13/2005 3:26 AM:
>>>
>>>> Charles Harvey III wrote:
>>>>
>>>>  
>>>>
>>>>> Any ideas?  Could it be the data structure?  A setting in OJB?  
>>>>> Something
>>>>> wrong with the database (MSSQL)?
>>>>>   
>>>>
>>>>
>>>>
>>>> How about to try your statement without OJB e.g. only with JDBC? So 
>>>> you could
>>>> figure out if it is an OJB or another problem. Maybe you are using 
>>>> the wrong driver?
>>>>
>>>> Regards,
>>>>
>>>> Thomas
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>>>> For additional commands, e-mail: ojb-user-help@db.apache.org
>>>>
>>>>
>>>>  
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>>> For additional commands, e-mail: ojb-user-help@db.apache.org
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>> For additional commands, e-mail: ojb-user-help@db.apache.org
>>
>>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: impossibly long insert time for one object

Posted by Charles Harvey III <ch...@alloy.com>.
I use the PB API.

ConnectionFactoryClass = ConnectionFactoryPooledImpl
ObjectCacheClass = ObjectCacheDefaultImpl

Here is the block of code that does the most damage:

while( questionIter.hasNext() )
{
    Question question = (Question)questionIter.next();
    QuestionAnswer questionAnswer = new QuestionAnswer();
    questionAnswer.setQuizReport( quizReport );
    questionAnswer.setQuestion( question );
    Integer questionNumber = question.getQuestionNumber();
    questionAnswer.setQuestionAnswerValue( new Integer(
        (String)questionMap.get( "question" + questionNumber ) ) );
    ojbRepository.insertObject( questionAnswer );
    _log.info( "inserted QA id: " + questionAnswer.getId() );
}


I do not extend any of the pluggable classes.  the "ojbRepository"
class is my wrapper class for ojb methods.  It does the standard ojb
stuff right from the website, nothing different at all.

And, below is my repository.xml file.


Thanks so much for all the help, it is much appreciated.


Charlie


------------------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>

<!-- defining entities for include-files -->
<!DOCTYPE descriptor-repository PUBLIC
        "-//Apache Software Foundation//DTD OJB Repository//EN"
        "http://db.apache.org/ojb/repository.dtd" [
]>

<descriptor-repository version="1.0" isolation-level="read-uncommitted">

    <!-- Development JDBC Connection. -->
    <jdbc-connection-descriptor
            jcd-alias="development"
            default-connection="false"
            platform="MsSQLServer"
            jdbc-level="4.0"
            driver="net.sourceforge.jtds.jdbc.Driver"
            protocol="jdbc"
            subprotocol="jtds"
            dbalias="sqlserver://10.4.3.10:1433/CCSQuiz"
            username="ccsquizuser"
            password="ccsquizuser"
            eager-release="false">
        <connection-pool
                maxActive="100"
                maxIdle="5"
                maxWait="200"
                minEvictableIdleTimeMillis="1000000"
                timeBetweenEvictionRunsMillis="600000"
                validationQuery=""
                removeAbandoned="true"
                whenExhaustedAction="2"/>
        <sequence-manager
                
className="org.apache.ojb.broker.util.sequence.SequenceManagerNativeImpl">
        </sequence-manager>
    </jdbc-connection-descriptor>       

    <!-- include user defined mappings here -->

    <!-- TABLE CATEGORY -->
    <class-descriptor
            class="com.alloyinc.quiz.bean.Category"
            table="QUIZ_CATEGORY">
        <field-descriptor
                name="id"
                column="category_id"
                jdbc-type="INTEGER"
                primarykey="true"
                autoincrement="true"
                access="readonly"/>
        <field-descriptor
                name="categoryDesc"
                column="category_desc"
                jdbc-type="VARCHAR"
                access="readwrite"/>
    </class-descriptor>

    <!-- TABLE QUIZ -->
    <class-descriptor
            class="com.alloyinc.quiz.bean.Quiz"
            table="QUIZ">
        <field-descriptor
                name="id"
                column="quiz_id"
                jdbc-type="INTEGER"
                primarykey="true"
                autoincrement="true"
                access="readonly"/>
        <field-descriptor
                name="quizDisplayTitle"
                column="quiz_display_title"
                jdbc-type="VARCHAR"
                access="readwrite"/>
        <field-descriptor
                name="quizDisplayTeaser"
                column="quiz_display_teaser"
                jdbc-type="VARCHAR"
                access="readwrite"/>
        <field-descriptor
                name="quizIntroText"
                column="quiz_intro_text"
                jdbc-type="VARCHAR"
                access="readwrite"/>
        <field-descriptor
                name="imagePath"
                column="image_path"
                jdbc-type="VARCHAR"
                access="readwrite"/>
        <field-descriptor
                name="archiveImage"
                column="archive_image"
                jdbc-type="VARCHAR"
                access="readwrite"/>
        <field-descriptor
                name="numberOfPages"
                column="number_of_pages"
                jdbc-type="INTEGER"
                access="readwrite"/>
        <field-descriptor
                name="publishStatus"
                column="publish_status"
                jdbc-type="BIT"
                access="readwrite"/>
        <field-descriptor
                name="dateCreated"
                column="date_created"
                jdbc-type="DATE"
                access="readwrite"/>
        <field-descriptor
                name="timesTaken"
                column="times_taken"
                jdbc-type="INTEGER"
                access="readwrite"/>
        <field-descriptor
                name="scoreType"
                column="score_type"
                jdbc-type="VARCHAR"
                access="readwrite"/>
        <field-descriptor
                name="channelName"
                column="channel_name"
                jdbc-type="VARCHAR"
                access="readwrite"/>
        <collection-descriptor
                name="questions"
                element-class-ref="com.alloyinc.quiz.bean.Question"
                orderby="questionNumber"
                sort="ASC"
                proxy="true">
            <inverse-foreignkey
                    field-ref="quizId"/>
        </collection-descriptor>
    </class-descriptor>

    <!-- TABLE QUESTION -->
    <class-descriptor
            class="com.alloyinc.quiz.bean.Question"
            table="QUIZ_QUESTION">
        <field-descriptor
                name="id"
                column="question_id"
                jdbc-type="INTEGER"
                primarykey="true"
                autoincrement="true"
                access="readonly"/>
        <field-descriptor
                name="questionDesc"
                column="question_desc"
                jdbc-type="VARCHAR"
                access="readwrite"/>
        <field-descriptor
                name="questionType"
                column="question_type"
                jdbc-type="VARCHAR"
                access="readwrite"/>
        <field-descriptor
                name="quizId"
                column="quiz_id"
                jdbc-type="INTEGER"
                access="anonymous"/>
        <reference-descriptor
                name="quiz"
                class-ref="com.alloyinc.quiz.bean.Quiz"
                auto-update="false">
            <foreignkey
                    field-ref="quizId"/>
        </reference-descriptor>
        <field-descriptor
                name="questionNumber"
                column="question_number"
                jdbc-type="INTEGER"
                access="readwrite"/>
        <field-descriptor
                name="pageNumber"
                column="page_number"
                jdbc-type="INTEGER"
                access="readwrite"/>
        <collection-descriptor
                name="questionChoices"
                element-class-ref="com.alloyinc.quiz.bean.QuestionChoice"
                orderby="id"
                sort="ASC"
                proxy="true">
            <inverse-foreignkey
                    field-ref="questionId"/>
        </collection-descriptor>
    </class-descriptor>

    <!-- TABLE QUESTION_CHOICE -->
    <class-descriptor
            class="com.alloyinc.quiz.bean.QuestionChoice"
            table="QUIZ_QUESTION_CHOICE">
        <field-descriptor
                name="id"
                column="question_choice_id"
                jdbc-type="INTEGER"
                primarykey="true"
                autoincrement="true"
                access="readonly"/>
        <field-descriptor
                name="questionChoiceDesc"
                column="question_choice_desc"
                jdbc-type="VARCHAR"
                access="readwrite"/>
        <field-descriptor
                name="questionChoiceValue"
                column="question_choice_value"
                jdbc-type="INTEGER"
                access="readwrite"/>
        <field-descriptor
                name="questionId"
                column="question_id"
                jdbc-type="INTEGER"
                access="anonymous"/>
        <reference-descriptor
                name="question"
                class-ref="com.alloyinc.quiz.bean.Question"
                auto-update="false">
            <foreignkey
                    field-ref="questionId"/>
        </reference-descriptor>
    </class-descriptor>

    <!-- TABLE QUESTION_ANSWER -->
    <class-descriptor
            class="com.alloyinc.quiz.bean.QuestionAnswer"
            table="QUIZ_QUESTION_ANSWER">
        <field-descriptor
                name="id"
                column="question_answer_id"
                jdbc-type="INTEGER"
                primarykey="true"
                autoincrement="true"
                access="readonly"/>
        <field-descriptor
                name="questionAnswerValue"
                column="question_answer_value"
                jdbc-type="INTEGER"
                access="readwrite"/>
        <field-descriptor
                name="questionId"
                column="question_id"
                jdbc-type="INTEGER"
                access="anonymous"/>
        <reference-descriptor
                name="question"
                class-ref="com.alloyinc.quiz.bean.Question"
                auto-update="false">
            <foreignkey
                    field-ref="questionId"/>
        </reference-descriptor>
        <field-descriptor
                name="quizReportId"
                column="quiz_report_id"
                jdbc-type="INTEGER"
                access="anonymous"/>
        <reference-descriptor
                name="quizReport"
                class-ref="com.alloyinc.quiz.bean.QuizReport"
                auto-update="false">
            <foreignkey
                    field-ref="quizReportId"/>
        </reference-descriptor>
    </class-descriptor>

    <!-- TABLE QUIZ_REPORT -->
    <class-descriptor
            class="com.alloyinc.quiz.bean.QuizReport"
            table="QUIZ_REPORT">
        <field-descriptor
                name="id"
                column="quiz_report_id"
                jdbc-type="INTEGER"
                primarykey="true"
                autoincrement="true"
                access="readonly"/>
        <field-descriptor
                name="quizId"
                column="quiz_id"
                jdbc-type="INTEGER"
                access="anonymous"/>
        <reference-descriptor
                name="quiz"
                class-ref="com.alloyinc.quiz.bean.Quiz">
            <foreignkey
                    field-ref="quizId"/>
        </reference-descriptor>
        <field-descriptor
                name="dateTimeTaken"
                column="date_time_taken"
                jdbc-type="TIMESTAMP"
                access="readwrite"/>
    </class-descriptor>

    <!-- TABLE QUIZ_REPORT_SCORE -->
    <class-descriptor
            class="com.alloyinc.quiz.bean.QuizReportScore"
            table="QUIZ_REPORT_SCORE">
        <field-descriptor
                name="id"
                column="quiz_report_score_id"
                jdbc-type="INTEGER"
                primarykey="true"
                autoincrement="true"
                access="readonly"/>
        <field-descriptor
                name="resultTypeId"
                column="result_type_id"
                jdbc-type="INTEGER"
                access="anonymous"/>
        <reference-descriptor
                name="resultType"
                class-ref="com.alloyinc.quiz.bean.ResultType">
            <foreignkey
                    field-ref="resultTypeId"/>
        </reference-descriptor>
        <field-descriptor
                name="quizReportId"
                column="quiz_report_id"
                jdbc-type="INTEGER"
                access="anonymous"/>
        <reference-descriptor
                name="quizReport"
                class-ref="com.alloyinc.quiz.bean.QuizReport">
            <foreignkey
                    field-ref="quizReportId"/>
        </reference-descriptor>
    </class-descriptor>

    <!-- TABLE RESULT_TYPE -->
    <class-descriptor
            class="com.alloyinc.quiz.bean.ResultType"
            table="QUIZ_RESULT_TYPE">
        <field-descriptor
                name="id"
                column="result_type_id"
                jdbc-type="INTEGER"
                primarykey="true"
                autoincrement="true"
                access="readonly"/>
        <field-descriptor
                name="header"
                column="header"
                jdbc-type="VARCHAR"
                access="readwrite"/>
        <field-descriptor
                name="longDesc"
                column="long_desc"
                jdbc-type="VARCHAR"
                access="readwrite"/>
        <field-descriptor
                name="imagePath"
                column="image_path"
                jdbc-type="VARCHAR"
                access="readwrite"/>
        <field-descriptor
                name="pointRange"
                column="point_range"
                jdbc-type="VARCHAR"
                access="readwrite"/>
        <field-descriptor
                name="quizId"
                column="quiz_id"
                jdbc-type="INTEGER"
                access="anonymous"/>
        <reference-descriptor
                name="quiz"
                class-ref="com.alloyinc.quiz.bean.Quiz">
            <foreignkey
                    field-ref="quizId"/>
        </reference-descriptor>
    </class-descriptor>


</descriptor-repository>


------------------------------------------------------------------------------------



Armin Waibel said the following on 10/18/2005 1:50 PM:

> Hi Charlie,
>
> > Should I attach my repository.xml?  What should I be looking for 
> that would
> > be making this so slow?  I've never seen anything like this.
>
> yep, the metadata mapping for TestCalculateLogic.java (and all 
> referenced objects) would be helpful.
> Which API do you use (PB-api, ODMG-api)?
> Did you extend one or more of the pluggable classes (e.g. RowReader, 
> ...)?
> Which cache, connection-factory implementation do you use?
>
> regards
> Armin
>
>
>
> Charles Harvey III wrote:
>
>> Ok.  I did that.  I setup a JDBC method and did everything via JDBC.
>> (Been a while since I've had to do that, no wonder I use ORM software.)
>>
>> 3710  INFO (TestCalculateLogic.java:37) :: *** testCommitAnswers() ***
>> 31095  INFO (CalculateLogic.java:186) :: inserted QuizReport id: 537991
>> 153408  INFO (CalculateLogic.java:301) :: inserted QuestionAnswer id: 
>> 3168866
>> 327598  INFO (CalculateLogic.java:301) :: inserted QuestionAnswer id: 
>> 3168867
>>
>> 2158  INFO (TestCalculateLogic.java:81) :: *** 
>> testCommitAnswersJDBC() ***
>> 3322  INFO (CalculateLogic.java:274) :: inserted QuizReport id: 537992
>> 4673  INFO (CalculateLogic.java:301) :: inserted QuestionAnswer id: 
>> 3168869
>> 6004  INFO (CalculateLogic.java:301) :: inserted QuestionAnswer id: 
>> 3168870
>>
>>
>> HUGE difference between the two in the log time on the left.  What is
>> happening?
>>
>> Should I attach my repository.xml?  What should I be looking for that 
>> would
>> be making this so slow?  I've never seen anything like this.
>>
>>
>>
>> Charlie
>>
>>
>>
>> Thomas Franke said the following on 10/13/2005 3:26 AM:
>>
>>> Charles Harvey III wrote:
>>>
>>>  
>>>
>>>> Any ideas?  Could it be the data structure?  A setting in OJB?  
>>>> Something
>>>> wrong with the database (MSSQL)?
>>>>   
>>>
>>>
>>> How about to try your statement without OJB e.g. only with JDBC? So 
>>> you could
>>> figure out if it is an OJB or another problem. Maybe you are using 
>>> the wrong driver?
>>>
>>> Regards,
>>>
>>> Thomas
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>>> For additional commands, e-mail: ojb-user-help@db.apache.org
>>>
>>>
>>>  
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>> For additional commands, e-mail: ojb-user-help@db.apache.org
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: impossibly long insert time for one object

Posted by Armin Waibel <ar...@apache.org>.
Hi Charlie,

 > Should I attach my repository.xml?  What should I be looking for that 
would
 > be making this so slow?  I've never seen anything like this.

yep, the metadata mapping for TestCalculateLogic.java (and all 
referenced objects) would be helpful.
Which API do you use (PB-api, ODMG-api)?
Did you extend one or more of the pluggable classes (e.g. RowReader, ...)?
Which cache, connection-factory implementation do you use?

regards
Armin



Charles Harvey III wrote:
> Ok.  I did that.  I setup a JDBC method and did everything via JDBC.
> (Been a while since I've had to do that, no wonder I use ORM software.)
> 
> 3710  INFO (TestCalculateLogic.java:37) :: *** testCommitAnswers() ***
> 31095  INFO (CalculateLogic.java:186) :: inserted QuizReport id: 537991
> 153408  INFO (CalculateLogic.java:301) :: inserted QuestionAnswer id: 
> 3168866
> 327598  INFO (CalculateLogic.java:301) :: inserted QuestionAnswer id: 
> 3168867
> 
> 2158  INFO (TestCalculateLogic.java:81) :: *** testCommitAnswersJDBC() ***
> 3322  INFO (CalculateLogic.java:274) :: inserted QuizReport id: 537992
> 4673  INFO (CalculateLogic.java:301) :: inserted QuestionAnswer id: 3168869
> 6004  INFO (CalculateLogic.java:301) :: inserted QuestionAnswer id: 3168870
> 
> 
> HUGE difference between the two in the log time on the left.  What is
> happening?
> 
> Should I attach my repository.xml?  What should I be looking for that would
> be making this so slow?  I've never seen anything like this.
> 
> 
> 
> Charlie
> 
> 
> 
> Thomas Franke said the following on 10/13/2005 3:26 AM:
> 
>> Charles Harvey III wrote:
>>
>>  
>>
>>> Any ideas?  Could it be the data structure?  A setting in OJB?  
>>> Something
>>> wrong with the database (MSSQL)?
>>>   
>>
>> How about to try your statement without OJB e.g. only with JDBC? So 
>> you could
>> figure out if it is an OJB or another problem. Maybe you are using the 
>> wrong driver?
>>
>> Regards,
>>
>> Thomas
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>> For additional commands, e-mail: ojb-user-help@db.apache.org
>>
>>
>>  
>>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: impossibly long insert time for one object

Posted by Charles Harvey III <ch...@alloy.com>.
Ok.  I did that.  I setup a JDBC method and did everything via JDBC.
(Been a while since I've had to do that, no wonder I use ORM software.)

3710  INFO (TestCalculateLogic.java:37) :: *** testCommitAnswers() ***
31095  INFO (CalculateLogic.java:186) :: inserted QuizReport id: 537991
153408  INFO (CalculateLogic.java:301) :: inserted QuestionAnswer id: 
3168866
327598  INFO (CalculateLogic.java:301) :: inserted QuestionAnswer id: 
3168867

2158  INFO (TestCalculateLogic.java:81) :: *** testCommitAnswersJDBC() ***
3322  INFO (CalculateLogic.java:274) :: inserted QuizReport id: 537992
4673  INFO (CalculateLogic.java:301) :: inserted QuestionAnswer id: 3168869
6004  INFO (CalculateLogic.java:301) :: inserted QuestionAnswer id: 3168870


HUGE difference between the two in the log time on the left.  What is
happening?

Should I attach my repository.xml?  What should I be looking for that would
be making this so slow?  I've never seen anything like this.



Charlie



Thomas Franke said the following on 10/13/2005 3:26 AM:

>Charles Harvey III wrote:
>
>  
>
>>Any ideas?  Could it be the data structure?  A setting in OJB?  Something
>>wrong with the database (MSSQL)?
>>    
>>
>How about to try your statement without OJB e.g. only with JDBC? So you could
>figure out if it is an OJB or another problem. Maybe you are using the wrong driver?
>
>Regards,
>
>Thomas
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>For additional commands, e-mail: ojb-user-help@db.apache.org
>
>
>  
>

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: impossibly long insert time for one object

Posted by Thomas Franke <fr...@softenergy.de>.
Charles Harvey III wrote:

> Any ideas?  Could it be the data structure?  A setting in OJB?  Something
> wrong with the database (MSSQL)?
How about to try your statement without OJB e.g. only with JDBC? So you could
figure out if it is an OJB or another problem. Maybe you are using the wrong driver?

Regards,

Thomas

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org