You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cayenne.apache.org by Marcin Skladaniec <ma...@ish.com.au> on 2006/12/06 02:56:14 UTC

creating long expressions

Hi
I create a really long org.cayenne.exp.Expression. The longest I  
created so far, had 63000 characters as string. The problem is that  
after reaching certain (not sure what size, need to test more) size I  
get:

Exception in thread "Thread-8"  
org.apache.cayenne.CayenneRuntimeException: [v.3.0-incubating- 
SNAPSHOT ] Remote error. URL - http://localhost:8181/angel-server- 
cayenne
         at  
org.apache.cayenne.remote.hessian.HessianConnection.doSendMessage 
(HessianConnection.java:145)
         at org.apache.cayenne.remote.BaseConnection.sendMessage 
(BaseConnection.java:73)
         at org.apache.cayenne.remote.ClientChannel.send 
(ClientChannel.java:276)
         at org.apache.cayenne.remote.ClientChannel.onQuery 
(ClientChannel.java:110)
         at org.apache.cayenne.util.ObjectContextQueryAction.runQuery 
(ObjectContextQueryAction.java:282)
         at org.apache.cayenne.CayenneContextQueryAction.execute 
(CayenneContextQueryAction.java:51)
         at org.apache.cayenne.CayenneContext.onQuery 
(CayenneContext.java:347)
         at org.apache.cayenne.CayenneContext.performQuery 
(CayenneContext.java:336)
         at ish.oncourse.cayenne.CayenneContext.performQuery 
(CayenneContext.java:152)
         at  
ish.oncourse.print.ProfitLossPrintableObject.getTransactionsFromRecords( 
ProfitLossPrintableObject.java:180)
         at ish.oncourse.controller.PrintController$1.construct 
(PrintController.java:263)
         at ish.oncourse.view.SwingWorker$2.run(SwingWorker.java:117)
         at java.lang.Thread.run(Thread.java:613)
Caused by: java.lang.StackOverflowError
         at java.util.IdentityHashMap.hash(IdentityHashMap.java:283)
         at java.util.IdentityHashMap.get(IdentityHashMap.java:313)
         at com.caucho.hessian.io.HessianOutput.addRef 
(HessianOutput.java:799)
         at com.caucho.hessian.io.JavaSerializer.writeObject 
(JavaSerializer.java:134)
         at com.caucho.hessian.io.HessianOutput.writeObject 
(HessianOutput.java:317)
         at com.caucho.hessian.io.JavaSerializer 
$FieldSerializer.serialize(JavaSerializer.java:242)
         at com.caucho.hessian.io.JavaSerializer.writeObject10 
(JavaSerializer.java:175)
         at com.caucho.hessian.io.JavaSerializer.writeObject 
(JavaSerializer.java:157)
         at com.caucho.hessian.io.HessianOutput.writeObject 
(HessianOutput.java:317)
         at com.caucho.hessian.io.JavaSerializer 
$FieldSerializer.serialize(JavaSerializer.java:242)
         at com.caucho.hessian.io.JavaSerializer.writeObject10 
(JavaSerializer.java:175)
         at com.caucho.hessian.io.JavaSerializer.writeObject 
(JavaSerializer.java:157)

It looks like hessian is failing to serialise the Expression. I'm I  
right ? If so I'll post them a bug report.

Marcin

Re: creating long expressions

Posted by Andrus Adamchik <an...@objectstyle.org>.
Can't comment on Derby, but it is a good idea to call huge queries  
via a named query - you'll save some time on data transfer. Also  
another point is raised here - serialization behavior of the server- 
side exceptions is unpredictable so we may need to add an abstraction  
layer to the servlet. Sorry - that's a bit OT.

Andrus


