Hi, I am getting a strange exception while I am switching between workspaces.

I am processing a list of xml files and import them in a repository. My
repository is deployed as model3 (server) on tomcat 5.5.x, and I am using
the derbypersistence manager.
When I proces the xmlfiles, I first check whether the file already exists in
the repository, if so I am importing this file in a different workspace.

After the files have been imported I am calling a method which gets all
existing nodes. The problem appears when I have a Arraylist of files which
contains both existing as new files. So when I am saving nodes in two
different workspaces. When I call the method which gets all nodes everything
goes fine (gets it from the cache), only when I restart tomcat (repository
shutdown and startup) and call the get method afterwards I am getting an
ItemNotFoundException. This only happens with the derbypersistencemanager,
when I switch to the Filesystempersistencemanager no errors occur.
It seems like the derbypersistencemanager mixes the references to nodes
between workspaces. The cache stores them in the right way, so I am only
getting the exception after a repository (tomcat) restart.

This is my code:

 public List importBundle(List files) throws PersistencyException { 
                Session sessionW1 = null; 
                Session sessionW2 = null; 
                List lockTokens = new ArrayList(); 
                try { 
                        sessionW1 = getRepositorySession(WORKSPACE_1); 
                        sessionW2 = getRepositorySession(WORKSPACE_2); 
                        Iterator it = files.iterator(); 
                        while (it.hasNext()) { 
                                ImportFile file = (ImportFile) it.next(); 
                                importFileAsXMLDocument(file); 
                        }                         
                        sessionW1.save(); 
                        sessionW2.save(); 
                        return lockTokens; 
                } catch (Exception e) { 
                        e.printStackTrace(); 
                } finally { 
                        if (sessionW1 != null) { 
                                sessionW1.logout(); 
                        } 
                        if (sessionW2 != null) { 
                                sessionW2.logout(); 
                        } 
                } 
        } 
        
        public String importFileAsXMLDocument(UPloadFile file, Session
sessionW1, Session sessionW2) throws PersistencyException { 
                boolean recordExists = false; 
                Lock lock = null; 
                String lockToken = null; 
                try { 
                        QueryResult result =
sessionW1.getWorkspace().getQueryManager().createQuery("somequerytofindexistingfile",
Query.XPATH).execute(); 
                        NodeIterator nodes = result.getNodes(); 
                        if (nodes.getSize() > 0) { 
                                recordExists = true; 
                                Node node = nodes.nextNode(); 
                                lock = node.lock(true, false); 

                        }                         
                        if (recordExists) { 
                                sessionW1.importXML("/",
file.getInputStream(), ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW); 
                        } else { 
                                sessionW2.importXML("/",
file.getInputSTream(), ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW); 
                        } 
                        if (lock != null) { 
                                lockToken = lock.getLockToken(); 
                        } 
                        return lockToken; 
                } catch (Exception e) { 
                        e.printStackTrace(); 
                }   
        }

The get method:

                public List getRecords() {
                        List records = new ArrayList();
                        session = getRepositorySession(WORKSPACE_MAIN); 
                        String executableQuery = "/*"; 
                        
                        Query repositoryQuery =
session.getWorkspace().getQueryManager() 
                                        .createQuery(executableQuery,
Query.XPATH); 
                        QueryResult result = repositoryQuery.execute(); 
                        NodeIterator it = result.getNodes(); 
                        while (it.hasNext()) { 
                                Node node = it.nextNode(); 
                                records.add(node); 
                        } 
                        return records; 
                }

The exception is thrown at it.hasnext(). During debugging I see the
nodeiterator contains all nodes I would expect only hasnext throws this
exception:

23.08.2006 17:44:08 *ERROR* DocOrderNodeIteratorImpl: Exception while
sorting nodes in document order: javax.jcr.ItemNotFoundException: failed to
build path of 06758d0b-1797-462b-8793-78ece4adfe06:
cafebabe-cafe-babe-cafe-babecafebabe has no child entry for
06758d0b-1797-462b-8793-78ece4adfe06 (DocOrderNodeIteratorImpl.java, line
244) 
javax.jcr.ItemNotFoundException: failed to build path of
06758d0b-1797-462b-8793-78ece4adfe06: cafebabe-cafe-babe-cafe-babecafebabe
has no child entry for 06758d0b-1797-462b-8793-78ece4adfe06 
        at
