Changeset 1341


Ignore:
Timestamp:
05/19/11 08:40:46 (13 years ago)
Author:
twagoo
Message:

Caching of components (not descriptions) in ComponentRegistryDbImpl?

Location:
ComponentRegistry/trunk/ComponentRegistry/src
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • ComponentRegistry/trunk/ComponentRegistry/src/main/java/clarin/cmdi/componentregistry/impl/database/CMDComponentSpecExpanderDbImpl.java

    r1335 r1341  
    1010public class CMDComponentSpecExpanderDbImpl extends CMDComponentSpecExpander {
    1111
     12    private ComponentRegistryDbImpl dbImplRegistry;
     13
    1214    public CMDComponentSpecExpanderDbImpl(ComponentRegistryDbImpl registry) {
    1315        super(registry);
     16        dbImplRegistry = registry;
    1417    }
    1518
     
    2629    @Override
    2730    protected CMDComponentSpec getUncachedComponent(String componentId) {
    28         return registry.getMDComponent(componentId);
     31        return dbImplRegistry.getUncachedMDComponent(componentId);
    2932    }
    3033
    3134    @Override
    3235    protected CMDComponentSpec getUncachedProfile(String profileId) {
    33         return registry.getMDProfile(profileId);
     36        return dbImplRegistry.getUncachedMDProfile(profileId);
    3437    }
    3538}
  • ComponentRegistry/trunk/ComponentRegistry/src/main/java/clarin/cmdi/componentregistry/impl/database/ComponentRegistryDbImpl.java

    r1340 r1341  
    2626import org.slf4j.LoggerFactory;
    2727import org.springframework.beans.factory.annotation.Autowired;
     28import org.springframework.beans.factory.annotation.Qualifier;
    2829import org.springframework.dao.DataAccessException;
    2930
     
    3334 * @author Twan Goosen <twan.goosen@mpi.nl>
    3435 */
    35 public class ComponentRegistryDbImpl extends ComponentRegistryImplBase implements ComponentRegistry  {
     36public class ComponentRegistryDbImpl extends ComponentRegistryImplBase implements ComponentRegistry {
    3637
    3738    private final static Logger LOG = LoggerFactory.getLogger(ComponentRegistryDbImpl.class);
     
    4344    @Autowired
    4445    Configuration configuration;
     46    @Autowired
     47    @Qualifier("componentsCache")
     48    CMDComponentSpecCache componentsCache;
     49    @Autowired
     50    @Qualifier("profilesCache")
     51    CMDComponentSpecCache profilesCache;
    4552
    4653    /**
     
    110117    @Override
    111118    public CMDComponentSpec getMDProfile(String id) {
    112         try {
    113             return getMDComponent(id, profileDescriptionDao);
     119        CMDComponentSpec result = profilesCache.get(id);
     120        if (result == null && !profilesCache.containsKey(id)) {
     121            result = getUncachedMDProfile(id);
     122            profilesCache.put(id, result);
     123        }
     124        return result;
     125    }
     126
     127    public CMDComponentSpec getUncachedMDProfile(String id) {
     128        try {
     129            return getUncachedMDComponent(id, profileDescriptionDao);
    114130        } catch (DataAccessException ex) {
    115131            LOG.error("Database access error while trying to get profile", ex);
     
    120136    @Override
    121137    public CMDComponentSpec getMDComponent(String id) {
    122         try {
    123             return getMDComponent(id, componentDescriptionDao);
     138        CMDComponentSpec result = componentsCache.get(id);
     139        if (result == null && !componentsCache.containsKey(id)) {
     140            result = getUncachedMDComponent(id);
     141            componentsCache.put(id, result);
     142        }
     143        return result;
     144    }
     145
     146    public CMDComponentSpec getUncachedMDComponent(String id) {
     147        try {
     148            return getUncachedMDComponent(id, componentDescriptionDao);
    124149        } catch (DataAccessException ex) {
    125150            LOG.error("Database access error while trying to get component", ex);
     
    138163                componentDescriptionDao.insertDescription(description, xml, isPublic(), userId);
    139164            }
     165            invalidateCache(description);
    140166            return 0;
    141167        } catch (JAXBException ex) {
     
    154180            AbstractDescriptionDao<?> dao = getDaoForDescription(description);
    155181            dao.updateDescription(getIdForDescription(description), description, componentSpecToString(spec));
     182            invalidateCache(description);
    156183            return 0;
    157184        } catch (DataAccessException ex) {
     
    225252                checkAge(desc, principal);
    226253                profileDescriptionDao.setDeleted(getIdForDescription(desc));
     254                invalidateCache(desc);
    227255            }
    228256        } catch (DataAccessException ex) {
     
    246274//            }
    247275                componentDescriptionDao.setDeleted(getIdForDescription(desc));
     276                invalidateCache(desc);
    248277            }
    249278        } catch (DataAccessException ex) {
     
    275304    public void setUserId(Number user) {
    276305        this.userId = user;
     306    }
     307
     308    private void invalidateCache(AbstractDescription description){
     309        if(description.isProfile()){
     310            profilesCache.remove(description.getId());
     311        } else{
     312            componentsCache.remove(description.getId());
     313        }
    277314    }
    278315
     
    311348    }
    312349
    313     private CMDComponentSpec getMDComponent(String id, AbstractDescriptionDao dao) {
     350    private CMDComponentSpec getUncachedMDComponent(String id, AbstractDescriptionDao dao) {
    314351        String xml = dao.getContent(id);
    315352        if (xml != null) {
     
    345382        if (isPublic() && !configuration.isAdminUser(principal)) {
    346383            try {
    347                 Date regDate = AbstractDescription.getDate(desc.getRegistrationDate());
     384                Date regDate = AbstractDescription.getDate(desc.
     385                        getRegistrationDate());
    348386                Calendar calendar = Calendar.getInstance();
    349387                calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1);
  • ComponentRegistry/trunk/ComponentRegistry/src/main/webresources/WEB-INF/spring-config/database-impl.xml

    r1293 r1341  
    77    <import resource="persistence.xml"/>
    88
     9    <bean id="componentsCache" class="clarin.cmdi.componentregistry.impl.database.CMDComponentSpecCache" />
     10    <bean id="profilesCache" class="clarin.cmdi.componentregistry.impl.database.CMDComponentSpecCache" />
     11
    912    <!-- Prototype bean for component registry (service) -->
    10     <bean id="componentRegistry" class="clarin.cmdi.componentregistry.impl.database.ComponentRegistryDbImpl"  scope="prototype"></bean>
     13    <bean id="componentRegistry" class="clarin.cmdi.componentregistry.impl.database.ComponentRegistryDbImpl" scope="prototype"></bean>
    1114
    1215    <!-- Factory that will create component registries for us (and autowire them), to be used by actual ComponentRegistryFactory -->
    1316    <bean id="componentRegistryBeanFactory"
    1417            class="org.springframework.beans.factory.config.ServiceLocatorFactoryBean">
    15         <property name="serviceLocatorInterface" value="clarin.cmdi.componentregistry.impl.database.ComponentRegistryBeanFactory"/>
     18        <property name="serviceLocatorInterface" value="clarin.cmdi.componentregistry.impl.database.ComponentRegistryBeanFactory"/>
    1619    </bean>
    1720
  • ComponentRegistry/trunk/ComponentRegistry/src/test/java/clarin/cmdi/componentregistry/impl/database/ComponentRegistryDbImplTest.java

    r1337 r1341  
    33import clarin.cmdi.componentregistry.ComponentRegistry;
    44import clarin.cmdi.componentregistry.DeleteFailedException;
     5import clarin.cmdi.componentregistry.MDMarshaller;
    56import clarin.cmdi.componentregistry.UserCredentials;
    67import clarin.cmdi.componentregistry.UserUnauthorizedException;
     
    910import clarin.cmdi.componentregistry.model.ComponentDescription;
    1011import static clarin.cmdi.componentregistry.impl.database.ComponentRegistryDatabase.*;
     12import clarin.cmdi.componentregistry.model.AbstractDescription;
    1113import clarin.cmdi.componentregistry.model.ProfileDescription;
    1214import clarin.cmdi.componentregistry.model.UserMapping.User;
     
    449451        assertTrue(RegistryTestHelper.hasComponent(xsd, "XXX", "0", "99"));
    450452    }
     453
     454    @Test
     455    public void testUpdate() throws Exception {
     456        ComponentRegistry register = getComponentRegistryForUser(null);
     457        ComponentDescription description = ComponentDescription.
     458                createNewDescription();
     459        description.setName("Aap");
     460        description.setDescription("MyDescription");
     461
     462        CMDComponentSpec testComponent = RegistryTestHelper.getTestComponent("Test1");
     463        register.register(description, testComponent);
     464
     465        // Change values
     466        description.setName("Noot");
     467        description.setDescription("AnotherDescription");
     468        // Update in db
     469        register.update(description, testComponent);
     470        description = register.getComponentDescription(description.getId());
     471        // Test if new values are there
     472        assertNotNull(description);
     473        assertEquals("Noot", description.getName());
     474        assertEquals("AnotherDescription", description.getDescription());
     475
     476        // Update content
     477        CMDComponentSpec testComponent2 = RegistryTestHelper.getTestComponent("Test2");
     478        register.update(description, testComponent2);
     479        // Test if new content is there
     480        assertEquals(RegistryTestHelper.getXml(testComponent2),
     481                RegistryTestHelper.getXml(register.getMDComponent(description.
     482                getId())));
     483
     484
     485        // Update both
     486        description.setName("Mies");
     487        description.setDescription("YetAnotherDescription");
     488        CMDComponentSpec testComponent3 = RegistryTestHelper.getTestComponent("Test3");
     489
     490        // Update in db
     491        register.update(description, testComponent3);
     492        description = register.getComponentDescription(description.getId());
     493        // Test if new values are there
     494        assertNotNull(description);
     495        assertEquals("Mies", description.getName());
     496        assertEquals("YetAnotherDescription", description.getDescription());
     497        // Test if new content is there
     498        assertEquals(RegistryTestHelper.getXml(testComponent3),
     499                RegistryTestHelper.getXml(register.getMDComponent(description.
     500                getId())));
     501    }
    451502}
  • ComponentRegistry/trunk/ComponentRegistry/src/test/java/clarin/cmdi/componentregistry/rest/RegistryTestHelper.java

    r1337 r1341  
    22
    33import java.io.ByteArrayInputStream;
     4import java.io.IOException;
    45import java.io.InputStream;
    56import java.io.UnsupportedEncodingException;
     
    1718import clarin.cmdi.componentregistry.model.ComponentDescription;
    1819import clarin.cmdi.componentregistry.model.ProfileDescription;
     20import java.io.ByteArrayOutputStream;
    1921import java.util.regex.Matcher;
    2022import java.util.regex.Pattern;
     
    149151    }
    150152
     153    public static CMDComponentSpec getTestComponent(String name) throws JAXBException {
     154        return MDMarshaller.unmarshal(CMDComponentSpec.class, getComponentTestContent(name), MDMarshaller.getCMDComponentSchema());
     155    }
     156
     157    public static String getXml(CMDComponentSpec componentSpec) throws JAXBException, UnsupportedEncodingException{
     158        ByteArrayOutputStream os = new ByteArrayOutputStream();
     159        MDMarshaller.marshal(componentSpec, os);
     160        String xml = os.toString();
     161        try {
     162            os.close();
     163        } catch (IOException ex) {
     164        }
     165        return xml;
     166    }
    151167
    152168
  • ComponentRegistry/trunk/ComponentRegistry/src/test/resources/spring-config/database-impl.xml

    r1293 r1341  
    99    <import resource="persistence.xml"/>
    1010
     11
     12    <bean id="componentsCache" class="clarin.cmdi.componentregistry.impl.database.CMDComponentSpecCache" />
     13    <bean id="profilesCache" class="clarin.cmdi.componentregistry.impl.database.CMDComponentSpecCache" />
    1114
    1215    <!-- Prototype bean for component registry (service) -->
Note: See TracChangeset for help on using the changeset viewer.