incubator-directmemory-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Benoit Perroud <ben...@noisette.ch>
Subject Re: svn commit: r1293567 - in /incubator/directmemory/trunk: directmemory-cache/src/main/java/org/apache/directmemory/memory/ integrations/ehcache/ integrations/ehcache/src/ integrations/ehcache/src/main/ integrations/ehcache/src/main/java/ integrati
Date Sat, 25 Feb 2012 14:21:12 GMT
Hi Simone,

Thanks also for this remark. I didn't think far enough, sorry.

But, EHCache is done in a way that net.sf.ehcache.Cache is looking for
the class net.sf.ehcache.store.offheap.OffHeapStore
(http://ehcache.org/xref/net/sf/ehcache/Cache.html#1181).
To be able to use the buildin off-heap features of EHCache we need to
have a class of that name. (Note here : the test cache is configured
to have 30 objects in on-heap memory, and then to overflow to
off-heap).

I will open a ticket at EHCache, but not sure they will add the
feature to change this class name, as we will enter in competition
with their BigMemory...

Thanks anyway bringing this out, keep us in touch with legal answer. I
will post reply here once I have posted on EHCache.

Benoit.




2012/2/25 Simone Tripodi <simonetripodi@apache.org>:
> Salut Benoit,
>
> thanks for taking care of applying patches, anyway I am personally -1
> on including net.sf.* packages in the ASF codebase - and not sure it
> is allowed or not.
>
> IMHO it should me renamed to org.apache.directmemory.* - I'll contact
> anyway our legals office to understand better the policy,
>
> Is someone here already aware of the related details?
> TIA,
>
> -Simo
>
> http://people.apache.org/~simonetripodi/
> http://simonetripodi.livejournal.com/
> http://twitter.com/simonetripodi
> http://www.99soft.org/
>
>
>
> On Sat, Feb 25, 2012 at 11:16 AM,  <bperroud@apache.org> wrote:
>> Author: bperroud
>> Date: Sat Feb 25 10:16:25 2012
>> New Revision: 1293567
>>
>> URL: http://svn.apache.org/viewvc?rev=1293567&view=rev
>> Log:
>> DIRECTMEMORY-60 : EHCache Integration, thanks to Michael Andre Pearce for his contribution
>>
>> Added:
>>    incubator/directmemory/trunk/integrations/ehcache/
>>    incubator/directmemory/trunk/integrations/ehcache/pom.xml
>>    incubator/directmemory/trunk/integrations/ehcache/src/
>>    incubator/directmemory/trunk/integrations/ehcache/src/main/
>>    incubator/directmemory/trunk/integrations/ehcache/src/main/java/
>>    incubator/directmemory/trunk/integrations/ehcache/src/main/java/net/
>>    incubator/directmemory/trunk/integrations/ehcache/src/main/java/net/sf/
>>    incubator/directmemory/trunk/integrations/ehcache/src/main/java/net/sf/ehcache/
>>    incubator/directmemory/trunk/integrations/ehcache/src/main/java/net/sf/ehcache/store/
>>    incubator/directmemory/trunk/integrations/ehcache/src/main/java/net/sf/ehcache/store/offheap/
>>    incubator/directmemory/trunk/integrations/ehcache/src/main/java/net/sf/ehcache/store/offheap/OffHeapStore.java
>>    incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/
>>    incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/
>>    incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/
>>    incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/
>>    incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/DirectMemoryCache.java
>>    incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/DirectMemoryStore.java
>>    incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/NotifyingDirectMemoryStore.java
>>    incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/memory/
>>    incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceWithAllocationPolicyEhcacheImpl.java
>>    incubator/directmemory/trunk/integrations/ehcache/src/test/
>>    incubator/directmemory/trunk/integrations/ehcache/src/test/java/
>>    incubator/directmemory/trunk/integrations/ehcache/src/test/java/org/
>>    incubator/directmemory/trunk/integrations/ehcache/src/test/java/org/apache/
>>    incubator/directmemory/trunk/integrations/ehcache/src/test/java/org/apache/directmemory/
>>    incubator/directmemory/trunk/integrations/ehcache/src/test/java/org/apache/directmemory/ehcache/
>>    incubator/directmemory/trunk/integrations/ehcache/src/test/java/org/apache/directmemory/ehcache/EHCacheTest.java
>>    incubator/directmemory/trunk/integrations/ehcache/src/test/resources/
>>    incubator/directmemory/trunk/integrations/ehcache/src/test/resources/ehcache.xml
>>    incubator/directmemory/trunk/integrations/ehcache/src/test/resources/logback-test.xml
>> Modified:
>>    incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceWithAllocationPolicyImpl.java
>>
>> Modified: incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceWithAllocationPolicyImpl.java
>> URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceWithAllocationPolicyImpl.java?rev=1293567&r1=1293566&r2=1293567&view=diff
>> ==============================================================================
>> --- incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceWithAllocationPolicyImpl.java (original)
>> +++ incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceWithAllocationPolicyImpl.java Sat Feb 25 10:16:25 2012
>> @@ -1,5 +1,7 @@
>>  package org.apache.directmemory.memory;
>>
>> +import java.nio.BufferOverflowException;
>> +
>>  /*
>>  * Licensed to the Apache Software Foundation (ASF) under one
>>  * or more contributor license agreements.  See the NOTICE file
>> @@ -28,6 +30,8 @@ public class MemoryManagerServiceWithAll
>>     extends MemoryManagerServiceImpl<V>
>>  {
>>
>> +    protected boolean returnNullWhenFull = true;
>> +
>>     protected AllocationPolicy<V> allocationPolicy;
>>
>>     @Override
>> @@ -59,7 +63,14 @@ public class MemoryManagerServiceWithAll
>>             buffer = allocationPolicy.getActiveBuffer( buffer, allocationNumber );
>>             if ( buffer == null )
>>             {
>> -                return null;
>> +                if (returnNullWhenFull)
>> +                {
>> +                    return null;
>> +                }
>> +                else
>> +                {
>> +                    throw new BufferOverflowException();
>> +                }
>>             }
>>             p = buffer.store( payload, expiresIn );
>>             allocationNumber++;
>> @@ -86,7 +97,14 @@ public class MemoryManagerServiceWithAll
>>             buffer = allocationPolicy.getActiveBuffer( buffer, allocationNumber );
>>             if ( buffer == null )
>>             {
>> -                return null;
>> +                if (returnNullWhenFull)
>> +                {
>> +                    return null;
>> +                }
>> +                else
>> +                {
>> +                    throw new BufferOverflowException();
>> +                }
>>             }
>>             p = buffer.allocate( type, size, expiresIn, expires );
>>             allocationNumber++;
>>
>> Added: incubator/directmemory/trunk/integrations/ehcache/pom.xml
>> URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/integrations/ehcache/pom.xml?rev=1293567&view=auto
>> ==============================================================================
>> --- incubator/directmemory/trunk/integrations/ehcache/pom.xml (added)
>> +++ incubator/directmemory/trunk/integrations/ehcache/pom.xml Sat Feb 25 10:16:25 2012
>> @@ -0,0 +1,93 @@
>> +<?xml version="1.0" encoding="UTF-8"?>
>> +<!-- 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. -->
>> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> +       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
>> +
>> +       <modelVersion>4.0.0</modelVersion>
>> +
>> +       <parent>
>> +               <groupId>org.apache.directmemory</groupId>
>> +               <artifactId>directmemory-parent</artifactId>
>> +               <version>0.6.0-SNAPSHOT</version>
>> +               <relativePath>../../</relativePath>
>> +       </parent>
>> +
>> +       <artifactId>directmemory-ehcache</artifactId>
>> +       <name>Apache DirectMemory :: Integrations :: EHCache</name>
>> +       <description>EHCache CacheStore Implementation to integrate DirectMemory Cache as OffHeapStore.
>> +       </description>
>> +
>> +       <build>
>> +               <plugins>
>> +                       <plugin>
>> +                               <groupId>org.apache.maven.plugins</groupId>
>> +                               <artifactId>maven-clean-plugin</artifactId>
>> +                               <configuration>
>> +                                       <filesets>
>> +                                               <fileset>
>> +                                                       <directory>logs</directory>
>> +                                                       <followSymlinks>false</followSymlinks>
>> +                                               </fileset>
>> +                                       </filesets>
>> +                               </configuration>
>> +                       </plugin>
>> +
>> +                       <plugin>
>> +                               <groupId>org.apache.maven.plugins</groupId>
>> +                               <artifactId>maven-surefire-plugin</artifactId>
>> +                               <version>2.9</version>
>> +                               <configuration>
>> +                                       <argLine>-Xmx512m -Xms512m -XX:MaxDirectMemorySize=512m</argLine>
>> +                               </configuration>
>> +                       </plugin>
>> +               </plugins>
>> +       </build>
>> +
>> +       <dependencies>
>> +               <!-- DirectMemory Dependency -->
>> +               <dependency>
>> +                       <groupId>${project.groupId}</groupId>
>> +                       <artifactId>directmemory-cache</artifactId>
>> +                       <version>${project.version}</version>
>> +               </dependency>
>> +
>> +               <!-- EHCache Dependency -->
>> +               <dependency>
>> +                       <groupId>net.sf.ehcache</groupId>
>> +                       <artifactId>ehcache-core</artifactId>
>> +                       <version>2.5.0</version>
>> +               </dependency>
>> +
>> +               <!-- Testing Dependencies -->
>> +               <dependency>
>> +                       <groupId>junit</groupId>
>> +                       <artifactId>junit</artifactId>
>> +                       <scope>test</scope>
>> +               </dependency>
>> +       </dependencies>
>> +
>> +       <repositories>
>> +               <repository>
>> +                       <url>http://repo.fusesource.com/maven2</url>
>> +                       <id>fusesource</id>
>> +               </repository>
>> +               <repository>
>> +                       <id>sonatype-nexus-public</id>
>> +                       <name>SonaType public snapshots and releases repository</name>
>> +                       <url>https://oss.sonatype.org/content/groups/public</url>
>> +                       <releases>
>> +                               <enabled>false</enabled>
>> +                       </releases>
>> +                       <snapshots>
>> +                               <enabled>true</enabled>
>> +                       </snapshots>
>> +               </repository>
>> +
>> +       </repositories>
>> +
>> +</project>
>>
>> Added: incubator/directmemory/trunk/integrations/ehcache/src/main/java/net/sf/ehcache/store/offheap/OffHeapStore.java
>> URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/integrations/ehcache/src/main/java/net/sf/ehcache/store/offheap/OffHeapStore.java?rev=1293567&view=auto
>> ==============================================================================
>> --- incubator/directmemory/trunk/integrations/ehcache/src/main/java/net/sf/ehcache/store/offheap/OffHeapStore.java (added)
>> +++ incubator/directmemory/trunk/integrations/ehcache/src/main/java/net/sf/ehcache/store/offheap/OffHeapStore.java Sat Feb 25 10:16:25 2012
>> @@ -0,0 +1,120 @@
>> +package net.sf.ehcache.store.offheap;
>> +
>> +/*
>> + * 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.
>> + */
>> +
>> +import java.util.WeakHashMap;
>> +
>> +import net.sf.ehcache.CacheManager;
>> +import net.sf.ehcache.Ehcache;
>> +import net.sf.ehcache.config.CacheConfiguration;
>> +import net.sf.ehcache.pool.Pool;
>> +import net.sf.ehcache.pool.PoolableStore;
>> +import net.sf.ehcache.pool.impl.UnboundedPool;
>> +import net.sf.ehcache.store.FrontEndCacheTier;
>> +import net.sf.ehcache.store.MemoryStore;
>> +import net.sf.ehcache.store.Store;
>> +import net.sf.ehcache.store.disk.DiskStore;
>> +
>> +import org.apache.directmemory.ehcache.DirectMemoryStore;
>> +
>> +/**
>> + * This class is simply a connector class into the EHCache for OffHeap.
>> + * @author michaelandrepearce
>> + *
>> + */
>> +public class OffHeapStore
>> +{
>> +
>> +    private static final WeakHashMap<CacheManager, Pool<PoolableStore>> OFFHEAP_POOLS = new WeakHashMap<CacheManager, Pool<PoolableStore>>();
>> +
>> +    public static Store create( Ehcache cache, String diskStorePath, Pool<PoolableStore> onHeapPool,
>> +                                Pool<PoolableStore> onDiskPool )
>> +    {
>> +
>> +        CacheConfiguration config = cache.getCacheConfiguration();
>> +        MemoryStore memoryStore = createMemoryStore( cache, onHeapPool );
>> +        DirectMemoryStore offHeapStore = createOffHeapStore( cache, true );
>> +        DiskStore diskStore = null; //need to implement disk backing to store.
>> +        Store store = null;
>> +        if ( diskStore == null )
>> +        {
>> +            store = new FrontEndCacheTier<MemoryStore, DirectMemoryStore>( memoryStore, offHeapStore,
>> +                                                                           config.getCopyStrategy(),
>> +                                                                           config.isCopyOnWrite(),
>> +                                                                           config.isCopyOnRead() )
>> +            {
>> +
>> +                @Override
>> +                public Object getMBean()
>> +                {
>> +                    return this.authority.getMBean();
>> +                }
>> +
>> +            };
>> +        }
>> +        return store;
>> +    }
>> +
>> +    /**
>> +     * Creates a persitent-to-disk store for the given cache, using the given
>> +     * disk path. Heap and disk usage are not tracked by the returned store.
>> +     *
>> +     * @param cache
>> +     *            cache that fronts this store
>> +     * @param diskStorePath
>> +     *            disk path to store data in
>> +     * @return a fully initialized store
>> +     */
>> +    public static Store create( Ehcache cache, String diskStorePath )
>> +    {
>> +        return create( cache, diskStorePath, new UnboundedPool(), new UnboundedPool() );
>> +    }
>> +
>> +    private static MemoryStore createMemoryStore( Ehcache cache, Pool<PoolableStore> onHeapPool )
>> +    {
>> +        return MemoryStore.create( cache, onHeapPool );
>> +    }
>> +
>> +    private static DirectMemoryStore createOffHeapStore( Ehcache cache, boolean lowestTier )
>> +    {
>> +        Pool<PoolableStore> offHeapPool = null;
>> +        if ( cache.getCacheConfiguration().getMaxBytesLocalOffHeap() == 0L )
>> +        {
>> +            offHeapPool = getOffHeapPool( cache.getCacheManager() );
>> +        }
>> +        return new DirectMemoryStore( cache, offHeapPool );
>> +    }
>> +
>> +    private static Pool<PoolableStore> getOffHeapPool( CacheManager manager )
>> +    {
>> +        Pool<PoolableStore> pool;
>> +        synchronized ( OFFHEAP_POOLS )
>> +        {
>> +            pool = OFFHEAP_POOLS.get( manager );
>> +            if ( pool == null )
>> +            {
>> +                pool = new UnboundedPool();
>> +                OFFHEAP_POOLS.put( manager, pool );
>> +            }
>> +        }
>> +        return pool;
>> +    }
>> +
>> +}
>>
>> Added: incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/DirectMemoryCache.java
>> URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/DirectMemoryCache.java?rev=1293567&view=auto
>> ==============================================================================
>> --- incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/DirectMemoryCache.java (added)
>> +++ incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/DirectMemoryCache.java Sat Feb 25 10:16:25 2012
>> @@ -0,0 +1,188 @@
>> +package org.apache.directmemory.ehcache;
>> +
>> +/*
>> + * 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.
>> + */
>> +
>> +import java.util.Set;
>> +
>> +import org.apache.directmemory.cache.CacheService;
>> +import org.apache.directmemory.cache.CacheServiceImpl;
>> +import org.apache.directmemory.memory.MemoryManagerService;
>> +import org.apache.directmemory.memory.MemoryManagerServiceWithAllocationPolicyEhcacheImpl;
>> +import org.apache.directmemory.memory.OffHeapMemoryBuffer;
>> +import org.apache.directmemory.memory.Pointer;
>> +import org.apache.directmemory.memory.RoundRobinAllocationPolicy;
>> +import org.apache.directmemory.serialization.Serializer;
>> +
>> +/**
>> + *
>> + * @author michaelandrepearce
>> + *
>> + * @param <K>
>> + * @param <V>
>> + */
>> +public class DirectMemoryCache<K, V>
>> +{
>> +
>> +    private MemoryManagerService<V> memoryManager = new MemoryManagerServiceWithAllocationPolicyEhcacheImpl<V>(
>> +                                                                                                                new RoundRobinAllocationPolicy<V>() );
>> +
>> +    private CacheServiceImpl<K, V> cacheService = new CacheServiceImpl<K, V>( memoryManager );
>> +
>> +    public DirectMemoryCache( int numberOfBuffers, int size, int initialCapacity, int concurrencyLevel )
>> +    {
>> +        cacheService.init( numberOfBuffers, size, initialCapacity, concurrencyLevel );
>> +    }
>> +
>> +    public DirectMemoryCache( int numberOfBuffers, int size )
>> +    {
>> +        this( numberOfBuffers, size, CacheService.DEFAULT_INITIAL_CAPACITY, CacheService.DEFAULT_CONCURRENCY_LEVEL );
>> +    }
>> +
>> +    public void scheduleDisposalEvery( long l )
>> +    {
>> +        cacheService.scheduleDisposalEvery( l );
>> +    }
>> +
>> +    public Pointer<V> putByteArray( K key, byte[] payload, int expiresIn )
>> +    {
>> +        return cacheService.putByteArray( key, payload, expiresIn );
>> +    }
>> +
>> +    public Pointer<V> putByteArray( K key, byte[] payload )
>> +    {
>> +        return cacheService.putByteArray( key, payload );
>> +    }
>> +
>> +    public Pointer<V> put( K key, V value )
>> +    {
>> +        return cacheService.put( key, value );
>> +    }
>> +
>> +    public Pointer<V> put( K key, V value, int expiresIn )
>> +    {
>> +        return cacheService.put( key, value, expiresIn );
>> +    }
>> +
>> +    public byte[] retrieveByteArray( K key )
>> +    {
>> +        return cacheService.retrieveByteArray( key );
>> +    }
>> +
>> +    public V retrieve( K key )
>> +    {
>> +        return cacheService.retrieve( key );
>> +    }
>> +
>> +    public Pointer<V> getPointer( K key )
>> +    {
>> +        return cacheService.getPointer( key );
>> +    }
>> +
>> +    public void free( K key )
>> +    {
>> +        cacheService.free( key );
>> +    }
>> +
>> +    public void free( Pointer<V> pointer )
>> +    {
>> +        cacheService.free( pointer );
>> +    }
>> +
>> +    public void collectExpired()
>> +    {
>> +        cacheService.collectExpired();
>> +    }
>> +
>> +    public void collectLFU()
>> +    {
>> +        cacheService.collectLFU();
>> +    }
>> +
>> +    public void collectAll()
>> +    {
>> +        cacheService.collectAll();
>> +    }
>> +
>> +    public void clear()
>> +    {
>> +        cacheService.clear();
>> +    }
>> +
>> +    public long size()
>> +    {
>> +        return cacheService.entries();
>> +    }
>> +
>> +    public long sizeInBytes()
>> +    {
>> +        long i = 0;
>> +        for ( OffHeapMemoryBuffer<V> buffer : getMemoryManager().getBuffers() )
>> +        {
>> +            i += buffer.used();
>> +        }
>> +        return i;
>> +    }
>> +
>> +    public long capacityInBytes()
>> +    {
>> +        long i = 0;
>> +        for ( OffHeapMemoryBuffer<V> buffer : getMemoryManager().getBuffers() )
>> +        {
>> +            i += buffer.capacity();
>> +        }
>> +        return i;
>> +    }
>> +
>> +    public void dump( OffHeapMemoryBuffer<V> mem )
>> +    {
>> +        cacheService.dump( mem );
>> +    }
>> +
>> +    public void dump()
>> +    {
>> +        cacheService.dump();
>> +    }
>> +
>> +    public Serializer getSerializer()
>> +    {
>> +        return cacheService.getSerializer();
>> +    }
>> +
>> +    public MemoryManagerService<V> getMemoryManager()
>> +    {
>> +        return cacheService.getMemoryManager();
>> +    }
>> +
>> +    public Pointer<V> allocate( K key, Class<V> type, int size )
>> +    {
>> +        return cacheService.allocate( key, type, size );
>> +    }
>> +
>> +    public Set<K> getKeys()
>> +    {
>> +        return cacheService.getMap().keySet();
>> +    }
>> +
>> +    public boolean containsKey( K key )
>> +    {
>> +        return cacheService.getMap().containsKey( key );
>> +    }
>> +
>> +}
>>
>> Added: incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/DirectMemoryStore.java
>> URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/DirectMemoryStore.java?rev=1293567&view=auto
>> ==============================================================================
>> --- incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/DirectMemoryStore.java (added)
>> +++ incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/DirectMemoryStore.java Sat Feb 25 10:16:25 2012
>> @@ -0,0 +1,607 @@
>> +package org.apache.directmemory.ehcache;
>> +
>> +/*
>> + * 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.
>> + */
>> +
>> +import static java.lang.String.format;
>> +
>> +import java.nio.BufferOverflowException;
>> +import java.util.ArrayList;
>> +import java.util.List;
>> +import java.util.concurrent.locks.Lock;
>> +import java.util.concurrent.locks.ReentrantLock;
>> +
>> +import net.sf.ehcache.Cache;
>> +import net.sf.ehcache.CacheEntry;
>> +import net.sf.ehcache.CacheException;
>> +import net.sf.ehcache.Ehcache;
>> +import net.sf.ehcache.Element;
>> +import net.sf.ehcache.Status;
>> +import net.sf.ehcache.pool.Pool;
>> +import net.sf.ehcache.pool.PoolableStore;
>> +import net.sf.ehcache.store.AbstractStore;
>> +import net.sf.ehcache.store.ElementValueComparator;
>> +import net.sf.ehcache.store.Policy;
>> +import net.sf.ehcache.store.TierableStore;
>> +import net.sf.ehcache.store.disk.StoreUpdateException;
>> +import net.sf.ehcache.writer.CacheWriterManager;
>> +
>> +import org.apache.directmemory.cache.CacheServiceImpl;
>> +import org.apache.directmemory.measures.Ram;
>> +import org.apache.directmemory.memory.OffHeapMemoryBuffer;
>> +import org.apache.directmemory.memory.Pointer;
>> +import org.slf4j.Logger;
>> +import org.slf4j.LoggerFactory;
>> +
>> +public class DirectMemoryStore
>> +    extends AbstractStore
>> +    implements TierableStore, PoolableStore
>> +{
>> +
>> +    private static Logger logger = LoggerFactory.getLogger( CacheServiceImpl.class );
>> +
>> +    public static final int DEFAULT_NUMBER_BYTE_BUFFERS = 64;
>> +
>> +    public static final int DEFAULT_BUFFER_SIZE = Ram.Mb( 40 );
>> +
>> +    private List<ReentrantLock> bufferLocks;
>> +
>> +    DirectMemoryCache<Object, Element> directMemoryCache;
>> +
>> +    public DirectMemoryStore( Ehcache cache, Pool<PoolableStore> offHeapPool )
>> +    {
>> +        this( cache, offHeapPool, false );
>> +    }
>> +
>> +    public DirectMemoryStore( Ehcache cache, Pool<PoolableStore> offHeapPool, boolean doNotifications )
>> +    {
>> +        long offHeapSizeBytes;
>> +        if ( cache == null || cache.getCacheConfiguration() == null )
>> +        {
>> +            offHeapSizeBytes = Ram.Mb( 64 );
>> +        }
>> +        else
>> +        {
>> +            offHeapSizeBytes = cache.getCacheConfiguration().getMaxMemoryOffHeapInBytes();
>> +        }
>> +        init( offHeapSizeBytes );
>> +    }
>> +
>> +    public DirectMemoryStore( long offHeapSizeBytes )
>> +    {
>> +        init( offHeapSizeBytes );
>> +    }
>> +
>> +    private void init( long offHeapSizeBytes )
>> +    {
>> +        logger.info( "   ___   __  __ _   _                 ____  _                 " );
>> +        logger.info( "  / _ \\ / _|/ _| | | | ___  __ _ _ __/ ___|| |_ ___  _ __ ___ " );
>> +        logger.info( " | | | | |_| |_| |_| |/ _ \\/ _` | '_ \\___ \\| __/ _ \\| '__/ _ \\" );
>> +        logger.info( " | |_| |  _|  _|  _  |  __/ (_| | |_) |__) | || (_) | | |  __/" );
>> +        logger.info( "  \\___/|_| |_| |_| |_|\\___|\\__,_| .__/____/ \\__\\___/|_|  \\___|" );
>> +        logger.info( "                                |_|                           " );
>> +
>> +        logger.info( "default buffer size = " + DEFAULT_BUFFER_SIZE );
>> +        logger.info( "off heap size = " + offHeapSizeBytes );
>> +        int numberOfBuffers = (int) ( offHeapSizeBytes / DEFAULT_BUFFER_SIZE );
>> +        numberOfBuffers = DEFAULT_NUMBER_BYTE_BUFFERS;
>> +        logger.info( "no of buffers = " + numberOfBuffers );
>> +
>> +        this.bufferLocks = new ArrayList<ReentrantLock>( numberOfBuffers );
>> +        for ( int i = 0; i < numberOfBuffers; i++ )
>> +        {
>> +            this.bufferLocks.add( new ReentrantLock() );
>> +        }
>> +
>> +        directMemoryCache = new DirectMemoryCache<Object, Element>( numberOfBuffers,
>> +                                                                    (int) ( offHeapSizeBytes / numberOfBuffers ) );
>> +    }
>> +
>> +    @Override
>> +    public void unpinAll()
>> +    {
>> +        //no operation
>> +
>> +    }
>> +
>> +    @Override
>> +    public boolean isPinned( Object key )
>> +    {
>> +        return false;
>> +    }
>> +
>> +    @Override
>> +    public void setPinned( Object key, boolean pinned )
>> +    {
>> +        //no operation
>> +
>> +    }
>> +
>> +    @Override
>> +    public boolean put( Element element )
>> +        throws CacheException
>> +    {
>> +        Pointer<Element> pointer = null;
>> +        try
>> +        {
>> +            pointer = directMemoryCache.put( element.getObjectKey(), element );
>> +        }
>> +        catch ( BufferOverflowException boe )
>> +        {
>> +            dump();
>> +            throw new CacheException( "DirectMemory OffHeap Memory Exceeded", boe );
>> +        }
>> +        return null == pointer ? false : true;
>> +    }
>> +
>> +    @Override
>> +    public boolean putWithWriter( Element element, CacheWriterManager writerManager )
>> +        throws CacheException
>> +    {
>> +        boolean newPut = put( element );
>> +        if ( writerManager != null )
>> +        {
>> +            try
>> +            {
>> +                writerManager.put( element );
>> +            }
>> +            catch ( RuntimeException e )
>> +            {
>> +                throw new StoreUpdateException( e, !newPut );
>> +            }
>> +        }
>> +        return newPut;
>> +    }
>> +
>> +    @Override
>> +    public Element get( Object key )
>> +    {
>> +        return directMemoryCache.retrieve( key );
>> +    }
>> +
>> +    @Override
>> +    public Element getQuiet( Object key )
>> +    {
>> +        return get( key );
>> +    }
>> +
>> +    @Override
>> +    public List<Object> getKeys()
>> +    {
>> +        return new ArrayList<Object>( directMemoryCache.getKeys() );
>> +    }
>> +
>> +    @Override
>> +    public Element remove( Object key )
>> +    {
>> +        Element element = get( key );
>> +        directMemoryCache.free( key );
>> +        return element;
>> +
>> +    }
>> +
>> +    @Override
>> +    public Element removeWithWriter( Object key, CacheWriterManager writerManager )
>> +        throws CacheException
>> +    {
>> +        Element removed = remove( key );
>> +        if ( writerManager != null )
>> +        {
>> +            writerManager.remove( new CacheEntry( key, removed ) );
>> +        }
>> +        return removed;
>> +    }
>> +
>> +    @Override
>> +    public void removeAll()
>> +        throws CacheException
>> +    {
>> +        directMemoryCache.clear();
>> +    }
>> +
>> +    @Override
>> +    public Element putIfAbsent( Element element )
>> +        throws NullPointerException
>> +    {
>> +        Element returnElement = get( element.getObjectKey() );
>> +        if ( null == returnElement )
>> +        {
>> +            put( element );
>> +            returnElement = element;
>> +        }
>> +        return returnElement;
>> +    }
>> +
>> +    @Override
>> +    public Element removeElement( Element element, ElementValueComparator comparator )
>> +        throws NullPointerException
>> +    {
>> +        if ( element == null || element.getObjectKey() == null )
>> +        {
>> +            return null;
>> +        }
>> +        Pointer<Element> pointer = directMemoryCache.getPointer( element.getObjectKey() );
>> +        if ( pointer == null )
>> +        {
>> +            return null;
>> +        }
>> +
>> +        Lock lock = bufferLocks.get( pointer.bufferNumber );
>> +        lock.lock();
>> +        try
>> +        {
>> +            Element toRemove = directMemoryCache.retrieve( element.getObjectKey() );
>> +            if ( comparator.equals( element, toRemove ) )
>> +            {
>> +                directMemoryCache.free( element.getObjectKey() );
>> +                return toRemove;
>> +            }
>> +            else
>> +            {
>> +                return null;
>> +            }
>> +        }
>> +        finally
>> +        {
>> +            lock.unlock();
>> +        }
>> +    }
>> +
>> +    @Override
>> +    public boolean replace( Element old, Element element, ElementValueComparator comparator )
>> +        throws NullPointerException, IllegalArgumentException
>> +    {
>> +        if ( element == null || element.getObjectKey() == null )
>> +        {
>> +            return false;
>> +        }
>> +        Pointer<Element> pointer = directMemoryCache.getPointer( element.getObjectKey() );
>> +        if ( pointer == null )
>> +        {
>> +            return false;
>> +        }
>> +
>> +        Lock lock = bufferLocks.get( pointer.bufferNumber );
>> +        lock.lock();
>> +        try
>> +        {
>> +            Element toUpdate = directMemoryCache.retrieve( element.getObjectKey() );
>> +            if ( comparator.equals( old, toUpdate ) )
>> +            {
>> +                directMemoryCache.put( element.getObjectKey(), element );
>> +                return true;
>> +            }
>> +            else
>> +            {
>> +                return false;
>> +            }
>> +        }
>> +        catch ( BufferOverflowException boe )
>> +        {
>> +            dump();
>> +            throw new CacheException( "DirectMemory OffHeap Memory Exceeded", boe );
>> +        }
>> +        finally
>> +        {
>> +            lock.unlock();
>> +        }
>> +    }
>> +
>> +    @Override
>> +    public Element replace( Element element )
>> +        throws NullPointerException
>> +    {
>> +        if ( element == null || element.getObjectKey() == null )
>> +        {
>> +            return null;
>> +        }
>> +        Pointer<Element> pointer = directMemoryCache.getPointer( element.getObjectKey() );
>> +        if ( pointer == null )
>> +        {
>> +            return null;
>> +        }
>> +
>> +        Lock lock = bufferLocks.get( pointer.bufferNumber );
>> +        lock.lock();
>> +        try
>> +        {
>> +            Element toUpdate = directMemoryCache.retrieve( element.getObjectKey() );
>> +            if ( null != toUpdate )
>> +            {
>> +                directMemoryCache.put( element.getObjectKey(), element );
>> +                return toUpdate;
>> +            }
>> +            else
>> +            {
>> +                return null;
>> +            }
>> +        }
>> +        catch ( BufferOverflowException boe )
>> +        {
>> +            dump();
>> +            throw new CacheException( "DirectMemory OffHeap Memory Exceeded", boe );
>> +        }
>> +        finally
>> +        {
>> +            lock.unlock();
>> +        }
>> +    }
>> +
>> +    @Override
>> +    public synchronized void dispose()
>> +    {
>> +        flush();
>> +    }
>> +
>> +    @Override
>> +    public int getSize()
>> +    {
>> +        return getOffHeapSize();
>> +    }
>> +
>> +    @Override
>> +    public int getInMemorySize()
>> +    {
>> +        //no operation
>> +        return 0;
>> +    }
>> +
>> +    @Override
>> +    public int getOffHeapSize()
>> +    {
>> +        long size = directMemoryCache.size();
>> +        if ( size > Integer.MAX_VALUE )
>> +        {
>> +            return Integer.MAX_VALUE;
>> +        }
>> +        else
>> +        {
>> +            return (int) size;
>> +        }
>> +    }
>> +
>> +    @Override
>> +    public int getOnDiskSize()
>> +    {
>> +        //no operation
>> +        return 0;
>> +    }
>> +
>> +    @Override
>> +    public int getTerracottaClusteredSize()
>> +    {
>> +        //no operation
>> +        return 0;
>> +    }
>> +
>> +    @Override
>> +    public long getInMemorySizeInBytes()
>> +    {
>> +        //no operation
>> +        return 0;
>> +    }
>> +
>> +    @Override
>> +    public long getOffHeapSizeInBytes()
>> +    {
>> +        return directMemoryCache.sizeInBytes();
>> +    }
>> +
>> +    @Override
>> +    public long getOnDiskSizeInBytes()
>> +    {
>> +        //no operation
>> +        return 0;
>> +    }
>> +
>> +    @Override
>> +    public Status getStatus()
>> +    {
>> +        //no operation
>> +        return null;
>> +    }
>> +
>> +    @Override
>> +    public boolean containsKey( Object key )
>> +    {
>> +        return containsKeyOffHeap( key );
>> +    }
>> +
>> +    @Override
>> +    public boolean containsKeyOnDisk( Object key )
>> +    {
>> +        //no operation
>> +        return false;
>> +    }
>> +
>> +    @Override
>> +    public boolean containsKeyOffHeap( Object key )
>> +    {
>> +        return directMemoryCache.containsKey( key );
>> +    }
>> +
>> +    @Override
>> +    public boolean containsKeyInMemory( Object key )
>> +    {
>> +        //no operation
>> +        return false;
>> +    }
>> +
>> +    @Override
>> +    public void expireElements()
>> +    {
>> +        //no operation
>> +
>> +    }
>> +
>> +    @Override
>> +    public void flush()
>> +    {
>> +        directMemoryCache.clear();
>> +    }
>> +
>> +    @Override
>> +    public boolean bufferFull()
>> +    {
>> +        //never backs up/ no buffer used.
>> +        return false;
>> +    }
>> +
>> +    @Override
>> +    public Policy getInMemoryEvictionPolicy()
>> +    {
>> +        //no operation
>> +        return null;
>> +    }
>> +
>> +    @Override
>> +    public void setInMemoryEvictionPolicy( Policy policy )
>> +    {
>> +        //no operation
>> +
>> +    }
>> +
>> +    @Override
>> +    public Object getInternalContext()
>> +    {
>> +        //no operation
>> +        return null;
>> +    }
>> +
>> +    @Override
>> +    public Object getMBean()
>> +    {
>> +        //no operation
>> +        return null;
>> +    }
>> +
>> +    @Override
>> +    public boolean evictFromOnHeap( int count, long size )
>> +    {
>> +        //no operation
>> +        return false;
>> +    }
>> +
>> +    @Override
>> +    public boolean evictFromOnDisk( int count, long size )
>> +    {
>> +        //no operation
>> +        return false;
>> +    }
>> +
>> +    @Override
>> +    public float getApproximateDiskHitRate()
>> +    {
>> +        //no operation
>> +        return 0;
>> +    }
>> +
>> +    @Override
>> +    public float getApproximateDiskMissRate()
>> +    {
>> +        //no operation
>> +        return 0;
>> +    }
>> +
>> +    @Override
>> +    public long getApproximateDiskCountSize()
>> +    {
>> +        //no operation
>> +        return 0;
>> +    }
>> +
>> +    @Override
>> +    public long getApproximateDiskByteSize()
>> +    {
>> +        //no operation
>> +        return 0;
>> +    }
>> +
>> +    @Override
>> +    public float getApproximateHeapHitRate()
>> +    {
>> +        //no operation
>> +        return 0;
>> +    }
>> +
>> +    @Override
>> +    public float getApproximateHeapMissRate()
>> +    {
>> +        //no operation
>> +        return 0;
>> +    }
>> +
>> +    @Override
>> +    public long getApproximateHeapCountSize()
>> +    {
>> +        //no operation
>> +        return 0;
>> +    }
>> +
>> +    @Override
>> +    public long getApproximateHeapByteSize()
>> +    {
>> +        //no operation
>> +        return 0;
>> +    }
>> +
>> +    @Override
>> +    public void fill( Element e )
>> +    {
>> +        put( e );
>> +    }
>> +
>> +    @Override
>> +    public boolean removeIfTierNotPinned( Object key )
>> +    {
>> +        //no operation
>> +        return false;
>> +    }
>> +
>> +    @Override
>> +    public void removeNoReturn( Object key )
>> +    {
>> +        //no operation
>> +
>> +    }
>> +
>> +    public void dump()
>> +    {
>> +        directMemoryCache.dump();
>> +    }
>> +
>> +    public void dumpTotal()
>> +    {
>> +        long capacity = 0;
>> +        long used = 0;
>> +        for ( OffHeapMemoryBuffer<Element> buffer : directMemoryCache.getMemoryManager().getBuffers() )
>> +        {
>> +            capacity += buffer.capacity();
>> +            used += buffer.used();
>> +        }
>> +        logger.info( "***Totals***************************************" );
>> +        logger.info( format( "off-heap - # buffers: \t%1d", directMemoryCache.getMemoryManager().getBuffers().size() ) );
>> +        logger.info( format( "off-heap - allocated: \t%1s", Ram.inMb( capacity ) ) );
>> +        logger.info( format( "off-heap - used:      \t%1s", Ram.inMb( used ) ) );
>> +        logger.info( format( "heap     - max: \t%1s", Ram.inMb( Runtime.getRuntime().maxMemory() ) ) );
>> +        logger.info( format( "heap     - allocated: \t%1s", Ram.inMb( Runtime.getRuntime().totalMemory() ) ) );
>> +        logger.info( format( "heap     - free : \t%1s", Ram.inMb( Runtime.getRuntime().freeMemory() ) ) );
>> +        logger.info( "************************************************" );
>> +    }
>> +}
>>
>> Added: incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/NotifyingDirectMemoryStore.java
>> URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/NotifyingDirectMemoryStore.java?rev=1293567&view=auto
>> ==============================================================================
>> --- incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/NotifyingDirectMemoryStore.java (added)
>> +++ incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/NotifyingDirectMemoryStore.java Sat Feb 25 10:16:25 2012
>> @@ -0,0 +1,71 @@
>> +package org.apache.directmemory.ehcache;
>> +
>> +/*
>> + * 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.
>> + */
>> +
>> +import net.sf.ehcache.Ehcache;
>> +import net.sf.ehcache.Element;
>> +import net.sf.ehcache.pool.Pool;
>> +import net.sf.ehcache.pool.PoolableStore;
>> +
>> +public class NotifyingDirectMemoryStore
>> +    extends DirectMemoryStore
>> +{
>> +
>> +    private final Ehcache cache;
>> +
>> +    private NotifyingDirectMemoryStore( Ehcache cache, Pool<PoolableStore> pool )
>> +    {
>> +        super( cache, pool, true );
>> +        this.cache = cache;
>> +    }
>> +
>> +    public static NotifyingDirectMemoryStore create( Ehcache cache, Pool<PoolableStore> pool )
>> +    {
>> +        NotifyingDirectMemoryStore store = new NotifyingDirectMemoryStore( cache, pool );
>> +        return store;
>> +    }
>> +
>> +    protected boolean evict( Element element )
>> +    {
>> +        Element remove = remove( element.getObjectKey() );
>> +        if ( remove != null )
>> +        {
>> +            this.cache.getCacheEventNotificationService().notifyElementEvicted( element, false );
>> +        }
>> +        return remove != null;
>> +    }
>> +
>> +    protected void notifyDirectEviction( Element element )
>> +    {
>> +        this.cache.getCacheEventNotificationService().notifyElementEvicted( element, false );
>> +    }
>> +
>> +    public void expireElements()
>> +    {
>> +        for ( Object key : this.getKeys() )
>> +        {
>> +            //expire element check if it is expired, if it is expired remove from cache and return element
>> +            //.iskeyvalid()
>> +            Element element = remove( key );
>> +            if ( element != null )
>> +                this.cache.getCacheEventNotificationService().notifyElementExpiry( element, false );
>> +        }
>> +    }
>> +}
>>
>> Added: incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceWithAllocationPolicyEhcacheImpl.java
>> URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceWithAllocationPolicyEhcacheImpl.java?rev=1293567&view=auto
>> ==============================================================================
>> --- incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceWithAllocationPolicyEhcacheImpl.java (added)
>> +++ incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceWithAllocationPolicyEhcacheImpl.java Sat Feb 25 10:16:25 2012
>> @@ -0,0 +1,39 @@
>> +package org.apache.directmemory.memory;
>> +
>> +/*
>> + * 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.
>> + */
>> +
>> +/**
>> + * Extends {@link MemoryManagerServiceWithAllocationPolicyImpl}
>> + * to force {@link AllocationPolicy} in constructor and set
>> + * the behavior to thrown an exception when the buffers are full.
>> + *
>> + */
>> +public class MemoryManagerServiceWithAllocationPolicyEhcacheImpl<V>
>> +    extends MemoryManagerServiceWithAllocationPolicyImpl<V>
>> +{
>> +
>> +    public MemoryManagerServiceWithAllocationPolicyEhcacheImpl( AllocationPolicy<V> allocationPolicy )
>> +    {
>> +        super();
>> +        this.setAllocationPolicy( allocationPolicy );
>> +        this.returnNullWhenFull = false;
>> +    }
>> +
>> +}
>>
>> Added: incubator/directmemory/trunk/integrations/ehcache/src/test/java/org/apache/directmemory/ehcache/EHCacheTest.java
>> URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/integrations/ehcache/src/test/java/org/apache/directmemory/ehcache/EHCacheTest.java?rev=1293567&view=auto
>> ==============================================================================
>> --- incubator/directmemory/trunk/integrations/ehcache/src/test/java/org/apache/directmemory/ehcache/EHCacheTest.java (added)
>> +++ incubator/directmemory/trunk/integrations/ehcache/src/test/java/org/apache/directmemory/ehcache/EHCacheTest.java Sat Feb 25 10:16:25 2012
>> @@ -0,0 +1,103 @@
>> +package org.apache.directmemory.ehcache;
>> +
>> +/*
>> + * 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.
>> + */
>> +
>> +import java.io.IOException;
>> +
>> +import net.sf.ehcache.CacheException;
>> +import net.sf.ehcache.CacheManager;
>> +import net.sf.ehcache.Ehcache;
>> +import net.sf.ehcache.Element;
>> +
>> +import org.junit.Assert;
>> +import org.junit.Test;
>> +
>> +public class EHCacheTest
>> +{
>> +
>> +    @Test
>> +    public void testPutRetreive()
>> +    {
>> +        CacheManager cacheManager = CacheManager.getInstance();
>> +        Ehcache ehcache = cacheManager.getEhcache( "testCache" );
>> +
>> +        ehcache.put( new Element( "testKey", "testValue" ) );
>> +        stats( ehcache );
>> +        Assert.assertEquals( "testValue", ehcache.get( "testKey" ).getObjectValue() );
>> +    }
>> +
>> +    @Test
>> +    public void testSizing()
>> +    {
>> +        CacheManager cacheManager = CacheManager.getInstance();
>> +        Ehcache ehcache = cacheManager.getEhcache( "testCache" );
>> +        for ( int i = 0; i < 30000; i++ )
>> +        {
>> +            if ( ( i % 1000 ) == 0 )
>> +            {
>> +                System.out.println( "heatbeat " + i );
>> +                stats( ehcache );
>> +            }
>> +            ehcache.put( new Element( i, new byte[1024] ) );
>> +        }
>> +        stats( ehcache );
>> +        Assert.assertTrue( true );
>> +    }
>> +
>> +    @Test
>> +    public void testOffHeapExceedMemory()
>> +        throws IOException
>> +    {
>> +        CacheManager cacheManager = CacheManager.getInstance();
>> +        Ehcache ehcache = cacheManager.getEhcache( "testCache" );
>> +        Element element = null;
>> +        try
>> +        {
>> +            for ( int i = 0; i < 3000000; i++ )
>> +            {
>> +                if ( ( i % 1000 ) == 0 )
>> +                {
>> +                    System.out.println( "heatbeat " + i );
>> +                    stats( ehcache );
>> +                }
>> +                element = new Element( i, new byte[1024] );
>> +                ehcache.put( element );
>> +            }
>> +            Assert.fail( "CacheException expected for DirectMemory OffHeap Memory Exceeded" );
>> +        }
>> +        catch ( CacheException e )
>> +        {
>> +            stats( ehcache );
>> +            Assert.assertTrue( "CacheException expected for DirectMemory OffHeap Memory Exceeded", true );
>> +        }
>> +
>> +    }
>> +
>> +    private void stats( Ehcache ehcache )
>> +    {
>> +        System.out.println( "OnHeapSize=" + ehcache.calculateInMemorySize() + ", OnHeapElements="
>> +            + ehcache.getMemoryStoreSize() );
>> +        System.out.println( "OffHeapSize=" + ehcache.calculateOffHeapSize() + ", OffHeapElements="
>> +            + ehcache.getOffHeapStoreSize() );
>> +        System.out.println( "DiskStoreSize=" + ehcache.calculateOnDiskSize() + ", DiskStoreElements="
>> +            + ehcache.getDiskStoreSize() );
>> +    }
>> +
>> +}
>>
>> Added: incubator/directmemory/trunk/integrations/ehcache/src/test/resources/ehcache.xml
>> URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/integrations/ehcache/src/test/resources/ehcache.xml?rev=1293567&view=auto
>> ==============================================================================
>> --- incubator/directmemory/trunk/integrations/ehcache/src/test/resources/ehcache.xml (added)
>> +++ incubator/directmemory/trunk/integrations/ehcache/src/test/resources/ehcache.xml Sat Feb 25 10:16:25 2012
>> @@ -0,0 +1,31 @@
>> +<!--
>> +  ~ 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.
>> +  -->
>> +<ehcache>
>> +
>> +    <defaultCache />
>> +
>> +    <cache name="testCache"
>> +      eternal="false"
>> +      diskPersistent="false"
>> +      overflowToOffHeap="true"
>> +      maxElementsInMemory="30"
>> +      maxBytesLocalOffHeap="100M"
>> +    />
>> +
>> +</ehcache>
>> \ No newline at end of file
>>
>> Added: incubator/directmemory/trunk/integrations/ehcache/src/test/resources/logback-test.xml
>> URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/integrations/ehcache/src/test/resources/logback-test.xml?rev=1293567&view=auto
>> ==============================================================================
>> --- incubator/directmemory/trunk/integrations/ehcache/src/test/resources/logback-test.xml (added)
>> +++ incubator/directmemory/trunk/integrations/ehcache/src/test/resources/logback-test.xml Sat Feb 25 10:16:25 2012
>> @@ -0,0 +1,54 @@
>> +<?xml version="1.0" encoding="UTF-8"?>
>> +<!--
>> +  ~ 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.
>> +  -->
>> +<configuration>
>> +
>> +  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
>> +    <encoder>
>> +      <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %method - %msg%n</Pattern>
>> +    </encoder>
>> +  </appender>
>> +
>> +
>> +  <logger name="org.apache.directmemory.serialization" level="warn">
>> +    <appender-ref ref="STDOUT"/>
>> +
>> +  </logger>
>> +
>> +  <logger name="org.apache.directmemory.measures" level="info">
>> +    <appender-ref ref="STDOUT"/>
>> +
>> +  </logger>
>> +
>> +  <logger name="org.apache.directmemory.memory" level="info">
>> +    <appender-ref ref="STDOUT"/>
>> +
>> +  </logger>
>> +
>> +  <logger name="org.apache.directmemory.cache" level="info">
>> +    <appender-ref ref="STDOUT"/>
>> +
>> +  </logger>
>> +
>> +  <logger name="org.apache.directmemory.ehcache" level="info">
>> +    <appender-ref ref="STDOUT"/>
>> +
>> +  </logger>
>> +
>> +</configuration>
>> \ No newline at end of file
>>
>>



-- 
sent from my Nokia 3210

Mime
View raw message