I am encountering a bug which doesn't quite happen reliably, but happens 
about 75% of the time.  The context is pretty large, so I'm going to just 
describe what's going on and see if anybody has any thoughts before I try 
to encapsulate it into a test case.

I'm using 1.0.3, ODMG, and the two-level cache.  Most of my objects are 
proxied; I don't use collection proxies.

I have a Transaction inside which, among other things, I make calls which 
sometimes result in proxy materialization.  The code looks something like 
this:

    tx.begin();
    if (! tx.isOpen()) LOGGER.error("*** Transaction is not open!!!");
    Collection res = profile.getUtmZones();
    if (res == null) {
        res = new HashSet();
        Iterator iter = profile.getCounties().iterator();
        while (iter.hasNext()) {
            CountyDetail cd = ((County) iter.next()).getDetail();
            if (! tx.isOpen()) LOGGER.error("*** Mid-scan: Transaction is 
not open!!!");
            res.addAll(cd.getUtmZones());
        }
    }
    ...
    tx.commit();

In my test case, the getCounties() list has 40+ entries; each county has 
only a single UtmZone.  Sometimes, the code runs to completion, and I end 
up with the correct contents in res.  Other times, it throws the following 
Exception after processing a few (about a dozen) of the counties:

19:39:22,399 ERROR [] odmg.TransactionImpl (TransactionImpl.java:280) - 
Unexpected failure while locking
org.odmg.TransactionNotInProgressException: Transaction was not open, call 
tx.begin() before perform action, current status is: STATUS_NO_TRANSACTION
                 at 
org.apache.ojb.odmg.TransactionImpl.checkOpen(TransactionImpl.java:188)
                 at 
org.apache.ojb.odmg.TransactionImpl.getBroker(TransactionImpl.java:1115)
                 at 
org.apache.ojb.odmg.ObjectEnvelope.getBroker(ObjectEnvelope.java:116)
                 at 
org.apache.ojb.odmg.ObjectEnvelope.refreshObjectImage(ObjectEnvelope.java:174)
                 at 
org.apache.ojb.odmg.ObjectEnvelope.<init>(ObjectEnvelope.java:110)
                 at 
org.apache.ojb.odmg.ObjectEnvelopeTable.get(ObjectEnvelopeTable.java:420)
                 at 
org.apache.ojb.odmg.TransactionImpl.register(TransactionImpl.java:884)
                 at 
org.apache.ojb.odmg.TransactionImpl.lockAndRegister(TransactionImpl.java:267)
                 at 
org.apache.ojb.odmg.TransactionImpl.afterMaterialization(TransactionImpl.java:1045)
                 at 
org.apache.ojb.broker.core.proxy.IndirectionHandlerDefaultImpl.afterMaterialization(IndirectionHandlerDefaultImpl.java:176)
                 at 
org.apache.ojb.broker.core.proxy.IndirectionHandlerDefaultImpl.getRealSubject(IndirectionHandlerDefaultImpl.java:349)
                 at 
org.apache.ojb.broker.core.proxy.IndirectionHandlerDefaultImpl.invoke(IndirectionHandlerDefaultImpl.java:324)
                 at $Proxy4.getUtmZones(Unknown Source)
                 at 
gov.doi.tat.dao.odmg.OfficeProfileDaoImpl.getUtmZones(OfficeProfileDaoImpl.java:813)

This is all currently inside a WebApp, so it's a bit difficult to 
perfectly control the test environment.  But my test methodology is to 
shut down Tomcat, start it up, and then go directly to the page which 
causes the error, so that it is the first page view in a fresh run. 
'profile' is always the same object, and profile.getUtmZones() always 
returns null.  This is the situation in which the code sometimes runs to 
completion and sometimes does not.

More info:
Profile.counties is a collection of proxied County's
County.detail is a proxied CountyDetail
County.utmZones is a collection of proxied UtmZone's
OfficeProfileDaoImpl.java:813 (the point at which the stack trace calls 
into OJB) is the res.addAll() line in the above code snippet
The "Mid-scan: Transaction is not open" message is not printed, so I 
assume that before I call getUtmZones(), I am in a valid Transaction
I have tried adding additional logging statements inside the loop.  If 
they look at the proxied objects at all, the location of the error 
changes, but the same error occurs (i.e., some other proxied object fails 
to be locked because of STATUS_NO_TRANSACTION)
I have tried catching the PBException and examining the Transaction at 
that point.  tx.isOpen() still returns true, and 
Implementation.currentTransaction() is still == tx

So I guess that it seems as if the proxy materialization is somehow 
calling back to some other Transaction that is no longer active. Anybody 
have any ideas on this?

thanks,
-steve

Steve Clark
ECOS Development Group
[EMAIL PROTECTED]
(970)226-9291

PS: For completeness, here's the entire stack trace once it gets wrapped 
as a PBException:

org.apache.ojb.broker.PersistenceBrokerException: Error invoking method 
getUtmZones
                 at 
org.apache.ojb.broker.core.proxy.IndirectionHandlerDefaultImpl.invoke(IndirectionHandlerDefaultImpl.java:334)
                 at $Proxy4.getUtmZones(Unknown Source)
                 at 
gov.doi.tat.dao.odmg.OfficeProfileDaoImpl.getUtmZones(OfficeProfileDaoImpl.java:817)
                 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:324)
                 at 
