exo-jcr SVN: r758 - jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache.
by do-not-reply@jboss.org
Author: areshetnyak
Date: 2009-11-18 11:29:24 -0500 (Wed, 18 Nov 2009)
New Revision: 758
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java
Log:
EXOJCR-248 : The AbstractCacheLoader was changed.
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java 2009-11-18 16:28:53 UTC (rev 757)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java 2009-11-18 16:29:24 UTC (rev 758)
@@ -114,7 +114,7 @@
break;
case PUT_KEY_VALUE :
- if (isUpdate(m, conn))
+ if (isUpdate(m, (JDBCStorageConnection) conn))
doUpdate(m, conn);
else
doAdd(m, conn);
16 years, 8 months
exo-jcr SVN: r757 - in jcr/branches/1.12.0-JBC/component/core/src: test/java/org/exoplatform/services/jcr/impl/storage/jbosscache and 1 other directory.
by do-not-reply@jboss.org
Author: areshetnyak
Date: 2009-11-18 11:28:53 -0500 (Wed, 18 Nov 2009)
New Revision: 757
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java
jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/AbstractCacheLoaderTest.java
Log:
EXOJCR-248 : The AbstractCacheLoader was changed.
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java 2009-11-18 16:27:30 UTC (rev 756)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java 2009-11-18 16:28:53 UTC (rev 757)
@@ -114,7 +114,7 @@
break;
case PUT_KEY_VALUE :
- if (m.getOldValue() != null)
+ if (isUpdate(m, conn))
doUpdate(m, conn);
else
doAdd(m, conn);
@@ -141,6 +141,19 @@
}
/**
+ * Check update item or add item.
+ *
+ * @param m
+ * @param conn
+ * @return boolean
+ * return true if update
+ */
+ private boolean isUpdate(Modification m, JDBCStorageConnection conn) throws RepositoryException
+ {
+ return (conn.getItemName((String)m.getFqn().get(1)) == null ? false : true);
+ }
+
+ /**
* {@inheritDoc}
*/
public void put(List<Modification> modifications) throws Exception
Modified: jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/AbstractCacheLoaderTest.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/AbstractCacheLoaderTest.java 2009-11-18 16:27:30 UTC (rev 756)
+++ jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/AbstractCacheLoaderTest.java 2009-11-18 16:28:53 UTC (rev 757)
@@ -158,7 +158,6 @@
String fqn = "/" + JBossCacheStorage.PROPS + "/" + data.getIdentifier();
Modification modification =
new Modification(ModificationType.PUT_KEY_VALUE, Fqn.fromString(fqn), JBossCacheStorage.ITEM_DATA, data);
- modification.setOldValue(data);
list.add(modification);
return list;
}
@@ -186,7 +185,6 @@
fqn = Fqn.fromElements(JBossCacheStorage.NODES, data.getIdentifier());
modification = new Modification(ModificationType.PUT_KEY_VALUE, fqn, JBossCacheStorage.ITEM_DATA, data);
- modification.setOldValue(data);
list.add(modification);
return list;
16 years, 8 months
exo-jcr SVN: r756 - in jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc: db and 1 other directory.
by do-not-reply@jboss.org
Author: pnedonosko
Date: 2009-11-18 11:27:30 -0500 (Wed, 18 Nov 2009)
New Revision: 756
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBMultiDbJDBCConnection.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBSingleDbJDBCConnection.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java
Log:
EXOJCR-248: get childs optimization (index fix)
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java 2009-11-18 16:17:22 UTC (rev 755)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java 2009-11-18 16:27:30 UTC (rev 756)
@@ -2107,10 +2107,12 @@
Set<String> childrens = new LinkedHashSet<String>();
while (node.next())
{
- String childName = node.getString(COLUMN_NAME);
- if (!childrens.add(childName))
+ String nodeName = node.getString(COLUMN_NAME);
+ int nodeIndex = node.getInt(COLUMN_INDEX);
+ QPathEntry name = new QPathEntry(InternalQName.parse(nodeName), nodeIndex);
+ if (!childrens.add(name.getAsString(true)))
{
- throw new RepositoryException("FATAL Child node name dublicated '" + childName + "' on parent "
+ throw new RepositoryException("FATAL Child node name dublicated '" + nodeName + "' on parent "
+ parentId);
}
}
@@ -2121,6 +2123,10 @@
{
throw new RepositoryException(e);
}
+ catch (IllegalNameException e)
+ {
+ throw new RepositoryException(e);
+ }
}
/**
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBMultiDbJDBCConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBMultiDbJDBCConnection.java 2009-11-18 16:17:22 UTC (rev 755)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBMultiDbJDBCConnection.java 2009-11-18 16:27:30 UTC (rev 756)
@@ -74,9 +74,10 @@
"select V.DATA" + " from JCR_MITEM I, JCR_MVALUE V"
+ " where I.PARENT_ID=? and I.I_CLASS=2 and I.NAME=? and I.ID=V.PROPERTY_ID order by V.ORDER_NUM";
FIND_NODES_BY_PARENTID = "select * from JCR_MITEM" + " where PARENT_ID=? and I_CLASS=1" + " order by N_ORDER_NUM";
-
- FIND_NODES_NAME_BY_PARENTID = "select NAME from JCR_MITEM" + " where PARENT_ID=? and I_CLASS=1" + " order by N_ORDER_NUM";
-
+
+ FIND_NODES_NAME_BY_PARENTID =
+ "select NAME, I_INDEX from JCR_MITEM" + " where PARENT_ID=? and I_CLASS=1" + " order by N_ORDER_NUM";
+
FIND_PROPERTIES_BY_PARENTID = "select * from JCR_MITEM" + " where PARENT_ID=? and I_CLASS=2" + " order by ID";
}
}
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBSingleDbJDBCConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBSingleDbJDBCConnection.java 2009-11-18 16:17:22 UTC (rev 755)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBSingleDbJDBCConnection.java 2009-11-18 16:27:30 UTC (rev 756)
@@ -83,7 +83,7 @@
"select * from JCR_SITEM" + " where PARENT_ID=? and I_CLASS=1 and CONTAINER_NAME=?" + " order by N_ORDER_NUM";
FIND_NODES_NAME_BY_PARENTID =
- "select NAME from JCR_SITEM" + " where PARENT_ID=? and I_CLASS=1 and CONTAINER_NAME=?" + " order by N_ORDER_NUM";
+ "select NAME, I_INDEX from JCR_SITEM" + " where PARENT_ID=? and I_CLASS=1 and CONTAINER_NAME=?" + " order by N_ORDER_NUM";
FIND_PROPERTIES_BY_PARENTID =
"select * from JCR_SITEM" + " where PARENT_ID=? and I_CLASS=2 and CONTAINER_NAME=?" + " order by ID";
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java 2009-11-18 16:17:22 UTC (rev 755)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java 2009-11-18 16:27:30 UTC (rev 756)
@@ -201,7 +201,7 @@
FIND_ALL_NODES = "select ID from JCR_MITEM where I_CLASS=1";
FIND_NODES_NAME_BY_PARENTID =
- "select NAME from JCR_MITEM" + " where I_CLASS=1 and PARENT_ID=?" + " order by N_ORDER_NUM";
+ "select NAME, I_INDEX from JCR_MITEM" + " where I_CLASS=1 and PARENT_ID=?" + " order by N_ORDER_NUM";
FIND_PROPERTIES_BY_PARENTID = "select * from JCR_MITEM" + " where I_CLASS=2 and PARENT_ID=?" + " order by ID";
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java 2009-11-18 16:17:22 UTC (rev 755)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java 2009-11-18 16:27:30 UTC (rev 756)
@@ -206,7 +206,7 @@
"select * from JCR_SITEM" + " where I_CLASS=1 and CONTAINER_NAME=? and PARENT_ID=?" + " order by N_ORDER_NUM";
FIND_NODES_NAME_BY_PARENTID =
- "select NAME from JCR_SITEM" + " where I_CLASS=1 and CONTAINER_NAME=? and PARENT_ID=?"
+ "select NAME, I_INDEX from JCR_SITEM" + " where I_CLASS=1 and CONTAINER_NAME=? and PARENT_ID=?"
+ " order by N_ORDER_NUM";
FIND_ALL_NODES = "select ID from JCR_SITEM where I_CLASS=1 and CONTAINER_NAME=?";
16 years, 8 months
exo-jcr SVN: r755 - in jcr/branches/1.12.0-JBC/component/core/src: test/java/org/exoplatform/services/jcr/impl/core/lock and 1 other directory.
by do-not-reply@jboss.org
Author: nzamosenchuk
Date: 2009-11-18 11:17:22 -0500 (Wed, 18 Nov 2009)
New Revision: 755
Added:
jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/core/lock/TestSessionLockManager.java
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/LockData.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/LockImpl.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/SessionLockManager.java
Log:
EXOJCR-243: Updated LockManager, LockImpl: added refresh functionality. Added tests.
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/LockData.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/LockData.java 2009-11-18 16:16:19 UTC (rev 754)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/LockData.java 2009-11-18 16:17:22 UTC (rev 755)
@@ -197,11 +197,11 @@
buf = new byte[in.readInt()];
in.readFully(buf);
this.nodeIdentifier = new String(buf, Constants.DEFAULT_ENCODING);
- // read uuid
+ // read owner
buf = new byte[in.readInt()];
in.readFully(buf);
this.owner = new String(buf, Constants.DEFAULT_ENCODING);
- // read uuid
+ // read token
buf = new byte[in.readInt()];
in.readFully(buf);
this.tokenHash = new String(buf, Constants.DEFAULT_ENCODING);
@@ -223,11 +223,11 @@
byte[] ptbuf = nodeIdentifier.getBytes(Constants.DEFAULT_ENCODING);
out.writeInt(ptbuf.length);
out.write(ptbuf);
- // node uuid
+ // node owner
ptbuf = owner.getBytes(Constants.DEFAULT_ENCODING);
out.writeInt(ptbuf.length);
out.write(ptbuf);
- // node uuid
+ // node token
ptbuf = tokenHash.getBytes(Constants.DEFAULT_ENCODING);
out.writeInt(ptbuf.length);
out.write(ptbuf);
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/LockImpl.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/LockImpl.java 2009-11-18 16:16:19 UTC (rev 754)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/LockImpl.java 2009-11-18 16:17:22 UTC (rev 755)
@@ -19,8 +19,13 @@
package org.exoplatform.services.jcr.impl.core.lock;
import org.exoplatform.services.jcr.core.lock.ExtendedLock;
+import org.exoplatform.services.jcr.dataflow.ItemState;
+import org.exoplatform.services.jcr.dataflow.LockPlainChangesLogImpl;
import org.exoplatform.services.jcr.impl.core.SessionDataManager;
+import org.exoplatform.services.jcr.observation.ExtendedEvent;
+import java.util.ArrayList;
+
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.lock.LockException;
@@ -43,16 +48,19 @@
// Token is not stored in lockData any more
private String token;
+ private String sessionId;
+
/**
* @param session
* @param lockData
*/
- public LockImpl(SessionDataManager sessionDataManager, LockData lockData, String token)
+ public LockImpl(SessionDataManager sessionDataManager, LockData lockData, String token, String sessionId)
{
this.lockData = lockData;
this.sessionDataManager = sessionDataManager;
this.token = token;
this.live = true;
+ this.sessionId = sessionId;
}
/**
@@ -111,7 +119,16 @@
{
if (!isLive())
throw new LockException("Lock is not live");
- // TODO: recreate lockData
+
+ // add new lock data. Storage connection will recognize it as a update, because lock token is the same
+ LockPlainChangesLogImpl addChangesLog =
+ new LockPlainChangesLogImpl(new ArrayList<ItemState>(), sessionId, ExtendedEvent.LOCK);
+ LockData newLockData =
+ new LockData(lockData.getNodeIdentifier(), lockData.getTokenHash(), lockData.isDeep(), lockData
+ .isSessionScoped(), lockData.getOwner(), lockData.getTimeOut());
+ addChangesLog.setLockData(newLockData);
+ sessionDataManager.getWorkspaceDataManager().save(addChangesLog);
+ this.lockData = newLockData;
}
/**
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/SessionLockManager.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/SessionLockManager.java 2009-11-18 16:16:19 UTC (rev 754)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/SessionLockManager.java 2009-11-18 16:17:22 UTC (rev 755)
@@ -161,7 +161,7 @@
throw new LockException("Node not locked: " + node.getQPath());
}
// if session doesn't have token, null will be returned
- return new LockImpl(sessionDataManager, lockData, tokenHash.get(lockData.getTokenHash()));
+ return new LockImpl(sessionDataManager, lockData, tokenHash.get(lockData.getTokenHash()), sessionID);
}
/**
@@ -261,7 +261,7 @@
new TransientValueData(isDeep));
changesLog.add(ItemState.createAddedState(propData));
- LockImpl newLock = new LockImpl(sessionDataManager, lockData, token);
+ LockImpl newLock = new LockImpl(sessionDataManager, lockData, token, sessionID);
sessionDataManager.getTransactManager().save(changesLog);
return newLock;
Added: jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/core/lock/TestSessionLockManager.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/core/lock/TestSessionLockManager.java (rev 0)
+++ jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/core/lock/TestSessionLockManager.java 2009-11-18 16:17:22 UTC (rev 755)
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.exoplatform.services.jcr.impl.core.lock;
+
+import org.exoplatform.services.jcr.JcrImplBaseTest;
+import org.exoplatform.services.jcr.core.CredentialsImpl;
+import org.exoplatform.services.jcr.datamodel.NodeData;
+import org.exoplatform.services.jcr.impl.Constants;
+import org.exoplatform.services.jcr.impl.core.NodeImpl;
+import org.exoplatform.services.jcr.impl.core.SessionImpl;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.lock.Lock;
+
+/**
+ * @author <a href="mailto:nikolazius@gmail.com">Nikolay Zamosenchuk</a>
+ * @version $Id$
+ *
+ */
+public class TestSessionLockManager extends JcrImplBaseTest
+{
+ NodeImpl testRoot;
+
+ @Override
+ public void setUp() throws Exception
+ {
+ super.setUp();
+ testRoot = (NodeImpl)root.addNode("TestSessionLockManager");
+ session.save();
+ }
+
+ @Override
+ protected void tearDown() throws Exception
+ {
+ testRoot.remove();
+ session.save();
+ super.tearDown();
+ }
+
+ public void testAddLockToken() throws RepositoryException
+ {
+ NodeImpl node1 = (NodeImpl)testRoot.addNode("testAddLockToken");
+ node1.addMixin(Constants.MIX_LOCKABLE.getAsString());
+ session.save();
+ // lock through session1
+ Lock lock1 = node1.lock(false, true);
+
+ // create new session2
+ CredentialsImpl credentials = new CredentialsImpl("admin", "admin".toCharArray());
+ SessionImpl session2 = (SessionImpl)repository.login(credentials, "ws");
+
+ NodeImpl node2 = (NodeImpl)session2.getNodeByUUID(node1.getUUID());
+ // check node locked
+ assertTrue(node2.isLocked());
+ // check session2 has NO access to lock
+ assertFalse(session2.getLockManager().isLockHolder((NodeData)node2.getData()));
+ // add token and check session2 has access to lock
+ session2.addLockToken(lock1.getLockToken());
+ assertTrue(session2.getLockManager().isLockHolder((NodeData)node2.getData()));
+ node2.unlock();
+ session2.logout();
+ }
+
+ public void testRemoveOnLogOut() throws RepositoryException
+ {
+ NodeImpl node1 = (NodeImpl)testRoot.addNode("testRemoveOnLogOut");
+ node1.addMixin(Constants.MIX_LOCKABLE.getAsString());
+ session.save();
+ // create new session2
+ CredentialsImpl credentials = new CredentialsImpl("admin", "admin".toCharArray());
+ SessionImpl session2 = (SessionImpl)repository.login(credentials, "ws");
+
+ NodeImpl node2 = (NodeImpl)session2.getNodeByUUID(node1.getUUID());
+ // lock through session2
+ Lock lock2 = node2.lock(false, true);
+ // check session2 has access to lock
+ assertTrue(node2.isLocked());
+ assertTrue(session2.getLockManager().isLockHolder((NodeData)node2.getData()));
+
+ // session2 logout
+ session2.logout();
+ // lock should be removed and node should be unlocked
+ assertFalse(lock2.isLive());
+ assertFalse(node2.isLocked());
+ assertFalse(node1.isLocked());
+ }
+
+ public void testRemoveByTimeOut() throws RepositoryException
+ {
+ int REMOVER_SCHEDULE_TIME = 10000; // 10s?! need to place correct value
+ int lockTimeOut = 2000;
+ NodeImpl node1 = (NodeImpl)testRoot.addNode("testRemoveByTimeOut");
+ node1.addMixin(Constants.MIX_LOCKABLE.getAsString());
+ session.save();
+ // set time out 2s
+ node1.lock(false, lockTimeOut);
+ try
+ {
+ // sleep for Remover period time + lockTimeOut + 1s for stability
+ Thread.sleep(REMOVER_SCHEDULE_TIME + lockTimeOut + 1000);
+ }
+ catch (InterruptedException e)
+ {
+ }
+ assertFalse(node1.isLocked());
+ }
+}
Property changes on: jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/core/lock/TestSessionLockManager.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
16 years, 8 months
exo-jcr SVN: r754 - in jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl: storage/jbosscache and 1 other directory.
by do-not-reply@jboss.org
Author: nzamosenchuk
Date: 2009-11-18 11:16:19 -0500 (Wed, 18 Nov 2009)
New Revision: 754
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/JBossCacheWorkspaceDataManager.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java
Log:
EXOJCR-242: small updates of locking code
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/JBossCacheWorkspaceDataManager.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/JBossCacheWorkspaceDataManager.java 2009-11-18 16:03:40 UTC (rev 753)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/JBossCacheWorkspaceDataManager.java 2009-11-18 16:16:19 UTC (rev 754)
@@ -25,7 +25,6 @@
import org.exoplatform.services.jcr.dataflow.LockPlainChangesLogImpl;
import org.exoplatform.services.jcr.dataflow.PlainChangesLog;
import org.exoplatform.services.jcr.dataflow.ReadOnlyThroughChanges;
-import org.exoplatform.services.jcr.dataflow.TransactionChangesLog;
import org.exoplatform.services.jcr.datamodel.QPath;
import org.exoplatform.services.jcr.impl.Constants;
import org.exoplatform.services.jcr.impl.core.lock.LockData;
@@ -96,7 +95,7 @@
{
for (PlainChangesLog curChangesLog : chengesLogList)
{
- // if this is LOCK or UNLOCK changes log, then put or remove lock data from cache
+ // if this is LOCK or UNLOCK changes log, then put or remove lock data to or from cache
if (curChangesLog.getEventType() == ExtendedEvent.LOCK
|| curChangesLog.getEventType() == ExtendedEvent.UNLOCK)
{
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java 2009-11-18 16:03:40 UTC (rev 753)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java 2009-11-18 16:16:19 UTC (rev 754)
@@ -703,22 +703,32 @@
throw new RepositoryException("Lock data to write can't be null!");
}
// check that there is no lock data for given node
- Node<Serializable, Object> oldNode = locksRoot.getChild(makeNodeFqn(lockData.getNodeIdentifier()));
- if (oldNode.get(JBossCacheStorage.LOCK_DATA) != null)
+ Node<Serializable, Object> node = locksRoot.getChild(makeNodeFqn(lockData.getNodeIdentifier()));
+ // node is not null: check if lockData exists
+ if (node != null)
{
- throw new LockException("Unable to write lock data. Node [" + lockData.getNodeIdentifier()
- + "] already has LockData!");
+ LockData oldLockData = (LockData)node.get(JBossCacheStorage.LOCK_DATA);
+ // if old data exists and hash differs, then it was newly locked! Exception, can't lock
+ // already locked node.
+ if (oldLockData != null && oldLockData.getTokenHash() != lockData.getTokenHash())
+ {
+ throw new LockException("Unable to write lock data. Node [" + lockData.getNodeIdentifier()
+ + "] already has LockData!");
+ }
}
+ else
+ {
+ // JBoss node doesn't exists, create it
+ node = locksRoot.addChild(makeNodeFqn(lockData.getNodeIdentifier()));
+ node.setResident(true);
+ }
// try to write LockData
- Node<Serializable, Object> node = locksRoot.addChild(makeNodeFqn(lockData.getNodeIdentifier()));
if (node == null)
{
throw new RepositoryException("Unable to write to cache!");
}
// this will prevent from deleting it by eviction.
- node.setResident(true);
node.put(JBossCacheStorage.LOCK_DATA, lockData);
-
}
/**
16 years, 8 months
exo-jcr SVN: r753 - in jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage: jdbc and 1 other directories.
by do-not-reply@jboss.org
Author: pnedonosko
Date: 2009-11-18 11:03:40 -0500 (Wed, 18 Nov 2009)
New Revision: 753
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java
Log:
EXOJCR-248: get childs optimization
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java 2009-11-18 14:15:30 UTC (rev 752)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java 2009-11-18 16:03:40 UTC (rev 753)
@@ -299,10 +299,10 @@
// /$NODES/<NODE_ID>/<SUB_NODE_NAME>
else if (name.size() == 3)
{
- String childNodeName = name.getLastElementAsString();
+ QPathEntry childNodeName = QPathEntry.parse(name.getLastElementAsString());
String parentId = (String)name.get(1);
- String nodeId = conn.getItemIdentifier(parentId, childNodeName);
+ String nodeId = conn.getItemIdentifier(parentId, childNodeName.getAsString(false), childNodeName.getIndex());
if (nodeId != null)
{
attrs = new LinkedHashMap<Object, Object>();
@@ -402,10 +402,10 @@
// /$NODES/<NODE_ID>/<SUB_NODE_NAME>
else if (name.size() == 3)
{
- String childNodeName = name.getLastElementAsString();
+ QPathEntry childNodeName = QPathEntry.parse(name.getLastElementAsString());
String parentId = (String)name.get(1);
- String nodeId = conn.getItemIdentifier(parentId, childNodeName);
+ String nodeId = conn.getItemIdentifier(parentId, childNodeName.getAsString(false), childNodeName.getIndex());
if (nodeId != null)
{
exists = true;
@@ -488,14 +488,16 @@
}
else if (name.equals(JBossCacheStorage.NODES))
{
- // TODO return all Nodes in workspace
- return new LinkedHashSet<String>();
-
+ // TODO should never be called
+ LOG.warn("conn.getAllNodeIdentifiers()");
+ return conn.getAllNodeIdentifiers();
+
}
else if (name.equals(JBossCacheStorage.PROPS))
{
- // TODO return all Properties in workspace
- return new LinkedHashSet<String>();
+ // TODO should never be called
+ LOG.warn("conn.getAllPropertyIdentifiers()");
+ return conn.getAllPropertyIdentifiers();
}
else if (name.equals(JBossCacheStorage.LOCKS))
{
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java 2009-11-18 14:15:30 UTC (rev 752)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java 2009-11-18 16:03:40 UTC (rev 753)
@@ -151,6 +151,16 @@
* FIND_ITEM_NAME.
*/
protected String FIND_ITEM_NAME;
+
+ /**
+ * FIND_ALL_NODES.
+ */
+ protected String FIND_ALL_NODES;
+
+ /**
+ * FIND_ALL_PROPERTIES.
+ */
+ protected String FIND_ALL_PROPERTIES;
/**
* INSERT_NODE.
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java 2009-11-18 14:15:30 UTC (rev 752)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java 2009-11-18 16:03:40 UTC (rev 753)
@@ -2002,19 +2002,20 @@
/**
* Find Item ID in database.
*
- * @param parentId parent Node id
- * @param name Item name
+ * @param parentId String, parent Node id
+ * @param name Item, name
+ * @param index int, path index (actual for nodes, 1 for properties)
* @return String with ID
* @throws RepositoryException if database error occurs
* @throws IllegalStateException if connection closed
*/
- public String getItemIdentifier(String parentId, String name) throws RepositoryException, IllegalStateException
+ public String getItemIdentifier(String parentId, String name, int index) throws RepositoryException, IllegalStateException
{
checkIfOpened();
try
{
- ResultSet item = findItemIdentifier(getInternalId(parentId), name);
+ ResultSet item = findItemIdentifier(getInternalId(parentId), name, index);
if (item.next())
{
return item.getString(COLUMN_ID);
@@ -2093,7 +2094,7 @@
*
* @param parentId parent Node id.
* @return Set of String (id)
- * @throws RepositoryException if error
+ * @throws RepositoryException if database error occurs
* @throws IllegalStateException if connection closed
*/
public Set<String> getChildNodeNames(String parentId) throws RepositoryException, IllegalStateException
@@ -2122,15 +2123,30 @@
}
}
+ /**
+ * Return all Properties in workspace.
+ * TODO check if it used, should not!
+ *
+ * @return Set of String (id)
+ * @throws RepositoryException if database error occurs
+ * @throws IllegalStateException if connection closed
+ */
public Set<String> getAllPropertyIdentifiers() throws RepositoryException, IllegalStateException
{
checkIfOpened();
+
try
{
- ResultSet node = findChildNodesByParentIdentifier(getInternalId("???"));
+ ResultSet node = findAllPropertyIdentifiers();
Set<String> childrens = new LinkedHashSet<String>();
- //while (node.next())
- //childrens.add((NodeData)itemData(parent.getQPath(), node, I_CLASS_NODE, parent.getACL()));
+ while (node.next())
+ {
+ String propId = node.getString(COLUMN_ID);
+ if (!childrens.add(propId))
+ {
+ throw new RepositoryException("FATAL Property id dublicated " + propId);
+ }
+ }
return childrens;
}
@@ -2140,15 +2156,30 @@
}
}
+ /**
+ * Return all Nodes in workspace.
+ * TODO check if it used, should not!
+ *
+ * @return Set of String (id)
+ * @throws RepositoryException if database error occurs
+ * @throws IllegalStateException if connection closed
+ */
public Set<String> getAllNodeIdentifiers() throws RepositoryException, IllegalStateException
{
checkIfOpened();
+
try
{
- ResultSet node = findChildNodesByParentIdentifier(getInternalId("???"));
+ ResultSet node = findAllNodeIdentifiers();
Set<String> childrens = new LinkedHashSet<String>();
- //while (node.next())
- //childrens.add((NodeData)itemData(parent.getQPath(), node, I_CLASS_NODE, parent.getACL()));
+ while (node.next())
+ {
+ String nodeId = node.getString(COLUMN_ID);
+ if (!childrens.add(nodeId))
+ {
+ throw new RepositoryException("FATAL Node id dublicated " + nodeId);
+ }
+ }
return childrens;
}
@@ -2209,8 +2240,12 @@
protected abstract ResultSet findChildNodesNameByParentIdentifier(String parentCid) throws SQLException;
- protected abstract ResultSet findItemIdentifier(String parentCid, String name) throws SQLException;
+ protected abstract ResultSet findItemIdentifier(String parentCid, String name, int index) throws SQLException;
protected abstract ResultSet findItemName(String cid) throws SQLException;
+
+ protected abstract ResultSet findAllPropertyIdentifiers() throws SQLException;
+
+ protected abstract ResultSet findAllNodeIdentifiers() throws SQLException;
}
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java 2009-11-18 14:15:30 UTC (rev 752)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java 2009-11-18 16:03:40 UTC (rev 753)
@@ -87,6 +87,10 @@
protected PreparedStatement findItemIdentifier;
protected PreparedStatement findItemName;
+
+ protected PreparedStatement findAllProperties;
+
+ protected PreparedStatement findAllNodes;
protected PreparedStatement insertNode;
@@ -194,13 +198,18 @@
FIND_NODES_BY_PARENTID = "select * from JCR_MITEM" + " where I_CLASS=1 and PARENT_ID=?" + " order by N_ORDER_NUM";
- FIND_NODES_NAME_BY_PARENTID = "select NAME from JCR_MITEM" + " where I_CLASS=1 and PARENT_ID=?" + " order by N_ORDER_NUM";
+ FIND_ALL_NODES = "select ID from JCR_MITEM where I_CLASS=1";
+ FIND_NODES_NAME_BY_PARENTID =
+ "select NAME from JCR_MITEM" + " where I_CLASS=1 and PARENT_ID=?" + " order by N_ORDER_NUM";
+
FIND_PROPERTIES_BY_PARENTID = "select * from JCR_MITEM" + " where I_CLASS=2 and PARENT_ID=?" + " order by ID";
FIND_PROPERTIES_IDNAME_BY_PARENTID = "select ID, NAME from JCR_MITEM" + " where I_CLASS=2 and PARENT_ID=?";
+
+ FIND_ALL_PROPERTIES = "select ID from JCR_MITEM where I_CLASS=2";
- FIND_ITEM_IDENTIFIER = "select ID from JCR_MITEM" + " where PARENT_ID=? and NAME=?";
+ FIND_ITEM_IDENTIFIER = "select ID from JCR_MITEM" + " where PARENT_ID=? and NAME=? and I_INDEX=?";
FIND_ITEM_NAME = "select NAME from JCR_MITEM" + " where ID=?";
@@ -588,7 +597,7 @@
* {@inheritDoc}
*/
@Override
- protected ResultSet findItemIdentifier(String parentCid, String name) throws SQLException
+ protected ResultSet findItemIdentifier(String parentCid, String name, int index) throws SQLException
{
if (findItemIdentifier == null)
{
@@ -600,6 +609,7 @@
}
findItemIdentifier.setString(1, parentCid);
findItemIdentifier.setString(2, name);
+ findItemIdentifier.setInt(3, index);
return findItemIdentifier.executeQuery();
}
@@ -607,7 +617,7 @@
* {@inheritDoc}
*/
@Override
- protected ResultSet findItemName(String cid) throws SQLException
+ protected ResultSet findItemName(String id) throws SQLException
{
if (findItemName == null)
{
@@ -617,7 +627,7 @@
{
findItemName.clearParameters();
}
- findItemName.setString(1, cid);
+ findItemName.setString(1, id);
return findItemName.executeQuery();
}
@@ -625,7 +635,7 @@
* {@inheritDoc}
*/
@Override
- protected ResultSet findChildNodesNameByParentIdentifier(String parentIdentifier) throws SQLException
+ protected ResultSet findChildNodesNameByParentIdentifier(String parentId) throws SQLException
{
if (findNodesNameByParentId == null)
{
@@ -635,7 +645,41 @@
{
findNodesNameByParentId.clearParameters();
}
- findNodesNameByParentId.setString(1, parentIdentifier);
+ findNodesNameByParentId.setString(1, parentId);
return findNodesNameByParentId.executeQuery();
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected ResultSet findAllNodeIdentifiers() throws SQLException
+ {
+ if (findAllNodes == null)
+ {
+ findAllNodes = dbConnection.prepareStatement(FIND_ALL_NODES);
+ }
+ else
+ {
+ findAllNodes.clearParameters();
+ }
+ return findAllNodes.executeQuery();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected ResultSet findAllPropertyIdentifiers() throws SQLException
+ {
+ if (findAllProperties == null)
+ {
+ findAllProperties = dbConnection.prepareStatement(FIND_ALL_PROPERTIES);
+ }
+ else
+ {
+ findAllProperties.clearParameters();
+ }
+ return findAllProperties.executeQuery();
+ }
}
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java 2009-11-18 14:15:30 UTC (rev 752)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java 2009-11-18 16:03:40 UTC (rev 753)
@@ -85,6 +85,10 @@
protected PreparedStatement findItemName;
+ protected PreparedStatement findAllProperties;
+
+ protected PreparedStatement findAllNodes;
+
protected PreparedStatement insertItem;
protected PreparedStatement insertNode;
@@ -202,15 +206,20 @@
"select * from JCR_SITEM" + " where I_CLASS=1 and CONTAINER_NAME=? and PARENT_ID=?" + " order by N_ORDER_NUM";
FIND_NODES_NAME_BY_PARENTID =
- "select NAME from JCR_SITEM" + " where I_CLASS=1 and CONTAINER_NAME=? and PARENT_ID=?" + " order by N_ORDER_NUM";
+ "select NAME from JCR_SITEM" + " where I_CLASS=1 and CONTAINER_NAME=? and PARENT_ID=?"
+ + " order by N_ORDER_NUM";
+ FIND_ALL_NODES = "select ID from JCR_SITEM where I_CLASS=1 and CONTAINER_NAME=?";
+
FIND_PROPERTIES_BY_PARENTID =
"select * from JCR_SITEM" + " where I_CLASS=2 and CONTAINER_NAME=? and PARENT_ID=?" + " order by ID";
FIND_PROPERTIES_IDNAME_BY_PARENTID =
"select ID, NAME from JCR_SITEM" + " where I_CLASS=2 and CONTAINER_NAME=? and PARENT_ID=?";
- FIND_ITEM_IDENTIFIER = "select ID from JCR_SITEM" + " where CONTAINER_NAME=? and PARENT_ID=? and NAME=?";
+ FIND_ALL_PROPERTIES = "select ID from JCR_SITEM where I_CLASS=2 and CONTAINER_NAME=?";
+
+ FIND_ITEM_IDENTIFIER = "select ID from JCR_SITEM" + " where CONTAINER_NAME=? and PARENT_ID=? and NAME=? and I_INDEX=?";
FIND_ITEM_NAME = "select NAME from JCR_SITEM" + " where ID=?";
@@ -601,7 +610,7 @@
* {@inheritDoc}
*/
@Override
- protected ResultSet findItemIdentifier(String parentCid, String name) throws SQLException
+ protected ResultSet findItemIdentifier(String parentCid, String name, int index) throws SQLException
{
if (findItemIdentifier == null)
findItemIdentifier = dbConnection.prepareStatement(FIND_ITEM_IDENTIFIER);
@@ -611,6 +620,7 @@
findItemIdentifier.setString(1, containerName);
findItemIdentifier.setString(2, parentCid);
findItemIdentifier.setString(3, name);
+ findItemIdentifier.setInt(4, index);
return findItemIdentifier.executeQuery();
}
@@ -647,4 +657,40 @@
findNodesNameByParentId.setString(2, parentCid);
return findNodesNameByParentId.executeQuery();
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected ResultSet findAllNodeIdentifiers() throws SQLException
+ {
+ if (findAllNodes == null)
+ {
+ findAllNodes = dbConnection.prepareStatement(FIND_ALL_NODES);
+ }
+ else
+ {
+ findAllNodes.clearParameters();
+ }
+ findAllNodes.setString(1, containerName);
+ return findAllNodes.executeQuery();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected ResultSet findAllPropertyIdentifiers() throws SQLException
+ {
+ if (findAllProperties == null)
+ {
+ findAllProperties = dbConnection.prepareStatement(FIND_ALL_PROPERTIES);
+ }
+ else
+ {
+ findAllProperties.clearParameters();
+ }
+ findAllProperties.setString(1, containerName);
+ return findAllProperties.executeQuery();
+ }
}
16 years, 8 months
exo-jcr SVN: r752 - in jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc: db and 1 other directory.
by do-not-reply@jboss.org
Author: pnedonosko
Date: 2009-11-18 09:15:30 -0500 (Wed, 18 Nov 2009)
New Revision: 752
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBMultiDbJDBCConnection.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBSingleDbJDBCConnection.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java
Log:
EXOJCR-248: get childs optimization (HSQLDB tunning)
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java 2009-11-18 14:10:55 UTC (rev 751)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java 2009-11-18 14:15:30 UTC (rev 752)
@@ -2204,10 +2204,10 @@
// JBC related
- protected abstract ResultSet findChildPropertiesIdNameByParentIdentifier(String parentIdentifier)
+ protected abstract ResultSet findChildPropertiesIdNameByParentIdentifier(String parentCid)
throws SQLException;
- protected abstract ResultSet findChildNodesNameByParentIdentifier(String parentIdentifier) throws SQLException;
+ protected abstract ResultSet findChildNodesNameByParentIdentifier(String parentCid) throws SQLException;
protected abstract ResultSet findItemIdentifier(String parentCid, String name) throws SQLException;
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBMultiDbJDBCConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBMultiDbJDBCConnection.java 2009-11-18 14:10:55 UTC (rev 751)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBMultiDbJDBCConnection.java 2009-11-18 14:15:30 UTC (rev 752)
@@ -74,6 +74,9 @@
"select V.DATA" + " from JCR_MITEM I, JCR_MVALUE V"
+ " where I.PARENT_ID=? and I.I_CLASS=2 and I.NAME=? and I.ID=V.PROPERTY_ID order by V.ORDER_NUM";
FIND_NODES_BY_PARENTID = "select * from JCR_MITEM" + " where PARENT_ID=? and I_CLASS=1" + " order by N_ORDER_NUM";
+
+ FIND_NODES_NAME_BY_PARENTID = "select NAME from JCR_MITEM" + " where PARENT_ID=? and I_CLASS=1" + " order by N_ORDER_NUM";
+
FIND_PROPERTIES_BY_PARENTID = "select * from JCR_MITEM" + " where PARENT_ID=? and I_CLASS=2" + " order by ID";
}
}
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBSingleDbJDBCConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBSingleDbJDBCConnection.java 2009-11-18 14:10:55 UTC (rev 751)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBSingleDbJDBCConnection.java 2009-11-18 14:15:30 UTC (rev 752)
@@ -81,6 +81,10 @@
+ " where I.PARENT_ID=? and I.I_CLASS=2 and I.CONTAINER_NAME=? and I.NAME=? and I.ID=V.PROPERTY_ID order by V.ORDER_NUM";
FIND_NODES_BY_PARENTID =
"select * from JCR_SITEM" + " where PARENT_ID=? and I_CLASS=1 and CONTAINER_NAME=?" + " order by N_ORDER_NUM";
+
+ FIND_NODES_NAME_BY_PARENTID =
+ "select NAME from JCR_SITEM" + " where PARENT_ID=? and I_CLASS=1 and CONTAINER_NAME=?" + " order by N_ORDER_NUM";
+
FIND_PROPERTIES_BY_PARENTID =
"select * from JCR_SITEM" + " where PARENT_ID=? and I_CLASS=2 and CONTAINER_NAME=?" + " order by ID";
FIND_PROPERTIES_IDNAME_BY_PARENTID =
@@ -169,4 +173,23 @@
findPropertiesIdNameByParentId.setString(2, containerName);
return findPropertiesIdNameByParentId.executeQuery();
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected ResultSet findChildNodesNameByParentIdentifier(String parentCid) throws SQLException
+ {
+ if (findNodesNameByParentId == null)
+ {
+ findNodesNameByParentId = dbConnection.prepareStatement(FIND_NODES_NAME_BY_PARENTID);
+ }
+ else
+ {
+ findNodesNameByParentId.clearParameters();
+ }
+ findNodesNameByParentId.setString(1, parentCid);
+ findNodesNameByParentId.setString(2, containerName);
+ return findNodesNameByParentId.executeQuery();
+ }
}
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java 2009-11-18 14:10:55 UTC (rev 751)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java 2009-11-18 14:15:30 UTC (rev 752)
@@ -633,7 +633,7 @@
* {@inheritDoc}
*/
@Override
- protected ResultSet findChildNodesNameByParentIdentifier(String parentIdentifier) throws SQLException
+ protected ResultSet findChildNodesNameByParentIdentifier(String parentCid) throws SQLException
{
if (findNodesNameByParentId == null)
{
@@ -643,7 +643,8 @@
{
findNodesNameByParentId.clearParameters();
}
- findNodesNameByParentId.setString(1, parentIdentifier);
+ findNodesNameByParentId.setString(1, containerName);
+ findNodesNameByParentId.setString(2, parentCid);
return findNodesNameByParentId.executeQuery();
}
}
16 years, 8 months
exo-jcr SVN: r751 - in jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage: jdbc and 1 other directories.
by do-not-reply@jboss.org
Author: pnedonosko
Date: 2009-11-18 09:10:55 -0500 (Wed, 18 Nov 2009)
New Revision: 751
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java
Log:
EXOJCR-248: get childs optimization
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java 2009-11-18 13:59:56 UTC (rev 750)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java 2009-11-18 14:10:55 UTC (rev 751)
@@ -277,7 +277,6 @@
NodeData nodeData = (NodeData)conn.getItemData(nodeId);
if (nodeData != null)
{
- // TODO get child props info
List<PropertyDataInfo> childProps = conn.getChildProperties(nodeId);
if (childProps.size() <= 0)
{
@@ -375,7 +374,6 @@
*/
public boolean exists(Fqn name) throws Exception
{
- // TODO Will be created specialization code to checking exist node or property in DB without getting NodeData or PropertyData from DB.
JDBCStorageConnection conn = (JDBCStorageConnection)dataContainer.openConnection();
boolean exists;
@@ -479,55 +477,48 @@
{
// return child nodes names
- Set<String> childs;
-
- // /$NODES/<NODE_ID>
- if (name.size() == 2)
+ JDBCStorageConnection conn = (JDBCStorageConnection)dataContainer.openConnection();
+ try
{
- JDBCStorageConnection conn = (JDBCStorageConnection)dataContainer.openConnection();
- try
+ // /$NODES/<NODE_ID>
+ if (name.size() == 2)
{
String nodeId = (String)name.get(1);
- childs = new LinkedHashSet<String>();
+ return conn.getChildNodeNames(nodeId);
+ }
+ else if (name.equals(JBossCacheStorage.NODES))
+ {
+ // TODO return all Nodes in workspace
+ return new LinkedHashSet<String>();
- for (String nodeName : conn.getChildNodeNames(nodeId))
- {
- childs.add(nodeName);
- }
}
- finally
+ else if (name.equals(JBossCacheStorage.PROPS))
{
- conn.close();
+ // TODO return all Properties in workspace
+ return new LinkedHashSet<String>();
}
+ else if (name.equals(JBossCacheStorage.LOCKS))
+ {
+ // TODO return all Locks in workspace
+ return new LinkedHashSet<String>();
+ }
+ else if (name.equals(Fqn.ROOT))
+ {
+ Set<String> childs = new LinkedHashSet<String>();
+ childs.add(JBossCacheStorage.NODES);
+ childs.add(JBossCacheStorage.PROPS);
+ childs.add(JBossCacheStorage.LOCKS);
+ return childs;
+ }
+ else
+ {
+ return null;
+ }
}
- else if (name.equals(JBossCacheStorage.NODES))
+ finally
{
- // TODO return all Nodes in workspace
- childs = new LinkedHashSet<String>();
+ conn.close();
}
- else if (name.equals(JBossCacheStorage.PROPS))
- {
- // TODO return all Properties in workspace
- childs = new LinkedHashSet<String>();
- }
- else if (name.equals(JBossCacheStorage.LOCKS))
- {
- // TODO return all Locks in workspace
- childs = new LinkedHashSet<String>();
- }
- else if (name.equals(Fqn.ROOT))
- {
- childs = new LinkedHashSet<String>();
- childs.add(JBossCacheStorage.NODES);
- childs.add(JBossCacheStorage.PROPS);
- childs.add(JBossCacheStorage.LOCKS);
- }
- else
- {
- childs = null;
- }
-
- return childs;
}
/**
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java 2009-11-18 13:59:56 UTC (rev 750)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java 2009-11-18 14:10:55 UTC (rev 751)
@@ -126,6 +126,11 @@
* FIND_NODES_BY_PARENTID.
*/
protected String FIND_NODES_BY_PARENTID;
+
+ /**
+ * FIND_NODES_NAME_BY_PARENTID.
+ */
+ protected String FIND_NODES_NAME_BY_PARENTID;
/**
* FIND_PROPERTIES_BY_PARENTID.
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java 2009-11-18 13:59:56 UTC (rev 750)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java 2009-11-18 14:10:55 UTC (rev 751)
@@ -58,7 +58,9 @@
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
+import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Set;
import java.util.StringTokenizer;
import javax.jcr.InvalidItemStateException;
@@ -2009,7 +2011,7 @@
public String getItemIdentifier(String parentId, String name) throws RepositoryException, IllegalStateException
{
checkIfOpened();
-
+
try
{
ResultSet item = findItemIdentifier(getInternalId(parentId), name);
@@ -2022,7 +2024,7 @@
{
throw new RepositoryException(e);
}
-
+
return null;
}
@@ -2038,7 +2040,7 @@
{
checkIfOpened();
-
+
try
{
ResultSet item = findItemName(getInternalId(propertyId));
@@ -2051,7 +2053,7 @@
{
throw new RepositoryException(e);
}
-
+
return null;
}
@@ -2086,15 +2088,31 @@
}
}
- public List<String> getChildNodeNames(String parentId) throws RepositoryException, IllegalStateException
+ /**
+ * Get child nodes names set.
+ *
+ * @param parentId parent Node id.
+ * @return Set of String (id)
+ * @throws RepositoryException if error
+ * @throws IllegalStateException if connection closed
+ */
+ public Set<String> getChildNodeNames(String parentId) throws RepositoryException, IllegalStateException
{
checkIfOpened();
+
try
{
- ResultSet node = findChildNodesByParentIdentifier(getInternalId(parentId));
- List<String> childrens = new ArrayList<String>();
- //while (node.next())
- //childrens.add((NodeData)itemData(parent.getQPath(), node, I_CLASS_NODE, parent.getACL()));
+ ResultSet node = findChildNodesNameByParentIdentifier(getInternalId(parentId));
+ Set<String> childrens = new LinkedHashSet<String>();
+ while (node.next())
+ {
+ String childName = node.getString(COLUMN_NAME);
+ if (!childrens.add(childName))
+ {
+ throw new RepositoryException("FATAL Child node name dublicated '" + childName + "' on parent "
+ + parentId);
+ }
+ }
return childrens;
}
@@ -2104,13 +2122,13 @@
}
}
- public List<String> getAllPropertyIdentifiers() throws RepositoryException, IllegalStateException
+ public Set<String> getAllPropertyIdentifiers() throws RepositoryException, IllegalStateException
{
checkIfOpened();
try
{
ResultSet node = findChildNodesByParentIdentifier(getInternalId("???"));
- List<String> childrens = new ArrayList<String>();
+ Set<String> childrens = new LinkedHashSet<String>();
//while (node.next())
//childrens.add((NodeData)itemData(parent.getQPath(), node, I_CLASS_NODE, parent.getACL()));
@@ -2122,13 +2140,13 @@
}
}
- public List<String> getAllNodeIdentifiers() throws RepositoryException, IllegalStateException
+ public Set<String> getAllNodeIdentifiers() throws RepositoryException, IllegalStateException
{
checkIfOpened();
try
{
ResultSet node = findChildNodesByParentIdentifier(getInternalId("???"));
- List<String> childrens = new ArrayList<String>();
+ Set<String> childrens = new LinkedHashSet<String>();
//while (node.next())
//childrens.add((NodeData)itemData(parent.getQPath(), node, I_CLASS_NODE, parent.getACL()));
@@ -2156,9 +2174,6 @@
protected abstract ResultSet findChildPropertiesByParentIdentifier(String parentIdentifier) throws SQLException;
- protected abstract ResultSet findChildPropertiesIdNameByParentIdentifier(String parentIdentifier)
- throws SQLException;
-
protected abstract int addReference(PropertyData data) throws SQLException, IOException;
protected abstract int renameNode(NodeData data) throws SQLException;
@@ -2189,6 +2204,11 @@
// JBC related
+ protected abstract ResultSet findChildPropertiesIdNameByParentIdentifier(String parentIdentifier)
+ throws SQLException;
+
+ protected abstract ResultSet findChildNodesNameByParentIdentifier(String parentIdentifier) throws SQLException;
+
protected abstract ResultSet findItemIdentifier(String parentCid, String name) throws SQLException;
protected abstract ResultSet findItemName(String cid) throws SQLException;
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java 2009-11-18 13:59:56 UTC (rev 750)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java 2009-11-18 14:10:55 UTC (rev 751)
@@ -78,6 +78,8 @@
protected PreparedStatement findNodesByParentId;
+ protected PreparedStatement findNodesNameByParentId;
+
protected PreparedStatement findPropertiesByParentId;
protected PreparedStatement findPropertiesIdNameByParentId;
@@ -192,12 +194,14 @@
FIND_NODES_BY_PARENTID = "select * from JCR_MITEM" + " where I_CLASS=1 and PARENT_ID=?" + " order by N_ORDER_NUM";
+ FIND_NODES_NAME_BY_PARENTID = "select NAME from JCR_MITEM" + " where I_CLASS=1 and PARENT_ID=?" + " order by N_ORDER_NUM";
+
FIND_PROPERTIES_BY_PARENTID = "select * from JCR_MITEM" + " where I_CLASS=2 and PARENT_ID=?" + " order by ID";
FIND_PROPERTIES_IDNAME_BY_PARENTID = "select ID, NAME from JCR_MITEM" + " where I_CLASS=2 and PARENT_ID=?";
-
+
FIND_ITEM_IDENTIFIER = "select ID from JCR_MITEM" + " where PARENT_ID=? and NAME=?";
-
+
FIND_ITEM_NAME = "select NAME from JCR_MITEM" + " where ID=?";
INSERT_NODE =
@@ -451,17 +455,6 @@
return findPropertiesByParentId.executeQuery();
}
- protected ResultSet findChildPropertiesIdNameByParentIdentifier(String parentIdentifier) throws SQLException
- {
- if (findPropertiesIdNameByParentId == null)
- findPropertiesIdNameByParentId = dbConnection.prepareStatement(FIND_PROPERTIES_IDNAME_BY_PARENTID);
- else
- findPropertiesIdNameByParentId.clearParameters();
-
- findPropertiesIdNameByParentId.setString(1, parentIdentifier);
- return findPropertiesIdNameByParentId.executeQuery();
- }
-
// -------- values processing ------------
/**
@@ -577,13 +570,34 @@
* {@inheritDoc}
*/
@Override
+ protected ResultSet findChildPropertiesIdNameByParentIdentifier(String parentIdentifier) throws SQLException
+ {
+ if (findPropertiesIdNameByParentId == null)
+ {
+ findPropertiesIdNameByParentId = dbConnection.prepareStatement(FIND_PROPERTIES_IDNAME_BY_PARENTID);
+ }
+ else
+ {
+ findPropertiesIdNameByParentId.clearParameters();
+ }
+ findPropertiesIdNameByParentId.setString(1, parentIdentifier);
+ return findPropertiesIdNameByParentId.executeQuery();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
protected ResultSet findItemIdentifier(String parentCid, String name) throws SQLException
{
if (findItemIdentifier == null)
+ {
findItemIdentifier = dbConnection.prepareStatement(FIND_ITEM_IDENTIFIER);
+ }
else
+ {
findItemIdentifier.clearParameters();
-
+ }
findItemIdentifier.setString(1, parentCid);
findItemIdentifier.setString(2, name);
return findItemIdentifier.executeQuery();
@@ -596,11 +610,32 @@
protected ResultSet findItemName(String cid) throws SQLException
{
if (findItemName == null)
+ {
findItemName = dbConnection.prepareStatement(FIND_ITEM_NAME);
+ }
else
+ {
findItemName.clearParameters();
-
+ }
findItemName.setString(1, cid);
return findItemName.executeQuery();
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected ResultSet findChildNodesNameByParentIdentifier(String parentIdentifier) throws SQLException
+ {
+ if (findNodesNameByParentId == null)
+ {
+ findNodesNameByParentId = dbConnection.prepareStatement(FIND_NODES_NAME_BY_PARENTID);
+ }
+ else
+ {
+ findNodesNameByParentId.clearParameters();
+ }
+ findNodesNameByParentId.setString(1, parentIdentifier);
+ return findNodesNameByParentId.executeQuery();
+ }
}
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java 2009-11-18 13:59:56 UTC (rev 750)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java 2009-11-18 14:10:55 UTC (rev 751)
@@ -75,6 +75,8 @@
protected PreparedStatement findNodesByParentId;
+ protected PreparedStatement findNodesNameByParentId;
+
protected PreparedStatement findPropertiesByParentId;
protected PreparedStatement findPropertiesIdNameByParentId;
@@ -199,6 +201,9 @@
FIND_NODES_BY_PARENTID =
"select * from JCR_SITEM" + " where I_CLASS=1 and CONTAINER_NAME=? and PARENT_ID=?" + " order by N_ORDER_NUM";
+ FIND_NODES_NAME_BY_PARENTID =
+ "select NAME from JCR_SITEM" + " where I_CLASS=1 and CONTAINER_NAME=? and PARENT_ID=?" + " order by N_ORDER_NUM";
+
FIND_PROPERTIES_BY_PARENTID =
"select * from JCR_SITEM" + " where I_CLASS=2 and CONTAINER_NAME=? and PARENT_ID=?" + " order by ID";
@@ -623,4 +628,22 @@
findItemName.setString(1, cid);
return findItemName.executeQuery();
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected ResultSet findChildNodesNameByParentIdentifier(String parentIdentifier) throws SQLException
+ {
+ if (findNodesNameByParentId == null)
+ {
+ findNodesNameByParentId = dbConnection.prepareStatement(FIND_NODES_NAME_BY_PARENTID);
+ }
+ else
+ {
+ findNodesNameByParentId.clearParameters();
+ }
+ findNodesNameByParentId.setString(1, parentIdentifier);
+ return findNodesNameByParentId.executeQuery();
+ }
}
16 years, 8 months
exo-jcr SVN: r750 - jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache.
by do-not-reply@jboss.org
Author: nzamosenchuk
Date: 2009-11-18 08:59:56 -0500 (Wed, 18 Nov 2009)
New Revision: 750
Modified:
jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnectionTest.java
Log:
EXOJCR-242: added locking tests for JBossCacheStorageConnection.
Modified: jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnectionTest.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnectionTest.java 2009-11-18 12:08:01 UTC (rev 749)
+++ jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnectionTest.java 2009-11-18 13:59:56 UTC (rev 750)
@@ -27,6 +27,7 @@
import org.exoplatform.services.jcr.datamodel.PropertyData;
import org.exoplatform.services.jcr.datamodel.QPath;
import org.exoplatform.services.jcr.impl.Constants;
+import org.exoplatform.services.jcr.impl.core.lock.LockData;
import org.exoplatform.services.jcr.impl.dataflow.TransientNodeData;
import org.exoplatform.services.jcr.impl.dataflow.TransientPropertyData;
import org.exoplatform.services.jcr.impl.dataflow.TransientValueData;
@@ -40,6 +41,8 @@
import java.io.UnsupportedEncodingException;
import java.util.List;
+import javax.jcr.lock.LockException;
+
/**
* Created by The eXo Platform SAS.
*
@@ -773,4 +776,73 @@
}
+ public void testAddLock() throws Exception
+ {
+ // ordinary add lock
+ LockData lockData = new LockData("testAddLock", "token's hash", true, true, "owner", 1000);
+ conn.addLockData(lockData);
+ assertEquals(lockData.getTokenHash(), conn.getLockData("testAddLock").getTokenHash());
+ }
+
+ public void testAddLockTwice() throws Exception
+ {
+ // ordinary add lock
+ {
+ LockData lockData = new LockData("testAddLockTwice", "token's hash", true, true, "owner", 1000);
+ conn.addLockData(lockData);
+ assertEquals(lockData.getTokenHash(), conn.getLockData("testAddLockTwice").getTokenHash());
+ }
+ // try to lock once more
+ try
+ {
+ // add lock to the same node twice
+ LockData lockData = new LockData("testAddLockTwice", "other token's hash", true, true, "owner", 1000);
+ conn.addLockData(lockData);
+ fail("exception expected, because can't lock node twice");
+ }
+ catch (LockException e)
+ {
+ }
+ }
+
+ public void testRefreshLock() throws Exception
+ {
+ // ordinary add lock
+ {
+ LockData lockData = new LockData("testRefreshLock", "token's hash", true, true, "owner", 1000);
+ conn.addLockData(lockData);
+ assertEquals(lockData.getTokenHash(), conn.getLockData("testRefreshLock").getTokenHash());
+ }
+ // try to refresh lock (updates creation time to extend lifetime)
+ // refresh is performed by writing new lock data (only difference is changed creation time)
+ {
+ LockData lockData = new LockData("testRefreshLock", "token's hash", true, true, "owner", 1000);
+ conn.addLockData(lockData);
+ assertEquals(lockData.getTokenHash(), conn.getLockData("testRefreshLock").getTokenHash());
+ }
+ }
+
+ public void testGetLocks() throws Exception
+ {
+ // clean up any existing
+ List<LockData> locks = conn.getLocksData();
+ for (LockData lock : locks)
+ {
+ conn.removeLockData(lock.getNodeIdentifier());
+ }
+ // check empty
+ locks = conn.getLocksData();
+ assertEquals(0, locks.size());
+ // fill
+ int count = 3;
+ for (int i = 0; i < count; i++)
+ {
+ LockData lockData = new LockData("testGetLocks" + i, "token's hash " + i, true, true, "owner", 1000);
+ conn.addLockData(lockData);
+ }
+ // assert
+ locks = conn.getLocksData();
+ assertEquals(count, locks.size());
+ }
+
}
16 years, 8 months
exo-jcr SVN: r749 - in jcr/branches/1.12.0-JBC/component/core/src: main/java/org/exoplatform/services/jcr/impl/storage/jdbc and 2 other directories.
by do-not-reply@jboss.org
Author: pnedonosko
Date: 2009-11-18 07:08:01 -0500 (Wed, 18 Nov 2009)
New Revision: 749
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java
jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/JDBCStorageConnectionTest.java
Log:
EXOJCR-247: getters optimization
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java 2009-11-18 11:54:25 UTC (rev 748)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java 2009-11-18 12:08:01 UTC (rev 749)
@@ -128,7 +128,7 @@
break;
case REMOVE_NODE :
- doRemove(m, (JDBCStorageConnection) conn);
+ doRemove(m, (JDBCStorageConnection)conn);
break;
case MOVE :
@@ -185,11 +185,11 @@
* @throws RepositoryException
*/
private void doRemove(Modification modification, JDBCStorageConnection conn) throws IllegalStateException,
- RepositoryException
+ RepositoryException
{
if (modification.getFqn().size() == 2)
{
- String identifier = (String) modification.getFqn().get(1);
+ String identifier = (String)modification.getFqn().get(1);
if (modification.getFqn().get(0).equals(JBossCacheStorage.NODES))
{
@@ -262,7 +262,7 @@
Map<Object, Object> attrs;
- JDBCStorageConnection conn = (JDBCStorageConnection) dataContainer.openConnection();
+ JDBCStorageConnection conn = (JDBCStorageConnection)dataContainer.openConnection();
try
{
@@ -277,7 +277,7 @@
NodeData nodeData = (NodeData)conn.getItemData(nodeId);
if (nodeData != null)
{
- // TODO use dedicated select, not child datas
+ // TODO get child props info
List<PropertyDataInfo> childProps = conn.getChildProperties(nodeId);
if (childProps.size() <= 0)
{
@@ -300,29 +300,19 @@
// /$NODES/<NODE_ID>/<SUB_NODE_NAME>
else if (name.size() == 3)
{
- QPathEntry childNodeName = QPathEntry.parse(name.getLastElementAsString());
+ String childNodeName = name.getLastElementAsString();
String parentId = (String)name.get(1);
- // TODO use non-data method, check ACL creation
- NodeData parentData = (NodeData)conn.getItemData(parentId);
- if (parentData != null)
+ String nodeId = conn.getItemIdentifier(parentId, childNodeName);
+ if (nodeId != null)
{
- NodeData nodeData = (NodeData)conn.getItemData(parentData, childNodeName);
- if (nodeData != null)
- {
- attrs = new LinkedHashMap<Object, Object>();
- attrs.put(JBossCacheStorage.ITEM_ID, nodeData.getIdentifier());
- }
- else
- {
- throw new JDBCCacheLoaderException("FATAL Child Node data not found "
- + parentData.getQPath().getAsString() + childNodeName.getAsString(true) + " for '" + name
- + "'");
- }
+ attrs = new LinkedHashMap<Object, Object>();
+ attrs.put(JBossCacheStorage.ITEM_ID, nodeId);
}
else
{
- throw new JDBCCacheLoaderException("FATAL Parent not found " + parentId + " for '" + name + "'");
+ throw new JDBCCacheLoaderException("FATAL Child Node data not found, parent " + nodeId + " child "
+ + childNodeName + " for '" + name + "'");
}
}
else
@@ -386,10 +376,10 @@
public boolean exists(Fqn name) throws Exception
{
// TODO Will be created specialization code to checking exist node or property in DB without getting NodeData or PropertyData from DB.
- JDBCStorageConnection conn = (JDBCStorageConnection) dataContainer.openConnection();
-
+ JDBCStorageConnection conn = (JDBCStorageConnection)dataContainer.openConnection();
+
boolean exists;
-
+
try
{
if (name.size() > 1)
@@ -400,11 +390,11 @@
if (name.size() == 2)
{
String nodeId = name.getLastElementAsString();
- String nodeName = "" /* = conn.getNodeName(nodeId)*/;
-
+ String nodeName = conn.getItemName(nodeId);
+
if (nodeName != null)
{
- exists = true;
+ exists = true;
}
else
{
@@ -414,10 +404,10 @@
// /$NODES/<NODE_ID>/<SUB_NODE_NAME>
else if (name.size() == 3)
{
- QPathEntry childNodeName = QPathEntry.parse(name.getLastElementAsString());
+ String childNodeName = name.getLastElementAsString();
String parentId = (String)name.get(1);
- String nodeId = "" /* = conn.getIdentifier(parentId, childNodeName)*/;
+ String nodeId = conn.getItemIdentifier(parentId, childNodeName);
if (nodeId != null)
{
exists = true;
@@ -439,11 +429,11 @@
if (name.size() == 2)
{
String propertyId = name.getLastElementAsString();
- String propertyName = "" /* = conn.getPropertyName(nodeId)*/;
-
+ String propertyName = conn.getItemName(propertyId);
+
if (propertyName != null)
{
- exists = true;
+ exists = true;
}
else
{
@@ -494,25 +484,16 @@
// /$NODES/<NODE_ID>
if (name.size() == 2)
{
- JDBCStorageConnection conn = (JDBCStorageConnection) dataContainer.openConnection();
+ JDBCStorageConnection conn = (JDBCStorageConnection)dataContainer.openConnection();
try
{
String nodeId = (String)name.get(1);
- NodeData parentData = (NodeData)conn.getItemData(nodeId);
- if (parentData != null)
+ childs = new LinkedHashSet<String>();
+
+ for (String nodeName : conn.getChildNodeNames(nodeId))
{
- childs = new LinkedHashSet<String>();
- // TODO get child nodes by parent Id, we need only id and name
- for (NodeData node : conn.getChildNodesData(parentData))
- {
- childs.add(node.getQPath().getEntries()[node.getQPath().getEntries().length - 1].getAsString(true));
- }
+ childs.add(nodeName);
}
- else
- {
- // TODO by JBC API we can just retur null, but it will not be normal for this loader contract
- throw new JDBCCacheLoaderException("FATAL Parent not found " + nodeId + " '" + name + "'");
- }
}
finally
{
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java 2009-11-18 11:54:25 UTC (rev 748)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java 2009-11-18 12:08:01 UTC (rev 749)
@@ -136,6 +136,16 @@
* FIND_PROPERTIES_IDNAME_BY_PARENTID.
*/
protected String FIND_PROPERTIES_IDNAME_BY_PARENTID;
+
+ /**
+ * FIND_ITEM_IDENTIFIER.
+ */
+ protected String FIND_ITEM_IDENTIFIER;
+
+ /**
+ * FIND_ITEM_NAME.
+ */
+ protected String FIND_ITEM_NAME;
/**
* INSERT_NODE.
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java 2009-11-18 11:54:25 UTC (rev 748)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java 2009-11-18 12:08:01 UTC (rev 749)
@@ -1957,7 +1957,7 @@
* @throws RepositoryException
* if some exception occured
* @throws IllegalStateException
- * if connection is closed
+ * if connection closed
*/
public void deleteProperty(String identifier) throws RepositoryException, UnsupportedOperationException,
InvalidItemStateException, IllegalStateException
@@ -1997,10 +1997,62 @@
}
}
+ /**
+ * Find Item ID in database.
+ *
+ * @param parentId parent Node id
+ * @param name Item name
+ * @return String with ID
+ * @throws RepositoryException if database error occurs
+ * @throws IllegalStateException if connection closed
+ */
public String getItemIdentifier(String parentId, String name) throws RepositoryException, IllegalStateException
{
+ checkIfOpened();
+
+ try
+ {
+ ResultSet item = findItemIdentifier(getInternalId(parentId), name);
+ if (item.next())
+ {
+ return item.getString(COLUMN_ID);
+ }
+ }
+ catch (SQLException e)
+ {
+ throw new RepositoryException(e);
+ }
+
+ return null;
+ }
- return null; // TODO
+ /**
+ * Find Item name in database.
+ *
+ * @param propertyId String
+ * @return String with name
+ * @throws RepositoryException if database error occurs
+ * @throws IllegalStateException if connection closed
+ */
+ public String getItemName(String propertyId) throws RepositoryException, IllegalStateException
+ {
+
+ checkIfOpened();
+
+ try
+ {
+ ResultSet item = findItemName(getInternalId(propertyId));
+ if (item.next())
+ {
+ return item.getString(COLUMN_NAME);
+ }
+ }
+ catch (SQLException e)
+ {
+ throw new RepositoryException(e);
+ }
+
+ return null;
}
/**
@@ -2009,7 +2061,7 @@
* @param parentId parent Node id.
* @return List of PropertyDataInfo
* @throws RepositoryException if error
- * @throws IllegalStateException if the parent in illegal state
+ * @throws IllegalStateException if connection closed
*/
public List<PropertyDataInfo> getChildProperties(String parentId) throws RepositoryException, IllegalStateException
{
@@ -2134,4 +2186,11 @@
@Deprecated
protected abstract ResultSet findValueByPropertyIdOrderNumber(String cid, int orderNumb) throws SQLException;
+
+ // JBC related
+
+ protected abstract ResultSet findItemIdentifier(String parentCid, String name) throws SQLException;
+
+ protected abstract ResultSet findItemName(String cid) throws SQLException;
+
}
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java 2009-11-18 11:54:25 UTC (rev 748)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java 2009-11-18 12:08:01 UTC (rev 749)
@@ -79,9 +79,13 @@
protected PreparedStatement findNodesByParentId;
protected PreparedStatement findPropertiesByParentId;
-
+
protected PreparedStatement findPropertiesIdNameByParentId;
+ protected PreparedStatement findItemIdentifier;
+
+ protected PreparedStatement findItemName;
+
protected PreparedStatement insertNode;
protected PreparedStatement insertProperty;
@@ -189,8 +193,12 @@
FIND_NODES_BY_PARENTID = "select * from JCR_MITEM" + " where I_CLASS=1 and PARENT_ID=?" + " order by N_ORDER_NUM";
FIND_PROPERTIES_BY_PARENTID = "select * from JCR_MITEM" + " where I_CLASS=2 and PARENT_ID=?" + " order by ID";
+
+ FIND_PROPERTIES_IDNAME_BY_PARENTID = "select ID, NAME from JCR_MITEM" + " where I_CLASS=2 and PARENT_ID=?";
- FIND_PROPERTIES_IDNAME_BY_PARENTID = "select ID, NAME from JCR_MITEM" + " where I_CLASS=2 and PARENT_ID=?";
+ FIND_ITEM_IDENTIFIER = "select ID from JCR_MITEM" + " where PARENT_ID=? and NAME=?";
+
+ FIND_ITEM_NAME = "select NAME from JCR_MITEM" + " where ID=?";
INSERT_NODE =
"insert into JCR_MITEM(ID, PARENT_ID, NAME, VERSION, I_CLASS, I_INDEX, N_ORDER_NUM) VALUES(?,?,?,?,"
@@ -564,4 +572,35 @@
findValuesStorageDescriptorsByPropertyId.setString(1, cid);
return findValuesStorageDescriptorsByPropertyId.executeQuery();
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected ResultSet findItemIdentifier(String parentCid, String name) throws SQLException
+ {
+ if (findItemIdentifier == null)
+ findItemIdentifier = dbConnection.prepareStatement(FIND_ITEM_IDENTIFIER);
+ else
+ findItemIdentifier.clearParameters();
+
+ findItemIdentifier.setString(1, parentCid);
+ findItemIdentifier.setString(2, name);
+ return findItemIdentifier.executeQuery();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected ResultSet findItemName(String cid) throws SQLException
+ {
+ if (findItemName == null)
+ findItemName = dbConnection.prepareStatement(FIND_ITEM_NAME);
+ else
+ findItemName.clearParameters();
+
+ findItemName.setString(1, cid);
+ return findItemName.executeQuery();
+ }
}
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java 2009-11-18 11:54:25 UTC (rev 748)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java 2009-11-18 12:08:01 UTC (rev 749)
@@ -76,9 +76,13 @@
protected PreparedStatement findNodesByParentId;
protected PreparedStatement findPropertiesByParentId;
-
+
protected PreparedStatement findPropertiesIdNameByParentId;
+ protected PreparedStatement findItemIdentifier;
+
+ protected PreparedStatement findItemName;
+
protected PreparedStatement insertItem;
protected PreparedStatement insertNode;
@@ -201,6 +205,10 @@
FIND_PROPERTIES_IDNAME_BY_PARENTID =
"select ID, NAME from JCR_SITEM" + " where I_CLASS=2 and CONTAINER_NAME=? and PARENT_ID=?";
+ FIND_ITEM_IDENTIFIER = "select ID from JCR_SITEM" + " where CONTAINER_NAME=? and PARENT_ID=? and NAME=?";
+
+ FIND_ITEM_NAME = "select NAME from JCR_SITEM" + " where ID=?";
+
INSERT_NODE =
"insert into JCR_SITEM(ID, PARENT_ID, NAME, CONTAINER_NAME, VERSION, I_CLASS, I_INDEX, N_ORDER_NUM) VALUES(?,?,?,?,?,"
+ I_CLASS_NODE + ",?,?)";
@@ -355,7 +363,7 @@
findPropertiesByParentId.setString(2, parentCid);
return findPropertiesByParentId.executeQuery();
}
-
+
/**
* {@inheritDoc}
*/
@@ -583,4 +591,36 @@
renameNode.setString(6, getInternalId(data.getIdentifier()));
return renameNode.executeUpdate();
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected ResultSet findItemIdentifier(String parentCid, String name) throws SQLException
+ {
+ if (findItemIdentifier == null)
+ findItemIdentifier = dbConnection.prepareStatement(FIND_ITEM_IDENTIFIER);
+ else
+ findItemIdentifier.clearParameters();
+
+ findItemIdentifier.setString(1, containerName);
+ findItemIdentifier.setString(2, parentCid);
+ findItemIdentifier.setString(3, name);
+ return findItemIdentifier.executeQuery();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected ResultSet findItemName(String cid) throws SQLException
+ {
+ if (findItemName == null)
+ findItemName = dbConnection.prepareStatement(FIND_ITEM_NAME);
+ else
+ findItemName.clearParameters();
+
+ findItemName.setString(1, cid);
+ return findItemName.executeQuery();
+ }
}
Modified: jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/JDBCStorageConnectionTest.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/JDBCStorageConnectionTest.java 2009-11-18 11:54:25 UTC (rev 748)
+++ jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/JDBCStorageConnectionTest.java 2009-11-18 12:08:01 UTC (rev 749)
@@ -289,7 +289,7 @@
connection.deleteNode(troot.getIdentifier());
connection.commit();
- //check
+ // check
assertNull(dataManager.getItemData(troot.getIdentifier()));
assertNull(dataManager.getItemData(pt.getIdentifier()));
}
16 years, 8 months