/* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public License (LGPL), version 2.1 or later. * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.test.cache.infinispan; import java.util.HashMap; import java.util.Map; import java.util.Properties; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cache.infinispan.InfinispanRegionFactory; import org.hibernate.cache.infinispan.collection.CollectionRegionImpl; import org.hibernate.cache.infinispan.entity.EntityRegionImpl; import org.hibernate.cache.spi.CacheDataDescription; import org.hibernate.test.cache.infinispan.util.CacheTestUtil; /** * Defines the environment for a node. * * @author Steve Ebersole */ public class NodeEnvironment { private final StandardServiceRegistryBuilder ssrb; private final Properties properties; private StandardServiceRegistry serviceRegistry; private InfinispanRegionFactory regionFactory; private Map<String, EntityRegionImpl> entityRegionMap; private Map<String, CollectionRegionImpl> collectionRegionMap; public NodeEnvironment(StandardServiceRegistryBuilder ssrb) { this.ssrb = ssrb; properties = CacheTestUtil.toProperties( ssrb.getSettings() ); } public StandardServiceRegistry getServiceRegistry() { return serviceRegistry; } public EntityRegionImpl getEntityRegion(String name, CacheDataDescription cacheDataDescription) { if (entityRegionMap == null) { entityRegionMap = new HashMap<String, EntityRegionImpl>(); return buildAndStoreEntityRegion(name, cacheDataDescription); } EntityRegionImpl region = entityRegionMap.get(name); if (region == null) { region = buildAndStoreEntityRegion(name, cacheDataDescription); } return region; } private EntityRegionImpl buildAndStoreEntityRegion(String name, CacheDataDescription cacheDataDescription) { EntityRegionImpl region = (EntityRegionImpl) regionFactory.buildEntityRegion( name, properties, cacheDataDescription ); entityRegionMap.put(name, region); return region; } public CollectionRegionImpl getCollectionRegion(String name, CacheDataDescription cacheDataDescription) { if (collectionRegionMap == null) { collectionRegionMap = new HashMap<String, CollectionRegionImpl>(); return buildAndStoreCollectionRegion(name, cacheDataDescription); } CollectionRegionImpl region = collectionRegionMap.get(name); if (region == null) { region = buildAndStoreCollectionRegion(name, cacheDataDescription); collectionRegionMap.put(name, region); } return region; } private CollectionRegionImpl buildAndStoreCollectionRegion(String name, CacheDataDescription cacheDataDescription) { CollectionRegionImpl region; region = (CollectionRegionImpl) regionFactory.buildCollectionRegion( name, properties, cacheDataDescription ); return region; } public void prepare() throws Exception { serviceRegistry = ssrb.build(); regionFactory = CacheTestUtil.startRegionFactory( serviceRegistry ); } public void release() throws Exception { try { if (entityRegionMap != null) { for (EntityRegionImpl region : entityRegionMap.values()) { try { region.getCache().stop(); } catch (Exception e) { // Ignore... } } entityRegionMap.clear(); } if (collectionRegionMap != null) { for (CollectionRegionImpl reg : collectionRegionMap.values()) { try { reg.getCache().stop(); } catch (Exception e) { // Ignore... } } collectionRegionMap.clear(); } } finally { try { if (regionFactory != null) { // Currently the RegionFactory is shutdown by its registration // with the CacheTestSetup from CacheTestUtil when built regionFactory.stop(); } } finally { if (serviceRegistry != null) { StandardServiceRegistryBuilder.destroy( serviceRegistry ); } } } } }