Author: echatellier Date: 2011-02-21 17:42:36 +0100 (Mon, 21 Feb 2011) New Revision: 714 Url: http://nuiton.org/repositories/revision/wikitty/714 Log: #1348 : Deleted extension not removed from wikitty service cache Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyCacheJCS.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyEvent.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceCached.java trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java trunk/wikitty-jdbc-impl/src/main/resources/wikitty-jdbc-query.properties Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyCacheJCS.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyCacheJCS.java 2011-02-21 14:17:58 UTC (rev 713) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyCacheJCS.java 2011-02-21 16:42:36 UTC (rev 714) @@ -192,14 +192,14 @@ } /** - * Return wikitty object if is in the cache, null otherwize. + * Return wikitty object if is in the cache, null otherwise. * - * @param id + * @param extId extension id * @return wikitty object or null */ @Override - public WikittyExtension getExtension(String id) { - WikittyExtension result = (WikittyExtension)extensionCache.get(id); + public WikittyExtension getExtension(String extId) { + WikittyExtension result = (WikittyExtension)extensionCache.get(extId); return result; } @@ -222,14 +222,18 @@ /** * Remove wikitty from cache. * - * @param id wikitty id to remove + * @param extId wikitty id to remove */ @Override - public void removeExtension(String id) { + public void removeExtension(String extId) { try { - extensionCache.remove(id); + extensionCache.remove(extId); + + if (log.isDebugEnabled()) { + log.debug("Remove extension from JCS cache " + extId); + } } catch (CacheException eee) { - log.error(String.format("Can't remove extensions %s in cache", id), eee); + log.error(String.format("Can't remove extensions %s in cache", extId), eee); } } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyEvent.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyEvent.java 2011-02-21 14:17:58 UTC (rev 713) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyEvent.java 2011-02-21 16:42:36 UTC (rev 714) @@ -34,6 +34,8 @@ import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; + +import org.nuiton.wikitty.WikittyService; import org.nuiton.wikitty.entities.Wikitty; import org.nuiton.wikitty.entities.WikittyExtension; @@ -99,14 +101,13 @@ /** Use by PUT_EXTENSION, all extensions added */ protected Map<String, WikittyExtension> extensions; - /** Use by REMOVE_EXTENSION, all extensions name deleted */ + /** Use by REMOVE_EXTENSION, all extensions id deleted */ protected Set<String> deletedExtensions; /** * Constructor with source {@link WikittyService}. * * @param source wikitty service - * @param eventId unique event id */ public WikittyEvent(Object source) { super(source); @@ -115,7 +116,8 @@ } /** - * Return time of event creation + * Return time of event creation. + * * @return */ public long getTime() { @@ -213,12 +215,12 @@ return deletedExtensions; } - public void addDeletedExtension(String extName) { + public void addDeletedExtension(String id) { if (deletedExtensions == null) { deletedExtensions = new LinkedHashSet<String>(); addType(WikittyEventType.REMOVE_EXTENSION); } - deletedExtensions.add(extName); + deletedExtensions.add(id); } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceCached.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceCached.java 2011-02-21 14:17:58 UTC (rev 713) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceCached.java 2011-02-21 16:42:36 UTC (rev 714) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2009 - 2010 CodeLutin, Benjamin Poussin + * Copyright (C) 2009 - 2011 CodeLutin, Benjamin Poussin, Chatellier Eric * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as @@ -81,12 +81,13 @@ /** * Constructor with configuration. * + * @param config config * @param ws delegate service - * @param props properties (can be null) + * @param cache wikity cache */ public WikittyServiceCached(ApplicationConfig config, WikittyService ws, WikittyCache cache) { super(ws); - // this.ws = ws; + // this.ws = ws; this.cache = cache; if (cache == null) { @@ -134,7 +135,8 @@ } /** - * Retourne le nombre de solicitation du cache + * Retourne le nombre de solicitation du cache. + * * @return */ public long getAsked() { @@ -143,14 +145,17 @@ /** * Retourne le nombre de fois que l'element dans le cache demande n'y etait - * pas + * pas. + * * @return */ public long getMissed() { return missed; } - /** wrap the wikitty or copy it according to allwaysRestoreCopies value */ + /** + * Wrap the wikitty or copy it according to allwaysRestoreCopies value. + */ protected Wikitty wrapWikitty(Wikitty wikitty) { Wikitty result = null; @@ -225,19 +230,19 @@ * Only WikittyImpl can be put in real cache implementation. If argument * is WikittyCopyOnWrite, we must take internal wikitty to put in cache */ - protected void cachePutExtension(WikittyExtension w) { - if (w != null) { - if (!cache.existsExtension(w.getId())) { - cache.putExtension(w); + protected void cachePutExtension(WikittyExtension ext) { + if (ext != null) { + if (!cache.existsExtension(ext.getId())) { + cache.putExtension(ext); if (log.isTraceEnabled()) { log.trace(String.format( - "Replace cached wikitty extension '%s'", w.getId())); + "Replace cached wikitty extension '%s'", ext.getId())); } } else { if (log.isTraceEnabled()) { log.trace(String.format( - "Ignoring put wikitty extension for '%s'",w.getId())); + "Ignoring put wikitty extension for '%s'", ext.getId())); } } } @@ -259,9 +264,12 @@ } } - protected void cacheRemoveExtension(String id) { - if (id != null) { - cache.removeWikitty(id); + protected void cacheRemoveExtension(String extId) { + if (extId != null) { + if (log.isDebugEnabled()) { + log.debug("Remove extension from cache " + extId); + } + cache.removeExtension(extId); } } @@ -271,9 +279,9 @@ } } - protected void cacheRemoveExtension(Collection<String> ids) { - for (String id : ids) { - cacheRemoveWikitty(id); + protected void cacheRemoveExtension(Collection<String> extIds) { + for (String extId : extIds) { + cacheRemoveExtension(extId); } } @@ -484,6 +492,11 @@ * @param e */ protected void processEvent(WikittyEvent e) { + + if (log.isDebugEnabled()) { + log.debug("Cache receive event : " + e); + } + // check clear must be the first, if event have clear and other type // clear is all time play first if (e.getType().contains( Modified: trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java =================================================================== --- trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java 2011-02-21 14:17:58 UTC (rev 713) +++ trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java 2011-02-21 16:42:36 UTC (rev 714) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2010 CodeLutin, Benjamin Poussin + * Copyright (C) 2010 - 2011 CodeLutin, Benjamin Poussin, Chatellier Eric * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as @@ -40,6 +40,7 @@ import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_INSERT_EXTENSION_ADMIN; import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_INSERT_EXTENSION_DATA; import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_SELECT; +import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_SELECT_EXTENSION_ADMIN; import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_SELECT_WHERE; import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.TABLE_EXTENSION_ADMIN; import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.TABLE_EXTENSION_DATA; @@ -186,14 +187,28 @@ // # is ESCAPE caractere (see wikitty-jdbc-query file) // we escape [ and ] because some database use it as special char name = name + "#[%#]"; + + // select all wikitty id for event to contains + // id instead of only name (usefull for cache to remove cached + // extension id) + String q = String.format(jdbcQuery.getProperty(QUERY_SELECT_EXTENSION_ADMIN), COL_ID); + PreparedStatement statement = connection.prepareStatement(q); + statement.setString(1, name); + ResultSet resultSet = statement.executeQuery(); + while (resultSet.next()) { + String id = resultSet.getString(COL_ID); + result.addDeletedExtension(id); + } + // delete extension in admin and data WikittyJDBCUtil.doQuery(connection, jdbcQuery.getProperty( QUERY_DELETE_EXTENSION_DATA), name); WikittyJDBCUtil.doQuery(connection, jdbcQuery.getProperty( QUERY_DELETE_EXTENSION_ADMIN), name); - result.addDeletedExtension(name); - } + + // FIXME echatellier 20110221 : clear cache !!! + lastVersion = null; return result; } catch (SQLException eee) { Modified: trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java =================================================================== --- trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java 2011-02-21 14:17:58 UTC (rev 713) +++ trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java 2011-02-21 16:42:36 UTC (rev 714) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2010 CodeLutin, Benjamin Poussin + * Copyright (C) 2010 - 2011 CodeLutin, Benjamin Poussin, Chatellier Eric * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as @@ -141,6 +141,7 @@ static final public String QUERY_CLEAR_WIKITTY = "jdbc.queries.clear.wikitty"; /** clear extension query property name */ + static final public String QUERY_SELECT_EXTENSION_ADMIN = "jdbc.queries.select.extension.admin"; static final public String QUERY_DELETE_EXTENSION_ADMIN = "jdbc.queries.delete.extension.admin"; static final public String QUERY_DELETE_EXTENSION_DATA = "jdbc.queries.delete.extension.data"; Modified: trunk/wikitty-jdbc-impl/src/main/resources/wikitty-jdbc-query.properties =================================================================== --- trunk/wikitty-jdbc-impl/src/main/resources/wikitty-jdbc-query.properties 2011-02-21 14:17:58 UTC (rev 713) +++ trunk/wikitty-jdbc-impl/src/main/resources/wikitty-jdbc-query.properties 2011-02-21 16:42:36 UTC (rev 714) @@ -5,7 +5,7 @@ # $Id$ # $HeadURL$ # %% -# Copyright (C) 2010 CodeLutin, Benjamin Poussin +# Copyright (C) 2010 - 2011 CodeLutin, Benjamin Poussin, Chatellier Eric # %% # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as @@ -96,6 +96,7 @@ #extension delete admin and data (ESCAPE is needed for [ and ] because some # database use it like sqlserver) +jdbc.queries.select.extension.admin=SELECT %s FROM extension_admin WHERE id LIKE ? ESCAPE '#'; jdbc.queries.delete.extension.data=DELETE FROM extension_data WHERE id LIKE ? ESCAPE '#'; jdbc.queries.delete.extension.admin=DELETE FROM extension_admin WHERE id LIKE ? ESCAPE '#';