You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ed...@apache.org on 2005/07/04 00:00:15 UTC
svn commit: r208988 [3/3] - in
/incubator/jackrabbit/trunk/contrib/jcr-commands: ./ applications/
applications/test/ benchmarking/ jmeter-chain/ jmeter-chain/src/
jmeter-chain/src/java/ jmeter-chain/src/java/org/
jmeter-chain/src/java/org/apache/ jmete...
Added: incubator/jackrabbit/trunk/contrib/jcr-commands/src/java/org/apache/jackrabbit/chain/command/StartOrGetJackrabbitSingleton.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-commands/src/java/org/apache/jackrabbit/chain/command/StartOrGetJackrabbitSingleton.java?rev=208988&view=auto
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-commands/src/java/org/apache/jackrabbit/chain/command/StartOrGetJackrabbitSingleton.java (added)
+++ incubator/jackrabbit/trunk/contrib/jcr-commands/src/java/org/apache/jackrabbit/chain/command/StartOrGetJackrabbitSingleton.java Sun Jul 3 15:00:10 2005
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation or its licensors,
+ * as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.chain.command;
+
+import javax.jcr.Repository;
+
+import org.apache.commons.chain.Command;
+import org.apache.commons.chain.Context;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jackrabbit.chain.ContextHelper;
+import org.apache.jackrabbit.chain.RepositoryPool;
+import org.apache.jackrabbit.core.RepositoryImpl;
+import org.apache.jackrabbit.core.config.RepositoryConfig;
+
+/**
+ * <p>
+ * Gets a Jackrabbit instance from the RepositoryPool and put in the Commons
+ * Chain Context. If there's no Repository for the given config then it will
+ * create a new instance and will add it to the pool.
+ * </p>
+ * <p>
+ * This is the recommended implementation to use in JMeter. It will create only
+ * one Jackrabbit instance on the first call and will reuse it in all the JMeter
+ * app lifecycle.
+ * </p>
+ */
+public class StartOrGetJackrabbitSingleton implements Command
+{
+ /** logger */
+ private static Log log = LogFactory.getLog(StartOrGetJackrabbitSingleton.class);
+
+ /** config file */
+ private String config;
+
+ /** home folder */
+ private String home;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.commons.chain.Command#execute(org.apache.commons.chain.Context)
+ */
+ public boolean execute(Context ctx) throws Exception
+ {
+ try
+ {
+ RepositoryPool pool = RepositoryPool.getInstance();
+ synchronized (pool)
+ {
+ Repository repo = pool.get(config, home);
+ if (repo == null)
+ {
+ String msg = "Starting Jakrabbit instance";
+ System.out.println(msg);
+ log.info(msg);
+ RepositoryConfig conf = RepositoryConfig.create(config, home);
+ repo = RepositoryImpl.create(conf);
+ pool.put(config, home, repo);
+ }
+ ContextHelper.setRepository(ctx, repo);
+ }
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ throw e;
+ }
+ return false;
+ }
+
+ /**
+ * @return Returns the config.
+ */
+ public String getConfig()
+ {
+ return config;
+ }
+
+ /**
+ * @param config
+ * The config to set.
+ */
+ public void setConfig(String config)
+ {
+ this.config = config;
+ }
+
+ /**
+ * @return Returns the home.
+ */
+ public String getHome()
+ {
+ return home;
+ }
+
+ /**
+ * @param home
+ * The home to set.
+ */
+ public void setHome(String home)
+ {
+ this.home = home;
+ }
+
+}
Propchange: incubator/jackrabbit/trunk/contrib/jcr-commands/src/java/org/apache/jackrabbit/chain/command/StartOrGetJackrabbitSingleton.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/jackrabbit/trunk/contrib/jcr-commands/src/java/org/apache/jackrabbit/chain/command/StopJackrabbit.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-commands/src/java/org/apache/jackrabbit/chain/command/StopJackrabbit.java?rev=208988&view=auto
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-commands/src/java/org/apache/jackrabbit/chain/command/StopJackrabbit.java (added)
+++ incubator/jackrabbit/trunk/contrib/jcr-commands/src/java/org/apache/jackrabbit/chain/command/StopJackrabbit.java Sun Jul 3 15:00:10 2005
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation or its licensors,
+ * as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.chain.command;
+
+import org.apache.commons.chain.Command;
+import org.apache.commons.chain.Context;
+import org.apache.jackrabbit.chain.ContextHelper;
+import org.apache.jackrabbit.core.RepositoryImpl;
+
+/**
+ * Stops Jackrabbit
+ */
+public class StopJackrabbit implements Command {
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.chain.Command#execute(org.apache.commons.chain.Context)
+ */
+ public boolean execute(Context ctx) throws Exception {
+ RepositoryImpl repo = (RepositoryImpl) ContextHelper.getRepository(ctx) ;
+ repo.shutdown() ;
+ return false;
+ }
+}
Propchange: incubator/jackrabbit/trunk/contrib/jcr-commands/src/java/org/apache/jackrabbit/chain/command/StopJackrabbit.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/jackrabbit/trunk/contrib/jcr-commands/src/test/org/apache/jackrabbit/chain/test/JcrChainTest.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-commands/src/test/org/apache/jackrabbit/chain/test/JcrChainTest.java?rev=208988&view=auto
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-commands/src/test/org/apache/jackrabbit/chain/test/JcrChainTest.java (added)
+++ incubator/jackrabbit/trunk/contrib/jcr-commands/src/test/org/apache/jackrabbit/chain/test/JcrChainTest.java Sun Jul 3 15:00:10 2005
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation or its licensors,
+ * as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.chain.test;
+
+import javax.jcr.Repository;
+
+import org.apache.commons.chain.Context;
+import org.apache.commons.chain.impl.ContextBase;
+import org.apache.jackrabbit.chain.ContextHelper;
+import org.apache.jackrabbit.chain.command.AddNode;
+import org.apache.jackrabbit.chain.command.CurrentNode;
+import org.apache.jackrabbit.chain.command.Login;
+import org.apache.jackrabbit.chain.command.Logout;
+import org.apache.jackrabbit.chain.command.RemoveNode;
+import org.apache.jackrabbit.chain.command.Save;
+import org.apache.jackrabbit.chain.command.StopJackrabbit;
+import org.apache.jackrabbit.chain.command.StartOrGetJackrabbitSingleton;
+
+import junit.framework.TestCase;
+
+/**
+ * Chain testing
+ */
+public class JcrChainTest extends TestCase
+{
+ private static String CONFIG = "applications/test/repository.xml";
+
+ private static String HOME = "applications/test";
+
+ public void testChain() throws Exception
+ {
+ Context ctx = new ContextBase();
+
+ // Start
+ StartOrGetJackrabbitSingleton startCmd = new StartOrGetJackrabbitSingleton();
+ startCmd.setConfig(CONFIG);
+ startCmd.setHome(HOME);
+ startCmd.execute(ctx);
+ assertTrue(ContextHelper.getRepository(ctx) instanceof Repository);
+
+ // Login
+ Login loginCmd = new Login();
+ loginCmd.setUser("user");
+ loginCmd.setPassword("password");
+ loginCmd.execute(ctx);
+ assertTrue(ContextHelper.getSession(ctx) != null);
+ assertTrue(ContextHelper.getCurrentNode(ctx).getPath().equals("/"));
+
+ String testNodeStr = "test";
+
+ // Add node
+ AddNode addNodeCmd = new AddNode();
+ addNodeCmd.setName(testNodeStr);
+ addNodeCmd.execute(ctx);
+ assertTrue(ContextHelper.getCurrentNode(ctx).hasNode(testNodeStr));
+
+ // Current node
+ CurrentNode cnCmd = new CurrentNode();
+ cnCmd.setPath("/" + testNodeStr);
+ cnCmd.execute(ctx);
+ assertTrue(ContextHelper.getCurrentNode(ctx).getPath().equals(
+ "/" + testNodeStr));
+
+ // Save changes
+ Save saveCmd = new Save() ;
+ saveCmd.execute(ctx);
+
+ // Logout
+ Logout logoutCmd = new Logout() ;
+ logoutCmd.execute(ctx);
+
+ // See persisted changes
+ loginCmd = new Login();
+ loginCmd.setUser("user2");
+ loginCmd.setPassword("password");
+ loginCmd.execute(ctx);
+ assertTrue(ContextHelper.getCurrentNode(ctx).hasNode(testNodeStr));
+
+ // Change current node
+ cnCmd.execute(ctx);
+
+ // Remove node
+ RemoveNode removeNodeCmd = new RemoveNode();
+ removeNodeCmd.execute(ctx);
+ assertFalse(ContextHelper.getCurrentNode(ctx).hasNode(testNodeStr));
+
+ logoutCmd = new Logout() ;
+ logoutCmd.execute(ctx);
+
+ // Stop
+ StopJackrabbit stopCmd = new StopJackrabbit();
+ stopCmd.execute(ctx);
+ }
+
+}
Propchange: incubator/jackrabbit/trunk/contrib/jcr-commands/src/test/org/apache/jackrabbit/chain/test/JcrChainTest.java
------------------------------------------------------------------------------
svn:eol-style = native