gov.doi.tails.dao.odmg.TailsOfficeProfileDaoImpl.invokeMethod(TailsOfficeProfileDaoImpl.java:454)
                 at 
gov.doi.tat.dao.odmg.AbstractOdmgDaoImpl.doInTransaction(AbstractOdmgDaoImpl.java:103)
                 at 
gov.doi.tat.dao.odmg.OfficeProfileDaoImpl.getUtmZones(OfficeProfileDaoImpl.java:448)
                 at 
gov.doi.tails.biz.CustomizationMgr.getUtmZones(CustomizationMgr.java:608)
                 at 
gov.doi.tails.util.TailsApplicationContext$8.buildOptions(TailsApplicationContext.java:554)
                 at 
gov.doi.tails.util.LutOptionsCache.getOptions(LutOptionsCache.java:67)
                 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:324)
                 at 
org.apache.commons.beanutils.PropertyUtils.getSimpleProperty(PropertyUtils.java:1185)
                 at 
org.apache.commons.beanutils.PropertyUtils.getNestedProperty(PropertyUtils.java:772)
                 at 
org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:801)
                 at 
org.apache.struts.util.RequestUtils.lookup(RequestUtils.java:952)
                 at 
org.apache.struts.taglib.html.OptionsCollectionTag.doStartTag(OptionsCollectionTag.java:219)
                 at 
org.apache.jsp.codeData_jsp._jspService(codeData_jsp.java:900)
                 at 
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
                 at 
javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
                 at 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210)
                 at 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
                 at 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
                 at 
javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
                 at 
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
                 at 
org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:575)
                 at 
org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:498)
                 at 
org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:822)
                 at 
org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:398)
                 at 
org.apache.struts.tiles.TilesUtilImpl.doInclude(TilesUtilImpl.java:137)
                 at 
org.apache.struts.tiles.TilesUtil.doInclude(TilesUtil.java:177)
                 at 
org.apache.struts.taglib.tiles.InsertTag.doInclude(InsertTag.java:756)
                 at 
org.apache.struts.taglib.tiles.InsertTag$InsertHandler.doEndTag(InsertTag.java:881)
                 at 
org.apache.struts.taglib.tiles.InsertTag.doEndTag(InsertTag.java:473)
                 at 
org.apache.jsp.tabbedLayout_jsp._jspx_meth_tiles_insert_7(tabbedLayout_jsp.java:733)
                 at 
org.apache.jsp.tabbedLayout_jsp._jspService(tabbedLayout_jsp.java:269)
                 at 
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
                 at 
javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
                 at 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210)
                 at 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
                 at 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
                 at 
javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
                 at 
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
                 at 
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:432)
                 at 
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:356)
                 at 
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
                 at 
org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:274)
                 at 
org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(TilesRequestProcessor.java:254)
                 at 
org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:309)
                 at 
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
                 at 
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
                 at 
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
                 at 
gov.doi.tat.servlet.TatActionServlet.doPost(TatActionServlet.java:147)
                 at 
gov.doi.tails.util.TailsController.doGet(TailsController.java:89)
                 at 
javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
                 at 
javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
                 at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
                 at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
                 at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
                 at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
                 at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
                 at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
                 at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
                 at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
                 at 
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492)
                 at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
                 at 
gov.doi.ecos.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:581)
                 at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
                 at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
                 at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
                 at 
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2422)
                 at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
                 at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
                 at 
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
                 at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
                 at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:163)
                 at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
                 at 
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:580)
                 at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
                 at 
org.apache.catalina.authenticator.EcosSingleSignOn.invoke(EcosSingleSignOn.java:159)
                 at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
                 at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
                 at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
                 at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
                 at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
                 at 
org.apache.catalina.valves.RequestDumperValve.invoke(RequestDumperValve.java:221)
                 at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
                 at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
                 at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
                 at 
org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:199)
                 at 
org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:324)
                 at 
org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:395)
                 at 
org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:673)
                 at 
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:615)
                 at 
org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:786)
                 at 
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
                 at java.lang.Thread.run(Thread.java:534)
Caused by: org.odmg.LockNotGrantedException: Locking failed for 
gov.doi.tat.dataobjects.CountyDetailImpl{06055}, nested exception is: 
[org.odmg.TransactionNotInProgressException: Transaction was not open, 
call tx.begin() before perform action, current status is: 
STATUS_NO_TRANSACTION]
                 at 
org.apache.ojb.odmg.TransactionImpl.afterMaterialization(TransactionImpl.java:1050)
                 at 
org.apache.ojb.broker.core.proxy.IndirectionHandlerDefaultImpl.afterMaterialization(IndirectionHandlerDefaultImpl.java:176)
                 at 
org.apache.ojb.broker.core.proxy.IndirectionHandlerDefaultImpl.getRealSubject(IndirectionHandlerDefaultImpl.java:349)
                 at 
org.apache.ojb.broker.core.proxy.IndirectionHandlerDefaultImpl.invoke(IndirectionHandlerDefaultImpl.java:324)
                 ... 101 more



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

Reply via email to