I don't see a recursive loop here... everything is normal.
Anyway, enjoy your vacation :-) We'll get to it later.
Andrus
On Feb 1, 2006, at 5:53 PM, Bryan Lewis wrote:
> Andrus, I did a thread-dump during the hang as you suggested.
>
> "http-8080-Processor23" daemon prio=10 tid=0x014b1bb0 nid=0x2d
> runnable
> [0xdca7c000..0xdca7fb70]
> at
> org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(
> AppenderAttachableImpl.java:57)
> at org.apache.log4j.Category.callAppenders(Category.java:194)
> - locked <0xe98641e8> (a org.apache.log4j.spi.RootLogger)
> at org.apache.log4j.Category.forcedLog(Category.java:379)
> at org.apache.log4j.Category.log(Category.java:826)
> at
> org.objectstyle.cayenne.access.QueryLogger.logUpdateCount
> (QueryLogger.java:399)
> at
> org.objectstyle.cayenne.access.jdbc.SQLTemplateAction.performAction
> (SQLTemplateAction.java:178)
> at
> org.objectstyle.cayenne.access.DataNodeQueryAction.runQuery
> (DataNodeQueryAction.java:95)
> at
> org.objectstyle.cayenne.access.DataNode.performQueries
> (DataNode.java:321)
> at
> org.objectstyle.cayenne.access.DataDomainQueryAction.performQuery
> (DataDomainQueryAction.java:107)
> at
> org.objectstyle.cayenne.access.DataDomain.performQueries
> (DataDomain.java:643)
> at
> org.objectstyle.cayenne.access.DataContext.performQueries
> (DataContext.java:1100)
> at
> org.objectstyle.cayenne.access.Transaction.performQueries
> (Transaction.java:207)
> at
> org.objectstyle.cayenne.access.DataContext.performQueries
> (DataContext.java:1068)
> at
> org.objectstyle.cayenne.access.DataContextSelectAction.performQuery
> (DataContextSelectAction.java:173)
> at
> org.objectstyle.cayenne.access.DataContextSelectAction.performQuery
> (DataContextSelectAction.java:93)
> at
> org.objectstyle.cayenne.access.DataContext.performQuery
> (DataContext.java:1200)
> at model.YPSearchData.tryQuery(YPSearchData.java:227)
>
> A second time:
>
> "http-8080-Processor25" daemon prio=10 tid=0x015fe538 nid=0x2f
> runnable
> [0xdc87c000..0xdc87f9f0]
> at java.io.FileOutputStream.write(FileOutputStream.java:260)
> at
> sun.nio.cs.StreamEncoder$CharsetSE.writeBytes(StreamEncoder.java:336)
> at
> sun.nio.cs.StreamEncoder$CharsetSE.implFlushBuffer
> (StreamEncoder.java:404)
> at
> sun.nio.cs.StreamEncoder$CharsetSE.implFlush(StreamEncoder.java:408)
> at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:152)
> - locked <0xe88c3f48> (a java.io.OutputStreamWriter)
> at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:
> 213)
> at org.apache.log4j.helpers.QuietWriter.flush
> (QuietWriter.java:49)
> at
> org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:306)
> at
> org.apache.log4j.DailyRollingFileAppender.subAppend
> (DailyRollingFileAppender.java:349)
> at org.apache.log4j.WriterAppender.append
> (WriterAppender.java:150)
> at
> org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:221)
> - locked <0xe88c3ce0> (a
> org.apache.log4j.DailyRollingFileAppender)
> at
> org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(
> AppenderAttachableImpl.java:57)
> at org.apache.log4j.Category.callAppenders(Category.java:194)
> - locked <0xf769fd48> (a org.apache.log4j.spi.RootLogger)
> at org.apache.log4j.Category.forcedLog(Category.java:379)
> at org.apache.log4j.Category.log(Category.java:826)
> at
> org.objectstyle.cayenne.access.QueryLogger.logUpdateCount
> (QueryLogger.java:399)
> at
> org.objectstyle.cayenne.access.jdbc.SQLTemplateAction.performAction
> (SQLTemplateAction.java:178)
> at
> org.objectstyle.cayenne.access.DataNodeQueryAction.runQuery
> (DataNodeQueryAction.java:95)
> at
> org.objectstyle.cayenne.access.DataNode.performQueries
> (DataNode.java:321)
> at
> org.objectstyle.cayenne.access.DataDomainQueryAction.performQuery
> (DataDomainQueryAction.java:107)
> at
> org.objectstyle.cayenne.access.DataDomain.performQueries
> (DataDomain.java:643)
> at
> org.objectstyle.cayenne.access.DataContext.performQueries
> (DataContext.java:1100)
> at
> org.objectstyle.cayenne.access.Transaction.performQueries
> (Transaction.java:207)
> at
> org.objectstyle.cayenne.access.DataContext.performQueries
> (DataContext.java:1068)
> at
> org.objectstyle.cayenne.access.DataContextSelectAction.performQuery
> (DataContextSelectAction.java:173)
> at
> org.objectstyle.cayenne.access.DataContextSelectAction.performQuery
> (DataContextSelectAction.java:93)
> at
> org.objectstyle.cayenne.access.DataContext.performQuery
> (DataContext.java:1200)
> at model.YPSearchData.tryQuery(YPSearchData.java:227)
> at model.YPSearchData.getYPSearchData(YPSearchData.java:47)
>
> At first glance I thought it was log4j that was hanging but maybe
> not.... I tried it again with cayenne's log level to ERROR. No log
> messages appeared during the hang but the hang still happened.
>
> Then I noticed that the problem happened only when the sql command
> didn't return a value, a 'delete' or 'insert'. Other 'select'
> commands
> were fine. This particular bit of code was doing only two commands, a
> delete and an insert, so I moved them to a stored procedure and
> invoked
> it with a ProcedureQuery. That worked.
>
> I'm going on a week's vacation tomorrow and won't have time to put
> together a good test case. Hoping the above info will help for now.
>
>
>
>
> Bryan Lewis wrote:
>
>> I have some code that worked well in earlier versions of Cayenne
>> (1.2M4
>> or before) but now it goes into an infinite loop.
>>
>> String sql = "delete from Search_Data where UserName = 'joe'";
>> SQLTemplate query = new SQLTemplate(Company.class, sql);
>> dc.performQuery(query);
>>
>> The query is deleting all the rows from the user's previous
>> search. In
>> this case there are 20 rows.
>>
>> The code enters the performQuery() but never comes out. The log
>> shows
>> an infinite list of this message:
>>
>> [QueryLogger] === updated 20 rows.
>>
>>
>>
>>
>
>
This archive was generated by hypermail 2.0.0 : Wed Feb 01 2006 - 18:02:39 EST