jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From J Kuijpers <japq...@hotmail.com>
Subject Re: problem retrieving nodes from different workspaces
Date Mon, 28 Aug 2006 12:58:47 GMT

Ok hmm strange... This toppic involves the same problem as the toppic of my
collegue quipere (ItemNotFoundException while switching between different
workspaces). The reason why I am not getting an ItemNotFoundException but
only the wrong nodes, I think is because the code I am using is not using a
NodeType which is orderable. The orginal code does use such a nodetype. When
creating the test class I couldn't use our custom nodetypes. That's the main
difference.    

Will supply the class inline:

package nl.src;

import java.util.Hashtable;

import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.Repository;
import javax.jcr.Session;
import javax.jcr.SimpleCredentials;
import javax.jcr.query.Query;
import javax.jcr.query.QueryResult;
import javax.naming.Context;
import javax.naming.InitialContext;

import org.apache.jackrabbit.core.RepositoryImpl;
import org.apache.jackrabbit.core.WorkspaceImpl;
import org.apache.jackrabbit.core.jndi.RegistryHelper;

/**
 * @author jukuijpe
 *
 */
public class MultipleWorkspaceTest {
	
	private static Repository repos = null;

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		runTest(true);		
	}
	
	public static void runTest(boolean repositoryShutdown) {
		Session session = null;
		Session session1 = null;
		Session session2 = null;
		
		try {
			Repository repos = getRepository();
			session = repos.login(new SimpleCredentials("user",
"password".toCharArray()));
			((WorkspaceImpl)
session.getWorkspace()).createWorkspace("testWorkspace1");
			((WorkspaceImpl)
session.getWorkspace()).createWorkspace("testWorkspace2");
			session.logout();
			
			session1 = repos.login(new SimpleCredentials("user",
"password".toCharArray()), "testWorkspace1");
			session2 = repos.login(new SimpleCredentials("user",
"password".toCharArray()), "testWorkspace2");
			
			Node startNodeW1 = null;
			Node startNodeW2 = null;			
			
			if (session1.getRootNode().hasNode("testNodes")) {
				startNodeW1 = session1.getRootNode().getNode("testNodes");				
			} else {
				startNodeW1 = session1.getRootNode().addNode("testNodes");
			}
			if (session2.getRootNode().hasNode("testNodes")) {
				startNodeW2 = session2.getRootNode().getNode("testNodes");
			} else {
				startNodeW2 = session2.getRootNode().addNode("testNodes");
			}
			
			startNodeW1.addNode("workspace1Node1");
			startNodeW2.addNode("workspace2Node1");
			startNodeW1.addNode("workspace1Node2");
			startNodeW2.addNode("workspace2Node2");
			startNodeW1.addNode("workspace1Node3");
			startNodeW2.addNode("workspace2Node3");
			
			session1.save();
			session2.save();
			
			RepositoryImpl jackRabbitRepos = ((RepositoryImpl)
session2.getRepository());
			
			session1.logout();
			session2.logout();
			
			if (repositoryShutdown) {
				jackRabbitRepos.shutdown();
				MultipleWorkspaceTest.repos = null;
			}			
			listNodes();						
		} catch(Exception e) {
			e.printStackTrace();
		}finally {
			if (session != null) {
				session.logout();
			}
			if (session1 != null) {
				session1.logout();
			}
			if (session2 != null) {
				session2.logout();
			}
		}
	}

	
    /**
     * Creates a Repository instance to be used by the example class.
     *
     * @return repository instance
     * @throws Exception on errors
     */
    private static Repository getRepository() throws Exception {
    	if (repos == null) {
	        String configFile = "c:/repotest/repository.xml";
	        String repHomeDir = "c:/repotest";
	
	        Hashtable env = new Hashtable();
	        env.put(Context.INITIAL_CONTEXT_FACTORY,
	               
"org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory");
	        env.put(Context.PROVIDER_URL, "localhost");
	        InitialContext ctx = new InitialContext(env);
	
	        RegistryHelper.registerRepository(ctx, "repo", configFile,
repHomeDir, true);
	        repos = (Repository) ctx.lookup("repo");
    	}
    	return repos;
    }
    
    private static void listNodes() {
		Session session = null;
		try{
		Repository reposNew = getRepository();
		session = reposNew.login(new SimpleCredentials("user",
"password".toCharArray()), "testWorkspace1");
		Query repositoryQuery =
session.getWorkspace().getQueryManager().createQuery("testNodes/*",
Query.XPATH);
		QueryResult result = repositoryQuery.execute();
		NodeIterator it = result.getNodes();
		while (it.hasNext()) {
			Node node = it.nextNode();
			System.out.println(node.getName());
		}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (session != null) {
				session.logout();
			}
		}
    }
}
 



Jukka Zitting-3 wrote:
> 
> Hi,
> 
> On 8/28/06, J Kuijpers <japquip@hotmail.com> wrote:
>> Supplied repository.xml and runnable MultipleWorkspaceTest.java
>> http://www.nabble.com/user-files/235783/repository.xml repository.xml
>> http://www.nabble.com/user-files/235784/MultipleWorkspaceTest.java
>> MultipleWorkspaceTest.java
> 
> The MultipleWorkspaceTest.java file appears to be empty. Could you
> resend it, inline if necessary?
> 
> BR,
> 
> Jukka Zitting
> 
> -- 
> Yukatan - http://yukatan.fi/ - info@yukatan.fi
> Software craftsmanship, JCR consulting, and Java development
> 
> 

-- 
View this message in context: http://www.nabble.com/problem-retrieving-nodes-from-different-workspaces-tf2177041.html#a6019752
Sent from the Jackrabbit - Dev forum at Nabble.com.


Mime
View raw message