You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jm...@apache.org on 2006/11/27 05:16:11 UTC

svn commit: r479508 - in /incubator/tuscany/java/sca: kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/ kernel/core/src/main/java/org/apache/tuscany/core/services/s...

Author: jmarino
Date: Sun Nov 26 20:16:10 2006
New Revision: 479508

URL: http://svn.apache.org/viewvc?view=rev&rev=479508
Log:
support expiration propagation from conversation invocation to store

Added:
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxAgeTestCase.java   (with props)
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxIdleTimeTestCase.java   (with props)
Modified:
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerImpl.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilder.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/store/memory/MemoryStore.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerPersistenceTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilderMetadataTestCase.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/AtomicComponentExtension.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/services/store/Store.java
    incubator/tuscany/java/sca/services/persistence/store.jdbc/src/main/java/org/apache/tuscany/service/persistence/store/jdbc/JDBCStore.java
    incubator/tuscany/java/sca/services/persistence/store.journal/src/main/java/org/apache/tuscany/persistence/store/journal/JournalStore.java

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerImpl.java?view=diff&rev=479508&r1=479507&r2=479508
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerImpl.java Sun Nov 26 20:16:10 2006
@@ -34,9 +34,6 @@
 import org.apache.tuscany.spi.services.store.StoreReadException;
 import org.apache.tuscany.spi.services.store.StoreWriteException;
 