org.apache.jackrabbit.core.HierarchyManagerImpl.buildPath(HierarchyManagerImpl.java:307)
 
        at
org.apache.jackrabbit.core.CachingHierarchyManager.buildPath(CachingHierarchyManager.java:158)
 
        at
org.apache.jackrabbit.core.HierarchyManagerImpl.buildPath(HierarchyManagerImpl.java:296)
 
        at
org.apache.jackrabbit.core.CachingHierarchyManager.buildPath(CachingHierarchyManager.java:158)
 
        at
org.apache.jackrabbit.core.HierarchyManagerImpl.getPath(HierarchyManagerImpl.java:356)
 
        at
org.apache.jackrabbit.core.CachingHierarchyManager.getPath(CachingHierarchyManager.java:220)
 
        at
org.apache.jackrabbit.core.ItemImpl.getPrimaryPath(ItemImpl.java:305) 
        at
org.apache.jackrabbit.core.query.lucene.DocOrderNodeIteratorImpl$1.compare(DocOrderNodeIteratorImpl.java:202)
 
        at java.util.Arrays.mergeSort(Arrays.java:1284) 
        at java.util.Arrays.sort(Arrays.java:1223) 
        at
org.apache.jackrabbit.core.query.lucene.DocOrderNodeIteratorImpl.initOrderedIterator(DocOrderNodeIteratorImpl.java:179)
 
        at
org.apache.jackrabbit.core.query.lucene.DocOrderNodeIteratorImpl.hasNext(DocOrderNodeIteratorImpl.java:135)
 
        at
com.assembleon.plm.repository.access.impl.RepositoryDAOImpl.getAllRecordsWithType(RepositoryDAOImpl.java:733)
 
        at
com.assembleon.plm.services.impl.RepositoryServiceImpl.getRecordsWithType(RepositoryServiceImpl.java:170)
 
        at
com.assembleon.plm.mbeans.DownloadRecordMBean.getRecords(DownloadRecordMBean.java:113)
 
        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
org.apache.myfaces.el.PropertyResolverImpl.getProperty(PropertyResolverImpl.java:438)
 
        at
org.apache.myfaces.el.PropertyResolverImpl.getValue(PropertyResolverImpl.java:82)
 
        at com.sun.faces.el.impl.ArraySuffix.evaluate(ArraySuffix.java:167) 
        at
com.sun.faces.el.impl.ComplexValue.evaluate(ComplexValue.java:151) 
        at
com.sun.faces.el.impl.UnaryOperatorExpression.evaluate(UnaryOperatorExpression.java:167)
 
        at
com.sun.faces.el.impl.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:243)
 
        at
com.sun.faces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:173) 
        at
com.sun.faces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:154) 
        at
javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:1076) 
        at
org.apache.myfaces.component.html.ext.HtmlOutputText.isRendered(HtmlOutputText.java:85)
 
        at
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:532) 
        at
javax.faces.webapp.UIComponentTag.encodeEnd(UIComponentTag.java:495) 
        at
javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:363) 
        at
org.apache.jsp.jsp.downloadRecord_jsp._jspx_meth_t_outputText_4(downloadRecord_jsp.java:1138)
 
        at
org.apache.jsp.jsp.downloadRecord_jsp._jspx_meth_h_form_0(downloadRecord_jsp.java:245)
 
        at
org.apache.jsp.jsp.downloadRecord_jsp._jspx_meth_f_view_0(downloadRecord_jsp.java:150)
 
        at
org.apache.jsp.jsp.downloadRecord_jsp._jspService(downloadRecord_jsp.java:111) 
        at
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) 
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
        at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332) 
        at
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314) 
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264) 
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
 
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
 
        at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
 
        at
org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
 
        at
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
 
        at
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
 
        at
com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)
 
        at
com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130) 
        at
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
 
        at
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200) 
        at
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117) 
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:138) 
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
 
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
 
        at
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)
 
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
 
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
 
        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
 
        at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
 
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) 
        at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) 
        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
 
        at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) 
        at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) 
        at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
 
        at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
 
        at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
 
        at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
 
        at java.lang.Thread.run(Thread.java:595)
-- 
View this message in context: 
http://www.nabble.com/ItemNotFoundException-while-switching-between-workspaces-tf2154626.html#a5951905
Sent from the Jackrabbit - Dev forum at Nabble.com.

Reply via email to