You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by an...@apache.org on 2008/12/30 16:30:11 UTC
svn commit: r730153 - in /lenya/trunk/src:
impl/java/org/apache/lenya/cms/repository/SharedItemStoreImpl.java
java/org/apache/lenya/cms/repository/SharedItemStore.java
modules/sitetree/java/src/org/apache/lenya/cms/site/tree2/SiteTreeFactory.java
Author: andreas
Date: Tue Dec 30 07:30:11 2008
New Revision: 730153
URL: http://svn.apache.org/viewvc?rev=730153&view=rev
Log:
Use separate session for SharedItemStore. This way it can be avoided that a client object (e.g., DelegatingSiteTree) contains items from various identity maps when the SharedItemStore has been re-set in the meantime.
Modified:
lenya/trunk/src/impl/java/org/apache/lenya/cms/repository/SharedItemStoreImpl.java
lenya/trunk/src/java/org/apache/lenya/cms/repository/SharedItemStore.java
lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/cms/site/tree2/SiteTreeFactory.java
Modified: lenya/trunk/src/impl/java/org/apache/lenya/cms/repository/SharedItemStoreImpl.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/impl/java/org/apache/lenya/cms/repository/SharedItemStoreImpl.java?rev=730153&r1=730152&r2=730153&view=diff
==============================================================================
--- lenya/trunk/src/impl/java/org/apache/lenya/cms/repository/SharedItemStoreImpl.java (original)
+++ lenya/trunk/src/impl/java/org/apache/lenya/cms/repository/SharedItemStoreImpl.java Tue Dec 30 07:30:11 2008
@@ -18,12 +18,13 @@
package org.apache.lenya.cms.repository;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.avalon.framework.service.Serviceable;
import org.apache.avalon.framework.thread.ThreadSafe;
import org.apache.lenya.ac.Identity;
import org.apache.lenya.cms.observation.RepositoryEvent;
import org.apache.lenya.cms.observation.RepositoryListener;
-import org.apache.lenya.transaction.IdentityMap;
-import org.apache.lenya.transaction.IdentityMapImpl;
import org.apache.lenya.transaction.Lock;
import org.apache.lenya.transaction.Lockable;
import org.apache.lenya.transaction.TransactionException;
@@ -32,15 +33,20 @@
/**
* Shared item store implementation.
*/
-public class SharedItemStoreImpl extends AbstractLogEnabled implements SharedItemStore, ThreadSafe {
+public class SharedItemStoreImpl extends AbstractLogEnabled implements SharedItemStore, ThreadSafe, Serviceable {
- private IdentityMap map;
+ private Session session;
+ private ServiceManager manager;
- protected synchronized IdentityMap getIdentityMap() {
- if (this.map == null) {
- this.map = new IdentityMapImpl(getLogger());
+ public synchronized Session getSession() {
+ if (this.session == null) {
+ try {
+ this.session = RepositoryUtil.createSession(this.manager, new Identity(getLogger()), false);
+ } catch (RepositoryException e) {
+ throw new RuntimeException(e);
+ }
}
- return this.map;
+ return this.session;
}
public void addListener(RepositoryListener listener) throws RepositoryException {
@@ -61,8 +67,7 @@
public RepositoryItem getRepositoryItem(RepositoryItemFactory factory, String key)
throws RepositoryException {
- RepositoryItemFactoryWrapper wrapper = new RepositoryItemFactoryWrapper(factory, this);
- return (RepositoryItem) getIdentityMap().get(wrapper, key);
+ return (RepositoryItem) getSession().getRepositoryItem(factory, key);
}
public boolean isListenerRegistered(RepositoryListener listener) {
@@ -106,11 +111,18 @@
}
public synchronized void clear() {
- this.map = null;
+ this.session = null;
}
public String getId() {
return getClass().getName();
}
+
+ public void addListener(SharedItemStoreListener listener) {
+ }
+
+ public void service(ServiceManager manager) throws ServiceException {
+ this.manager = manager;
+ }
}
Modified: lenya/trunk/src/java/org/apache/lenya/cms/repository/SharedItemStore.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/repository/SharedItemStore.java?rev=730153&r1=730152&r2=730153&view=diff
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/repository/SharedItemStore.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/repository/SharedItemStore.java Tue Dec 30 07:30:11 2008
@@ -17,6 +17,8 @@
*/
package org.apache.lenya.cms.repository;
+import org.apache.lenya.transaction.IdentityMap;
+
/**
* Store for read-only items which are shared by all sessions for performance reasons.
*/
@@ -31,5 +33,7 @@
* Clears the store when a session has been committed.
*/
void clear();
+
+ Session getSession();
}
Modified: lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/cms/site/tree2/SiteTreeFactory.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/cms/site/tree2/SiteTreeFactory.java?rev=730153&r1=730152&r2=730153&view=diff
==============================================================================
--- lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/cms/site/tree2/SiteTreeFactory.java (original)
+++ lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/cms/site/tree2/SiteTreeFactory.java Tue Dec 30 07:30:11 2008
@@ -56,28 +56,24 @@
String publicationId = snippets[0];
String areaName = snippets[1];
SiteTree tree;
+ SharedItemStore store = null;
try {
DocumentFactory factory = DocumentUtil.createDocumentFactory(this.manager, session);
Publication publication = factory.getPublication(publicationId);
- Area area = publication.getArea(areaName);
-
- if (session.isModifiable() || session instanceof SharedItemStore) {
+ Area area = publication.getArea(areaName);
+ store = (SharedItemStore) this.manager.lookup(SharedItemStore.ROLE);
+
+ if (session.isModifiable() || session == store.getSession()) {
tree = new SiteTreeImpl(this.manager, area, getLogger());
- }
- else {
- SharedItemStore store = null;
- try {
- store = (SharedItemStore) this.manager.lookup(SharedItemStore.ROLE);
- tree = new DelegatingSiteTree(this.manager, area, this, store, key);
- }
- finally {
- if (store != null) {
- this.manager.release(store);
- }
- }
+ } else {
+ tree = new DelegatingSiteTree(this.manager, area, this, store, key);
}
} catch (Exception e) {
throw new RepositoryException(e);
+ } finally {
+ if (store != null) {
+ this.manager.release(store);
+ }
}
return tree;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org