On Dec 6, 2006, at 6:12 AM, Marcin Skladaniec wrote:
> Hello
> I tried a few approaches. I made the query to the server with  
> NamedQuery and something like :
>
> 			Map map = new HashMap();
> 			map.put( "entityName", "Apple" );
> 			map.put( "fieldName", "numberOfWormsInTheApple" );
> 			if (finalExpression != null ) {
> 				map.put("whereClause", "WHERE "+finalExpression.toString());
> 			} else {
> 				map.put("whereClause", "");
> 			}
> 			NamedQuery namedQuery = new NamedQuery("SumQuery", map);
>
> and the sql on the other end looking like :
> 		SELECT sum($fieldName) FROM $entityName $whereClause
>
> The query gets to the server, but an exception is thrown, what I  
> get suggest that there is a limit on query length in derby. I tried  
> to execute the long expression in squirrel, getting  
> StackOveflowError too.
> Can someone confirm that there is a limit on sql query length in  
> derby ? There is nothing in google about that.
> Marcin
>
> Ps: I get this from server :
> java.lang.IllegalStateException: Serialized class  
> org.apache.derby.client.net.NetSqlca does not implement  
> java.io.Serializable
>         at com.caucho.hessian.io.JavaSerializer.<init> 
> (JavaSerializer.java)
>         at  
> com.caucho.hessian.io.SerializerFactory.getDefaultSerializer 
> (SerializerFactory.java:200)
>         at com.caucho.hessian.io.SerializerFactory.getSerializer 
> (SerializerFactory.java)
>         at com.caucho.hessian.io.HessianOutput.writeObject 
> (HessianOutput.java:315)
>         at com.caucho.hessian.io.JavaSerializer 
> $FieldSerializer.serialize(JavaSerializer.java:242)
>         at com.caucho.hessian.io.JavaSerializer.writeObject10 
> (JavaSerializer.java:175)
>         at com.caucho.hessian.io.JavaSerializer.writeObject 
> (JavaSerializer.java:157)
>         at com.caucho.hessian.io.ThrowableSerializer.writeObject 
> (ThrowableSerializer.java:71)
>         at com.caucho.hessian.io.HessianOutput.writeObject 
> (HessianOutput.java:317)
>         at com.caucho.hessian.io.JavaSerializer 
> $FieldSerializer.serialize(JavaSerializer.java:242)
>         at com.caucho.hessian.io.JavaSerializer.writeObject10 
> (JavaSerializer.java:175)
>         at com.caucho.hessian.io.JavaSerializer.writeObject 
> (JavaSerializer.java:157)
>         at com.caucho.hessian.io.ThrowableSerializer.writeObject 
> (ThrowableSerializer.java:71)
>         at com.caucho.hessian.io.HessianOutput.writeObject 
> (HessianOutput.java:317)
>         at com.caucho.hessian.io.HessianOutput.writeFault 
> (HessianOutput.java:297)
>         at com.caucho.hessian.server.HessianSkeleton.invoke 
> (HessianSkeleton.java:165)
>         at com.caucho.hessian.server.HessianServlet.service 
> (HessianServlet.java:365)
>         at ish.oncourse.server.CayenneServlet.service 
> (CayenneServlet.java:104)
>         at org.mortbay.jetty.servlet.ServletHolder.handle 
> (ServletHolder.java:428)
>         at org.mortbay.jetty.servlet.ServletHandler.dispatch 
> (ServletHandler.java:666)
>         at org.mortbay.jetty.servlet.ServletHandler.handle 
> (ServletHandler.java:568)
>         at org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
>         at org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
>         at org.mortbay.http.HttpServer.service(HttpServer.java:909)
>         at org.mortbay.http.HttpConnection.service 
> (HttpConnection.java:816)
>         at org.mortbay.http.HttpConnection.handleNext 
> (HttpConnection.java:982)
>         at org.mortbay.http.HttpConnection.handle 
> (HttpConnection.java:833)
>         at org.mortbay.http.SocketListener.handleConnection 
> (SocketListener.java:244)
>         at org.mortbay.util.ThreadedServer.handle 
> (ThreadedServer.java:357)
>         at org.mortbay.util.ThreadPool$PoolThread.run 
> (ThreadPool.java:534)
>
>
>
> On 06/12/2006, at 11:56 AM, Marcin Skladaniec wrote:
>
>> Hi
>> I create a really long org.cayenne.exp.Expression. The longest I  
>> created so far, had 63000 characters as string. The problem is  
>> that after reaching certain (not sure what size, need to test  
>> more) size I get:
>>
>> Exception in thread "Thread-8"  
>> org.apache.cayenne.CayenneRuntimeException: [v.3.0-incubating- 
>> SNAPSHOT ] Remote error. URL - http://localhost:8181/angel-server- 
>> cayenne
>>         at  
>> org.apache.cayenne.remote.hessian.HessianConnection.doSendMessage 
>> (HessianConnection.java:145)
>>         at org.apache.cayenne.remote.BaseConnection.sendMessage 
>> (BaseConnection.java:73)
>>         at org.apache.cayenne.remote.ClientChannel.send 
>> (ClientChannel.java:276)
>>         at org.apache.cayenne.remote.ClientChannel.onQuery 
>> (ClientChannel.java:110)
>>         at  
>> org.apache.cayenne.util.ObjectContextQueryAction.runQuery 
>> (ObjectContextQueryAction.java:282)
>>         at org.apache.cayenne.CayenneContextQueryAction.execute 
>> (CayenneContextQueryAction.java:51)
>>         at org.apache.cayenne.CayenneContext.onQuery 
>> (CayenneContext.java:347)
>>         at org.apache.cayenne.CayenneContext.performQuery 
>> (CayenneContext.java:336)
>>         at ish.oncourse.cayenne.CayenneContext.performQuery 
>> (CayenneContext.java:152)
>>         at  
>> ish.oncourse.print.ProfitLossPrintableObject.getTransactionsFromRecor 
>> ds(ProfitLossPrintableObject.java:180)
>>         at ish.oncourse.controller.PrintController$1.construct 
>> (PrintController.java:263)
>>         at ish.oncourse.view.SwingWorker$2.run(SwingWorker.java:117)
>>         at java.lang.Thread.run(Thread.java:613)
>> Caused by: java.lang.StackOverflowError
>>         at java.util.IdentityHashMap.hash(IdentityHashMap.java:283)
>>         at java.util.IdentityHashMap.get(IdentityHashMap.java:313)
>>         at com.caucho.hessian.io.HessianOutput.addRef 
>> (HessianOutput.java:799)
>>         at com.caucho.hessian.io.JavaSerializer.writeObject 
>> (JavaSerializer.java:134)
>>         at com.caucho.hessian.io.HessianOutput.writeObject 
>> (HessianOutput.java:317)
>>         at com.caucho.hessian.io.JavaSerializer 
>> $FieldSerializer.serialize(JavaSerializer.java:242)
>>         at com.caucho.hessian.io.JavaSerializer.writeObject10 
>> (JavaSerializer.java:175)
>>         at com.caucho.hessian.io.JavaSerializer.writeObject 
>> (JavaSerializer.java:157)
>>         at com.caucho.hessian.io.HessianOutput.writeObject 
>> (HessianOutput.java:317)
>>         at com.caucho.hessian.io.JavaSerializer 
>> $FieldSerializer.serialize(JavaSerializer.java:242)
>>         at com.caucho.hessian.io.JavaSerializer.writeObject10 
>> (JavaSerializer.java:175)
>>         at com.caucho.hessian.io.JavaSerializer.writeObject 
>> (JavaSerializer.java:157)
>>
>> It looks like hessian is failing to serialise the Expression. I'm  
>> I right ? If so I'll post them a bug report.
>>
>> Marcin
>
> -------------------------->
> ish
> http://www.ish.com.au
> Level 1, 30 Wilson Street Newtown 2042 Australia
> phone +61 2 9550 5001   fax +61 2 9550 4001
>
>
>