-import org.apache.tuscany.core.component.event.ConversationEnd;
-import org.apache.tuscany.core.component.event.ConversationStart;
-
 /**
  * A scope context which manages atomic component instances keyed on a conversation id
  *
@@ -58,13 +55,6 @@
 
     public void onEvent(Event event) {
         checkInit();
-        if (event instanceof ConversationStart) {
-            Object key = ((ConversationStart) event).getId();
-            workContext.setIdentifier(Scope.CONVERSATION, key);
-        } else if (event instanceof ConversationEnd) {
-            Object key = ((ConversationEnd) event).getId();
-            workContext.clearIdentifier(key);
-        }
     }
 
     public synchronized void start() {
@@ -90,11 +80,16 @@
             workContext.setCurrentAtomicComponent(component);
             Object instance = nonDurableStore.readRecord(component, conversationId);
             if (instance != null) {
+                if (component.getMaxIdleTime() > 0) {
+                    // update expiration
+                    long expire = System.currentTimeMillis() + component.getMaxIdleTime();
+                    nonDurableStore.updateRecord(component, conversationId, instance, expire);
+                }
                 return instance;
             } else {
                 Object o = component.createInstance();
-                // FIXME support expirations
-                nonDurableStore.insertRecord(component, conversationId, o, Store.NEVER);
+                long expire = calculateExpiration(component);
+                nonDurableStore.insertRecord(component, conversationId, o, expire);
                 return o;
             }
         } catch (StoreReadException e) {
@@ -116,12 +111,19 @@
             workContext.setCurrentAtomicComponent(component);
             Object instance = nonDurableStore.readRecord(component, conversationId);
             if (instance != null) {
+                if (component.getMaxIdleTime() > 0) {
+                    // update expiration
+                    long expire = System.currentTimeMillis() + component.getMaxIdleTime();
+                    nonDurableStore.updateRecord(component, conversationId, instance, expire);
+                }
                 return instance;
             } else {
                 throw new TargetNotFoundException(component.getName());
             }
         } catch (StoreReadException e) {
             throw new TargetException(e);
+        } catch (StoreWriteException e) {
+            throw new TargetException(e);
         } finally {
             workContext.setCurrentAtomicComponent(null);
         }
@@ -169,5 +171,17 @@
             throw e;
         }
         return conversationId;
+    }
+
+    private long calculateExpiration(AtomicComponent component) {
+        if (component.getMaxAge() > 0) {
+            long now = System.currentTimeMillis();
+            return now + component.getMaxAge();
+        } else if (component.getMaxIdleTime() > 0) {
+            long now = System.currentTimeMillis();
+            return now + component.getMaxIdleTime();
+        } else {
+            return Store.DEFAULT_EXPIRATION_OFFSET;
+        }
     }
 }

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilder.java?view=diff&rev=479508&r1=479507&r2=479508
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilder.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilder.java Sun Nov 26 20:16:10 2006
@@ -80,9 +80,9 @@
         } else {
             configuration.setInitLevel(componentType.getInitLevel());
         }
-        if (componentType.getMaxAge() >= 0) {
+        if (componentType.getMaxAge() > 0) {
             configuration.setMaxAge(componentType.getMaxAge());
-        } else if (componentType.getMaxIdleTime() >= 0) {
+        } else if (componentType.getMaxIdleTime() > 0) {
             configuration.setMaxIdleTime(componentType.getMaxIdleTime());
         }
         Method initMethod = componentType.getInitMethod();

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/store/memory/MemoryStore.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/store/memory/MemoryStore.java?view=diff&rev=479508&r1=479507&r2=479508
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/store/memory/MemoryStore.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/store/memory/MemoryStore.java Sun Nov 26 20:16:10 2006
@@ -50,11 +50,28 @@
     private ScheduledExecutorService scheduler;
     private long reaperInterval = 300000;
     private StoreMonitor monitor;
+    private long defaultExpirationOffset = 600000; // 10 minutes
 
     public MemoryStore(@Monitor StoreMonitor monitor) {
         this.monitor = monitor;
         this.store = new ConcurrentHashMap<SCAObject, Map<String, Record>>();
         this.scheduler = Executors.newSingleThreadScheduledExecutor();
+    }
+
+    /**
+     * Returns the maximum default expiration offset for records in the store
+     * @return the maximum default expiration offset for records in the store
+     */
+    @Property
+    public long getExpirationOffset() {
+        return defaultExpirationOffset;
+    }
+
+    /**
+     * Sets the maximum default expiration offset for records in the store
+     */
+    public void setDefaultExpirationOffset(long defaultExpirationOffset) {
+        this.defaultExpirationOffset = defaultExpirationOffset;
     }
 
     /**

Added: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxAgeTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxAgeTestCase.java?view=auto&rev=479508
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxAgeTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxAgeTestCase.java Sun Nov 26 20:16:10 2006
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.tuscany.core.component.scope;
+
+import org.apache.tuscany.spi.component.ScopeContainer;
+import org.apache.tuscany.spi.component.WorkContext;
+import org.apache.tuscany.spi.component.AtomicComponent;
+import org.apache.tuscany.spi.component.SCAObject;
+import org.apache.tuscany.spi.services.store.Store;
+import org.apache.tuscany.spi.model.Scope;
+
+import junit.framework.TestCase;
+import org.easymock.EasyMock;
+import org.apache.tuscany.core.component.WorkContextImpl;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class ConversationalScopeContainerMaxAgeTestCase extends TestCase {
+
+    private ScopeContainer container;
+    private WorkContext context;
+    private Store store;
+    private AtomicComponent component;
+
+    public void testMaxAgeUpdate() {
+        context.setIdentifier(Scope.CONVERSATION, "12345");
+        container.getInstance(component);
+        EasyMock.verify(store);
+    }
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        ConversationalScopeContainerMaxAgeTestCase.Foo foo = new ConversationalScopeContainerMaxAgeTestCase.Foo();
+        context = new WorkContextImpl();
+        component = EasyMock.createMock(AtomicComponent.class);
+        EasyMock.expect(component.getName()).andReturn("foo").atLeastOnce();
+        EasyMock.expect(component.getMaxIdleTime()).andReturn(-1L).atLeastOnce();
+        EasyMock.expect(component.getMaxAge()).andReturn(600000L).atLeastOnce();
+        EasyMock.replay(component);
+        store = EasyMock.createMock(Store.class);
+        EasyMock.expect(store.readRecord(EasyMock.isA(SCAObject.class), EasyMock.isA(String.class))).andReturn(foo);
+        EasyMock.replay(store);
+        container = new ConversationalScopeContainerImpl(store, context);
+        container.start();
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        context.clearIdentifier(Scope.CONVERSATION);
+        container.stop();
+    }
+
+    private class Foo {
+
+    }
+
+}

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxAgeTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxAgeTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxIdleTimeTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxIdleTimeTestCase.java?view=auto&rev=479508
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxIdleTimeTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxIdleTimeTestCase.java Sun Nov 26 20:16:10 2006
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.tuscany.core.component.scope;
+
+import org.apache.tuscany.spi.component.AtomicComponent;
+import org.apache.tuscany.spi.component.SCAObject;
+import org.apache.tuscany.spi.component.ScopeContainer;
+import org.apache.tuscany.spi.component.WorkContext;
+import org.apache.tuscany.spi.model.Scope;
+import org.apache.tuscany.spi.services.store.Store;
+
+import junit.framework.TestCase;
+import org.apache.tuscany.core.component.WorkContextImpl;
+import org.easymock.EasyMock;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class ConversationalScopeContainerMaxIdleTimeTestCase extends TestCase {
+
+    private ScopeContainer container;
+    private WorkContext context;
+    private Store store;
+    private AtomicComponent component;
+
+    public void testMaxIdleTimeUpdate() {
+        context.setIdentifier(Scope.CONVERSATION, "12345");
+        container.getInstance(component);
+        EasyMock.verify(store);
+    }
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        Foo foo = new Foo();
+        context = new WorkContextImpl();
+        component = EasyMock.createMock(AtomicComponent.class);
+        EasyMock.expect(component.getName()).andReturn("foo").atLeastOnce();
+        EasyMock.expect(component.getMaxIdleTime()).andReturn(600000L).atLeastOnce();
+        EasyMock.replay(component);
+        store = EasyMock.createMock(Store.class);
+        EasyMock.expect(store.readRecord(EasyMock.isA(SCAObject.class), EasyMock.isA(String.class))).andReturn(foo);
+        store.updateRecord(EasyMock.isA(SCAObject.class),
+            EasyMock.isA(String.class),
+            EasyMock.eq(foo),
+            EasyMock.anyLong());
+        EasyMock.replay(store);
+        container = new ConversationalScopeContainerImpl(store, context);
+        container.start();
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        context.clearIdentifier(Scope.CONVERSATION);
+        container.stop();
+    }
+
+    private class Foo {
+
+    }
+
+}

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxIdleTimeTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxIdleTimeTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerPersistenceTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerPersistenceTestCase.java?view=diff&rev=479508&r1=479507&r2=479508
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerPersistenceTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerPersistenceTestCase.java Sun Nov 26 20:16:10 2006
@@ -49,6 +49,7 @@
         AtomicComponent component = EasyMock.createMock(AtomicComponent.class);
         component.addListener(EasyMock.eq(container));
         EasyMock.expect(component.createInstance()).andReturn(new Foo());
+        EasyMock.expect(component.getMaxAge()).andReturn(600000L).atLeastOnce();
         EasyMock.replay(component);
         container.register(component);
         assertTrue(container.getInstance(component) instanceof Foo);
@@ -61,6 +62,7 @@
         context.setIdentifier(Scope.CONVERSATION, id);
         AtomicComponent component = EasyMock.createMock(AtomicComponent.class);
         component.addListener(EasyMock.eq(container));
+        EasyMock.expect(component.getMaxIdleTime()).andReturn(-1L).atLeastOnce();
         EasyMock.replay(component);
         container.register(component);
         Foo foo = new Foo();
@@ -78,6 +80,7 @@
         context.setIdentifier(Scope.CONVERSATION, id);
         AtomicComponent component = EasyMock.createMock(AtomicComponent.class);
         component.addListener(EasyMock.eq(container));
+        EasyMock.expect(component.getMaxIdleTime()).andReturn(-1L).atLeastOnce();
         EasyMock.replay(component);
         container.register(component);
         Foo foo = new Foo();
@@ -93,6 +96,7 @@
         context.setIdentifier(Scope.CONVERSATION, id);
         AtomicComponent component = EasyMock.createMock(AtomicComponent.class);
         component.addListener(EasyMock.eq(container));
+        EasyMock.expect(component.getMaxIdleTime()).andReturn(-1L).atLeastOnce();
         EasyMock.expect(component.getName()).andReturn("foo").atLeastOnce();
         EasyMock.replay(component);
         container.register(component);
@@ -114,6 +118,8 @@
         context.setIdentifier(Scope.CONVERSATION, id);
         AtomicComponent component = EasyMock.createMock(AtomicComponent.class);
         component.addListener(EasyMock.eq(container));
+        EasyMock.expect(component.getMaxAge()).andReturn(600000L).atLeastOnce();
+        EasyMock.expect(component.getMaxIdleTime()).andReturn(-1L).atLeastOnce();
         EasyMock.expect(component.createInstance()).andReturn(new Foo());
         EasyMock.replay(component);
         container.register(component);
@@ -133,6 +139,7 @@
         context.setIdentifier(Scope.CONVERSATION, id);
         AtomicComponent component = EasyMock.createMock(AtomicComponent.class);
         EasyMock.expect(component.getName()).andReturn("foo").atLeastOnce();
+        EasyMock.expect(component.getMaxIdleTime()).andReturn(-1L).atLeastOnce();
         component.addListener(EasyMock.eq(container));
         EasyMock.replay(component);
         container.register(component);

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilderMetadataTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilderMetadataTestCase.java?view=diff&rev=479508&r1=479507&r2=479508
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilderMetadataTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilderMetadataTestCase.java Sun Nov 26 20:16:10 2006
@@ -56,6 +56,13 @@
         assertEquals(100, component.getMaxIdleTime());
     }
 
+    public void testNoMaxAgeNoMaxIdleTime() throws Exception {
+        JavaComponentBuilder builder = new JavaComponentBuilder();
+        JavaAtomicComponent component = (JavaAtomicComponent) builder.build(parent, definition, deploymentContext);
+        assertEquals(-1, component.getMaxAge());
+        assertEquals(-1, component.getMaxIdleTime());
+    }
+
     public void testScope() throws Exception {
         JavaComponentBuilder builder = new JavaComponentBuilder();
         JavaAtomicComponent component = (JavaAtomicComponent) builder.build(parent, definition, deploymentContext);

Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/AtomicComponentExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/AtomicComponentExtension.java?view=diff&rev=479508&r1=479507&r2=479508
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/AtomicComponentExtension.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/AtomicComponentExtension.java Sun Nov 26 20:16:10 2006
@@ -79,7 +79,7 @@
                                        long maxIdleTime,
                                        long maxAge) {
         super(name, parent);
-        assert !(maxIdleTime >= 0 && maxAge >= 0);
+        assert !(maxIdleTime > 0 && maxAge > 0);
         this.scopeContainer = scopeContainer;
         this.wireService = wireService;
         this.workContext = workContext;

Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/services/store/Store.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/services/store/Store.java?view=diff&rev=479508&r1=479507&r2=479508
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/services/store/Store.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/services/store/Store.java Sun Nov 26 20:16:10 2006
@@ -29,8 +29,11 @@
  */
 public interface Store {
 
+    /* Used to indicate an the default expiration offset for records for the store */
+    long DEFAULT_EXPIRATION_OFFSET = -1;
+
     /* Used to indicate an entry should not expire */
-    long NEVER = -1;
+    long NEVER = -2;
 
     /**
      * Adds the given record to the store. Implementations may choose different strategies for writing data such as

Modified: incubator/tuscany/java/sca/services/persistence/store.jdbc/src/main/java/org/apache/tuscany/service/persistence/store/jdbc/JDBCStore.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/persistence/store.jdbc/src/main/java/org/apache/tuscany/service/persistence/store/jdbc/JDBCStore.java?view=diff&rev=479508&r1=479507&r2=479508
==============================================================================
--- incubator/tuscany/java/sca/services/persistence/store.jdbc/src/main/java/org/apache/tuscany/service/persistence/store/jdbc/JDBCStore.java (original)
+++ incubator/tuscany/java/sca/services/persistence/store.jdbc/src/main/java/org/apache/tuscany/service/persistence/store/jdbc/JDBCStore.java Sun Nov 26 20:16:10 2006
@@ -58,6 +58,7 @@
     @SuppressWarnings({"FieldCanBeLocal"})
     private ScheduledExecutorService scheduler;
     private long reaperInterval = 300000;
+    private long defaultExpirationOffset = 600000; // 10 minutes
 
     //private
     public JDBCStore(@Resource(mappedName = "StoreDS") DataSource dataSource,
@@ -66,6 +67,22 @@
         this.dataSource = dataSource;
         this.converter = converter;
         this.monitor = monitor;
+    }
+
+    /**
+     * Returns the maximum default expiration offset for records in the store
+     * @return the maximum default expiration offset for records in the store
+     */
+    @Property
+    public long getExpirationOffset() {
+        return defaultExpirationOffset;
+    }
+
+    /**
+     * Sets the maximum default expiration offset for records in the store
+     */
+    public void setDefaultExpirationOffset(long defaultExpirationOffset) {
+        this.defaultExpirationOffset = defaultExpirationOffset;
     }
 
     /**

Modified: incubator/tuscany/java/sca/services/persistence/store.journal/src/main/java/org/apache/tuscany/persistence/store/journal/JournalStore.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/persistence/store.journal/src/main/java/org/apache/tuscany/persistence/store/journal/JournalStore.java?view=diff&rev=479508&r1=479507&r2=479508
==============================================================================
--- incubator/tuscany/java/sca/services/persistence/store.journal/src/main/java/org/apache/tuscany/persistence/store/journal/JournalStore.java (original)
+++ incubator/tuscany/java/sca/services/persistence/store.journal/src/main/java/org/apache/tuscany/persistence/store/journal/JournalStore.java Sun Nov 26 20:16:10 2006
@@ -93,7 +93,7 @@
     private ScheduledExecutorService scheduler;
     private StoreMonitor monitor;
     private Journal journal;
-
+    private long defaultExpirationOffset = 600000; // 10 minutes
     private long reaperInterval = 1000;
     private int blockSize = 4096;  // 4k standard for HOWL
 
@@ -140,6 +140,22 @@
 
     public int getBlockSize() {
         return blockSize;
+    }
+
+    /**
+     * Returns the maximum default expiration offset for records in the store
+     * @return the maximum default expiration offset for records in the store
+     */
+    @Property
+    public long getExpirationOffset() {
+        return defaultExpirationOffset;
+    }
+
+    /**
+     * Sets the maximum default expiration offset for records in the store
+     */
+    public void setDefaultExpirationOffset(long defaultExpirationOffset) {
+        this.defaultExpirationOffset = defaultExpirationOffset;
     }
 
     @Property



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org