Hi Alex,

Please find the code for verifyAndAdd();

 public Node verifyAndAddNode(Session session,Node parent,String... parameters) 
throws RepositoryException
    {   Node node2Add = null;
        //code review comment - to ensure parameters size is either 2 or 3.
        if(parameters.length < 2 || parameters.length > 3)
        {   throw new IllegalArgumentException("Number of parameters to 
verify/add node invalid ");
        }
        NodeIterator iterator = queryForPath(session,parameters[0]);
        if(iterator.hasNext())
        {   log.info("Node exists in this path...");
            node2Add = iterator.nextNode();
        }else
        {   if(parameters.length == 2)
                node2Add = parent.addNode(parameters[1]);
            else
               node2Add = parent.addNode(parameters[1],parameters[2]);
        }
        return node2Add;
    }

    protected NodeIterator queryForPath(Session session, String path) throws 
RepositoryException
    {   log.info("Querying for path : "+path);
        Workspace workspace = session.getWorkspace();
        QueryManager queryManager = workspace.getQueryManager();
        Query query = queryManager.createQuery(path, Query.XPATH);
        QueryResult result = query.execute();
        return result.getNodes();
    }


Regards,
Sunil
________________________________________
From: Alexander Klimetschek [[email protected]]
Sent: Monday, November 23, 2009 4:50 PM
To: [email protected]
Subject: Re: Unable to lock Exception.

On Mon, Nov 23, 2009 at 07:30, Sunil Dhage <[email protected]> wrote:
> xyz.cnd contains these node type definitions.
>
> [lc:account] > nt:folder, mix:lockable
> -lc:accountid (string) mandatory primary
>
>  /**
>     * Registers custom node types for the application
>     */
>    protected void registerCustomNodeTypes(Workspace workspace) throws 
> RepositoryException
>    {   try
>        {   ClassLoader loader = 
> Thread.currentThread().getContextClassLoader();
>            InputStream in = loader.getResourceAsStream("xyz.cnd");
>            NodeTypeManagerImpl nodeTypeManager = (NodeTypeManagerImpl) 
> workspace.getNodeTypeManager();
>            // Registors the custom node types and namespaces
>            nodeTypeManager.registerNodeTypes(in, 
> JackrabbitNodeTypeManager.TEXT_X_JCR_CND, true);
>        }catch (NamespaceException nse)
>        {   log.error("[contentCallback] Namespace registration issue : " + 
> nse.getMessage());
>        }catch (RepositoryException repse)
>        {   log.error("[contentCallback] Repository registeration issue : " + 
> repse.getMessage());
>        } catch (IOException ex)
>        {  log.error("[contentCallback] Error reading custom node definitions. 
> Check dms-lc.cnd is in classpath: " + ex.getMessage());
>        }
>    }

Looks good to me, if you didn't get any errors here. Maybe you changed
the nodetype (adding mix:lockable) and restarted your repository and
the above code failed with an cannot update nodetypes exception (or
similar)?

>           Node account = 
> verifyAndAddNode(session,candidatedocs,path,"lc:account");

What about this method? We can only help when seeing what exact JCR
API calls you are doing. (I can imagine what that method does, but
maybe there is a slight error there).

Regards,
Alex

--
Alexander Klimetschek
[email protected]

Reply via email to