Re: creating long expressions

Posted by Marcin Skladaniec <ma...@ish.com.au>.
Hello
I tried a few approaches. I made the query to the server with  
NamedQuery and something like :

			Map map = new HashMap();
			map.put( "entityName", "Apple" );
			map.put( "fieldName", "numberOfWormsInTheApple" );
			if (finalExpression != null ) {
				map.put("whereClause", "WHERE "+finalExpression.toString());
			} else {
				map.put("whereClause", "");
			}
			NamedQuery namedQuery = new NamedQuery("SumQuery", map);

and the sql on the other end looking like :
		SELECT sum($fieldName) FROM $entityName $whereClause

The query gets to the server, but an exception is thrown, what I get  
suggest that there is a limit on query length in derby. I tried to  
execute the long expression in squirrel, getting StackOveflowError too.
Can someone confirm that there is a limit on sql query length in  
derby ? There is nothing in google about that.
Marcin

Ps: I get this from server :
java.lang.IllegalStateException: Serialized class  
org.apache.derby.client.net.NetSqlca does not implement  
java.io.Serializable
         at com.caucho.hessian.io.JavaSerializer.<init> 
(JavaSerializer.java)
         at  
com.caucho.hessian.io.SerializerFactory.getDefaultSerializer 
(SerializerFactory.java:200)
         at com.caucho.hessian.io.SerializerFactory.getSerializer 
(SerializerFactory.java)
         at com.caucho.hessian.io.HessianOutput.writeObject 
(HessianOutput.java:315)
         at com.caucho.hessian.io.JavaSerializer 
$FieldSerializer.serialize(JavaSerializer.java:242)
         at com.caucho.hessian.io.JavaSerializer.writeObject10 
(JavaSerializer.java:175)
         at com.caucho.hessian.io.JavaSerializer.writeObject 
(JavaSerializer.java:157)
         at com.caucho.hessian.io.ThrowableSerializer.writeObject 
(ThrowableSerializer.java:71)
         at com.caucho.hessian.io.HessianOutput.writeObject 
(HessianOutput.java:317)
         at com.caucho.hessian.io.JavaSerializer 
$FieldSerializer.serialize(JavaSerializer.java:242)
         at com.caucho.hessian.io.JavaSerializer.writeObject10 
(JavaSerializer.java:175)
         at com.caucho.hessian.io.JavaSerializer.writeObject 
(JavaSerializer.java:157)
         at com.caucho.hessian.io.ThrowableSerializer.writeObject 
(ThrowableSerializer.java:71)
         at com.caucho.hessian.io.HessianOutput.writeObject 
(HessianOutput.java:317)
         at com.caucho.hessian.io.HessianOutput.writeFault 
(HessianOutput.java:297)
         at com.caucho.hessian.server.HessianSkeleton.invoke 
