[Mulgara-dev] org.mulgara.resolver.spi.LocalizeException: Unable to localize

Andrae Muys andrae at netymon.com
Thu Jul 3 01:57:20 UTC 2008


Just looking at this trace it appears that the answer (or a sub- 
answer) was closed explicitly, the transaction cleanly terminated,  
and then the answer/sub-answer used again.

An error in this case is expected, and wouldn't be a bug in mulgara  
but a bug in the client. So while I can't guarantee there isn't  
anything screwy going on, there is nothing untoward in this trace.

On 03/07/2008, at 9:49 AM, Pradeep Krishnan wrote:
> 2008-07-02 15:14:40,403 INFO  TransactionalAnswer> Creating Answer:  
> 507856632, xa=0 [RMI TCP Connection(4)-207.7.131.23  
> org.mulgara.resolver.TransactionalAnswer]
> 2008-07-02 15:14:40,403 INFO  TransactionalAnswer> Created Answer:  
> 507856632, xa=1147066451 [RMI TCP Connection(4)-207.7.131.23  
> org.mulgara.resolver.TransactionalAnswer]
> 2008-07-02 15:14:40,403 INFO  TransactionalAnswer> Closing Answer:  
> 507856632, xa=1147066451 [RMI TCP Connection(4)-207.7.131.23  
> org.mulgara.resolver.TransactionalAnswer]
> 2008-07-02 15:14:40,403 INFO  TransactionalAnswer> Closed Answer:  
> 507856632, xa=0 [RMI TCP Connection(4)-207.7.131.23  
> org.mulgara.resolver.TransactionalAnswer]

This here is a clean close, exactly what we would expect to see if  
someone called "answer.close()" at the client.

> 2008-07-02 15:14:40,403 INFO  MulgaraXAResourceContext> Performing  
> commit: :1114926712:-684707558:-475068290: [RMI TCP Connection 
> (5)-207.7.131.23 org.mulgara.resolver.MulgaraXAResourceContext]
> 2008-07-02 15:14:40,403 INFO  MulgaraExternalTransaction> prepare:  
> 1147066451 [RMI TCP Connection(5)-207.7.131.23  
> org.mulgara.resolver.MulgaraExternalTransaction]
> 2008-07-02 15:14:40,404 INFO  MulgaraExternalTransaction> commit:  
> 1147066451 [RMI TCP Connection(5)-207.7.131.23  
> org.mulgara.resolver.MulgaraExternalTransaction]
> 2008-07-02 15:14:40,404 INFO  MulgaraExternalTransaction>  
> cleanupTransaction: 1147066451 [RMI TCP Connection(5)-207.7.131.23  
> org.mulgara.resolver.MulgaraExternalTransaction]

Here we see the transaction terminated cleanly, we know it is clean  
because it did a successful commit() (although, without a write,  
there's almost nothing to do in commit()).  We are using external JTA  
code, so this isn't actually associated with the close above, but was  
triggered by some transaction manager at the client.

One thing that is missing from the trace is the transaction  
initiation, so we don't know if this is a read-only or read-write  
transaction.  Still it hardly matters as everything to this point has  
been both explicit and successful.  Note: This is not a timeout  
issue, as a timeout would trigger a rollback, not a commit.

> 2008-07-02 15:14:40,405 WARN  MulgaraExternalTransaction> Error in  
> answer operation triggered rollback [RMI TCP Connection 
> (4)-207.7.131.23 org.mulgara.resolver.MulgaraExternalTransaction]
> org.mulgara.query.TuplesException: Couldn't evaluate aggregate
> 	at org.mulgara.resolver.SubqueryAnswer.getObject 
> (SubqueryAnswer.java:206)
> 	at org.mulgara.resolver.TransactionalAnswer$1.execute 
> (TransactionalAnswer.java:88)
> 	at org.mulgara.resolver.MulgaraExternalTransaction.execute 
> (MulgaraExternalTransaction.java:155)
> 	at org.mulgara.resolver.TransactionalAnswer.getObject 
> (TransactionalAnswer.java:86)
> 	at org.mulgara.server.rmi.AnswerPageImpl.<init> 
> (AnswerPageImpl.java:113)
> 	at org.mulgara.server.rmi.AnswerPageImpl.<init> 
> (AnswerPageImpl.java:143)
> 	at org.mulgara.server.rmi.AnswerWrapperRemoteAnswer.nextPage 
> (AnswerWrapperRemoteAnswer.java:240)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke 
> (NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke 
> (DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:585)
> 	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java: 
> 294)
> 	at sun.rmi.transport.Transport$1.run(Transport.java:153)
> 	at java.security.AccessController.doPrivileged(Native Method)
> 	at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
> 	at sun.rmi.transport.tcp.TCPTransport.handleMessages 
> (TCPTransport.java:466)
> 	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run 
> (TCPTransport.java:707)
> 	at java.lang.Thread.run(Thread.java:595)

Note this line:
> 	at org.mulgara.server.rmi.AnswerWrapperRemoteAnswer.nextPage 
> (AnswerWrapperRemoteAnswer.java:240)

If there is a problem at our end, it will almost certainly be related  
to the interaction between answer-paging and the transaction system.   
We are in nextPage(), and so if everything is fine at the client this  
is probably where we start looking.  Of course, someone has to first  
explain why we have a nice clean and explicit close() call  
immediately before this :).

<SNIP> The next bit of the trace is irrelevant, just unrolling the  
stack. Then we get to the localize that failed:

> Caused by: org.mulgara.resolver.spi.LocalizeException: Unable to  
> localize http://purl.org/dc/terms/hasPart - Attempting to localize  
> outside transaction (STATE = 4) 569080239
> 	at org.mulgara.resolver.StringPoolSession.localize 
> (StringPoolSession.java:396)
> 	at org.mulgara.resolver.StringPoolSession.localize 
> (StringPoolSession.java:196)
> 	at org.mulgara.resolver.store.StatementStoreResolver.localize 
> (StatementStoreResolver.java:446)
> 	at org.mulgara.resolver.LocalQueryResolver.localize 
> (LocalQueryResolver.java:129)
> 	at org.mulgara.resolver.DefaultConstraintHandlers$29.localize 
> (DefaultConstraintHandlers.java:394)
> 	at org.mulgara.resolver.ConstraintOperations.localize 
> (ConstraintOperations.java:240)
> 	at org.mulgara.resolver.LocalQueryResolver.resolve 
> (LocalQueryResolver.java:178)
> 	... 28 more

Note the STATE = 4, (this code hasn't been updated since Java 1.4,  
hence the lack of enums). Anything other than 0 indicates a  
transaction that is either uninitialized, terminated, or in the  
process of being terminated. 4 indicates RELEASE, ie. transaction has  
been terminated and cleaned up, and the phase released.  Hence the  
exception when we try to use it.

So we come back to.... why have we closed the answer, and why did the  
transaction-manager end the transaction, if we are still wanting to  
use the answer?

Andrae




More information about the Mulgara-dev mailing list