(HessianSkeleton.java:165)
         at com.caucho.hessian.server.HessianServlet.service 
(HessianServlet.java:365)
         at ish.oncourse.server.CayenneServlet.service 
(CayenneServlet.java:104)
         at org.mortbay.jetty.servlet.ServletHolder.handle 
(ServletHolder.java:428)
         at org.mortbay.jetty.servlet.ServletHandler.dispatch 
(ServletHandler.java:666)
         at org.mortbay.jetty.servlet.ServletHandler.handle 
(ServletHandler.java:568)
         at org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
         at org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
         at org.mortbay.http.HttpServer.service(HttpServer.java:909)
         at org.mortbay.http.HttpConnection.service 
(HttpConnection.java:816)
         at org.mortbay.http.HttpConnection.handleNext 
(HttpConnection.java:982)
         at org.mortbay.http.HttpConnection.handle 
(HttpConnection.java:833)
         at org.mortbay.http.SocketListener.handleConnection 
(SocketListener.java:244)
         at org.mortbay.util.ThreadedServer.handle 
(ThreadedServer.java:357)
         at org.mortbay.util.ThreadPool$PoolThread.run 
(ThreadPool.java:534)



On 06/12/2006, at 11:56 AM, Marcin Skladaniec wrote:

> Hi
> I create a really long org.cayenne.exp.Expression. The longest I  
> created so far, had 63000 characters as string. The problem is that  
> after reaching certain (not sure what size, need to test more) size  
> I get:
>
> Exception in thread "Thread-8"  
> org.apache.cayenne.CayenneRuntimeException: [v.3.0-incubating- 
> SNAPSHOT ] Remote error. URL - http://localhost:8181/angel-server- 
> cayenne
>         at  
> org.apache.cayenne.remote.hessian.HessianConnection.doSendMessage 
> (HessianConnection.java:145)
>         at org.apache.cayenne.remote.BaseConnection.sendMessage 
> (BaseConnection.java:73)
>         at org.apache.cayenne.remote.ClientChannel.send 
> (ClientChannel.java:276)
>         at org.apache.cayenne.remote.ClientChannel.onQuery 
> (ClientChannel.java:110)
>         at org.apache.cayenne.util.ObjectContextQueryAction.runQuery 
> (ObjectContextQueryAction.java:282)
>         at org.apache.cayenne.CayenneContextQueryAction.execute 
> (CayenneContextQueryAction.java:51)
>         at org.apache.cayenne.CayenneContext.onQuery 
> (CayenneContext.java:347)
>         at org.apache.cayenne.CayenneContext.performQuery 
> (CayenneContext.java:336)
>         at ish.oncourse.cayenne.CayenneContext.performQuery 
> (CayenneContext.java:152)
>         at  
> ish.oncourse.print.ProfitLossPrintableObject.getTransactionsFromRecord 
> s(ProfitLossPrintableObject.java:180)
>         at ish.oncourse.controller.PrintController$1.construct 
> (PrintController.java:263)
>         at ish.oncourse.view.SwingWorker$2.run(SwingWorker.java:117)
>         at java.lang.Thread.run(Thread.java:613)
> Caused by: java.lang.StackOverflowError
>         at java.util.IdentityHashMap.hash(IdentityHashMap.java:283)
>         at java.util.IdentityHashMap.get(IdentityHashMap.java:313)
>         at com.caucho.hessian.io.HessianOutput.addRef 
> (HessianOutput.java:799)
>         at com.caucho.hessian.io.JavaSerializer.writeObject 
> (JavaSerializer.java:134)
>         at com.caucho.hessian.io.HessianOutput.writeObject 
> (HessianOutput.java:317)
>         at com.caucho.hessian.io.JavaSerializer 
> $FieldSerializer.serialize(JavaSerializer.java:242)
>         at com.caucho.hessian.io.JavaSerializer.writeObject10 
> (JavaSerializer.java:175)
>         at com.caucho.hessian.io.JavaSerializer.writeObject 
> (JavaSerializer.java:157)
>         at com.caucho.hessian.io.HessianOutput.writeObject 
> (HessianOutput.java:317)
>         at com.caucho.hessian.io.JavaSerializer 
> $FieldSerializer.serialize(JavaSerializer.java:242)
>         at com.caucho.hessian.io.JavaSerializer.writeObject10 
> (JavaSerializer.java:175)
>         at com.caucho.hessian.io.JavaSerializer.writeObject 
> (JavaSerializer.java:157)
>
> It looks like hessian is failing to serialise the Expression. I'm I  
> right ? If so I'll post them a bug report.
>
> Marcin

-------------------------->
ish
http://www.ish.com.au
Level 1, 30 Wilson Street Newtown 2042 Australia
phone +61 2 9550 5001   fax +61 2 9550 4001