|
|
|
Marius Dumitru Florea
|
mflorea (SVN) wrote:
> Author: mflorea > Date: 2009-10-28 11:51:16 +0100 (Wed, 28 Oct 2009) > New Revision: 24746 > > Added: > platform/web/trunk/wysiwyg/src/main/java/com/xpn/xwiki/wysiwyg/client/plugin/sync/SyncService.java > platform/web/trunk/wysiwyg/src/main/java/com/xpn/xwiki/wysiwyg/client/plugin/sync/SyncServiceAsync.java > platform/web/trunk/wysiwyg/src/main/java/com/xpn/xwiki/wysiwyg/server/filter/XWikiContextInitializationFilter.java > platform/web/trunk/wysiwyg/src/main/java/com/xpn/xwiki/wysiwyg/server/plugin/sync/XWikiSyncService.java > platform/web/trunk/wysiwyg/src/main/java/com/xpn/xwiki/wysiwyg/server/plugin/sync/internal/ > platform/web/trunk/wysiwyg/src/main/java/com/xpn/xwiki/wysiwyg/server/plugin/sync/internal/DefaultSyncEngine.java > Removed: > platform/web/trunk/wysiwyg/src/main/java/com/xpn/xwiki/wysiwyg/server/plugin/sync/DefaultSyncEngine.java > Modified: > platform/web/trunk/wysiwyg/pom.xml > platform/web/trunk/wysiwyg/src/main/java/com/xpn/xwiki/wysiwyg/client/WysiwygService.java > platform/web/trunk/wysiwyg/src/main/java/com/xpn/xwiki/wysiwyg/client/WysiwygServiceAsync.java > platform/web/trunk/wysiwyg/src/main/java/com/xpn/xwiki/wysiwyg/client/WysiwygServiceAsyncCacheProxy.java > platform/web/trunk/wysiwyg/src/main/java/com/xpn/xwiki/wysiwyg/client/plugin/sync/SyncPlugin.java > platform/web/trunk/wysiwyg/src/main/java/com/xpn/xwiki/wysiwyg/client/plugin/sync/SyncPluginFactory.java > platform/web/trunk/wysiwyg/src/main/java/com/xpn/xwiki/wysiwyg/client/plugin/sync/SyncResult.java > platform/web/trunk/wysiwyg/src/main/java/com/xpn/xwiki/wysiwyg/client/plugin/sync/SyncStatus.java > platform/web/trunk/wysiwyg/src/main/java/com/xpn/xwiki/wysiwyg/client/plugin/sync/SyncTools.java > platform/web/trunk/wysiwyg/src/main/java/com/xpn/xwiki/wysiwyg/server/DefaultWysiwygService.java > platform/web/trunk/wysiwyg/src/main/java/com/xpn/xwiki/wysiwyg/server/plugin/sync/SyncEngine.java > platform/web/trunk/wysiwyg/src/main/java/com/xpn/xwiki/wysiwyg/server/plugin/sync/SyncException.java > platform/web/trunk/wysiwyg/src/main/resources/META-INF/components.txt > platform/web/trunk/wysiwyg/src/main/webapp/WEB-INF/web.xml > platform/web/trunk/wysiwyg/src/test/java/com/xpn/xwiki/wysiwyg/server/plugin/sync/SyncTest.java > Log: > XWIKI-4534: Create a SyncService component to be used by SyncPlugin > Also: > * Refactored and cleaned the sync plugin classes a bit > * Made SyncEngine a component > * Added a filter to initialize the XWiki context. This filter is generic and could be moved to xwiki-core. > > > Modified: platform/web/trunk/wysiwyg/pom.xml > =================================================================== > --- platform/web/trunk/wysiwyg/pom.xml 2009-10-28 10:31:41 UTC (rev 24745) > +++ platform/web/trunk/wysiwyg/pom.xml 2009-10-28 10:51:16 UTC (rev 24746) > @@ -107,6 +107,12 @@ > <scope>provided</scope> > </dependency> > <dependency> > + <groupId>org.xwiki.platform</groupId> > + <artifactId>xwiki-core-container-api</artifactId> > + <version>${platform.core.version}</version> > + <scope>provided</scope> > + </dependency> > + <dependency> I don't understand why I need to declare this dependency while the web-gwt module doesn't need to. XWikiServiceImpl uses the Container component and the web-gwt pom has only a dependency on xwiki-core. mvn compiler:compile succeeds. XWikiContextInitializationFilter uses the same Container component and mvn compiler:compile throws "package org.xwiki.container not found". > <groupId>commons-logging</groupId> > <artifactId>commons-logging</artifactId> > <scope>provided</scope> > @@ -198,9 +204,10 @@ > com/xpn/xwiki/wysiwyg/client/plugin/link/LinkConfig.java, > com/xpn/xwiki/wysiwyg/client/plugin/link/LinkConfigTest.java, > com/xpn/xwiki/wysiwyg/client/plugin/image/ImageConfig.java, > - com/xpn/xwiki/wysiwyg/client/plugin/sync/**/*, > - com/xpn/xwiki/wysiwyg/server/plugin/sync/**/*, > - com/xpn/xwiki/wysiwyg/server/DefaultWysiwygService.java, > + com/xpn/xwiki/wysiwyg/client/plugin/sync/SyncPlugin.java, > + com/xpn/xwiki/wysiwyg/client/plugin/sync/SyncTools.java, > + com/xpn/xwiki/wysiwyg/server/plugin/sync/internal/DefaultSyncEngine.java, > + com/xpn/xwiki/wysiwyg/server/plugin/sync/SyncTest.java, > com/xpn/xwiki/wysiwyg/server/DefaultWysiwygServiceTest.java</excludes> > </configuration> > </plugin> > [snip] > Added: platform/web/trunk/wysiwyg/src/main/java/com/xpn/xwiki/wysiwyg/server/filter/XWikiContextInitializationFilter.java > =================================================================== > --- platform/web/trunk/wysiwyg/src/main/java/com/xpn/xwiki/wysiwyg/server/filter/XWikiContextInitializationFilter.java (rev 0) > +++ platform/web/trunk/wysiwyg/src/main/java/com/xpn/xwiki/wysiwyg/server/filter/XWikiContextInitializationFilter.java 2009-10-28 10:51:16 UTC (rev 24746) > @@ -0,0 +1,159 @@ > +/* > + * See the NOTICE file distributed with this work for additional > + * information regarding copyright ownership. > + * > + * This is free software; you can redistribute it and/or modify it > + * under the terms of the GNU Lesser General Public License as > + * published by the Free Software Foundation; either version 2.1 of > + * the License, or (at your option) any later version. > + * > + * This software is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this software; if not, write to the Free > + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA > + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. > + */ > +package com.xpn.xwiki.wysiwyg.server.filter; > + > +import java.io.IOException; > + > +import javax.servlet.Filter; > +import javax.servlet.FilterChain; > +import javax.servlet.FilterConfig; > +import javax.servlet.ServletException; > +import javax.servlet.ServletRequest; > +import javax.servlet.ServletResponse; > +import javax.servlet.http.HttpServletRequest; > +import javax.servlet.http.HttpServletResponse; > + > +import org.xwiki.container.Container; > +import org.xwiki.container.servlet.ServletContainerException; > +import org.xwiki.container.servlet.ServletContainerInitializer; > +import org.xwiki.context.Execution; > + > +import com.xpn.xwiki.XWiki; > +import com.xpn.xwiki.XWikiContext; > +import com.xpn.xwiki.XWikiException; > +import com.xpn.xwiki.web.Utils; > +import com.xpn.xwiki.web.XWikiEngineContext; > +import com.xpn.xwiki.web.XWikiRequest; > +import com.xpn.xwiki.web.XWikiResponse; > +import com.xpn.xwiki.web.XWikiServletContext; > +import com.xpn.xwiki.web.XWikiServletRequest; > +import com.xpn.xwiki.web.XWikiServletResponse; > + > +/** > + * This filter can be used to initialize the XWiki context before processing a request. > + * > + * @version $Id$ > + */ > +public class XWikiContextInitializationFilter implements Filter > +{ > + /** > + * The filter configuration object. > + */ > + private FilterConfig filterConfig; > + > + /** > + * {@inheritDoc} > + * > + * @see Filter#destroy() > + */ > + public void destroy() > + { > + filterConfig = null; > + } > + > + /** > + * {@inheritDoc} > + * > + * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) > + */ > + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, > + ServletException > + { > + try { > + initializeXWikiContext(request, response); > + chain.doFilter(request, response); > + } finally { > + cleanupComponents(); > + } > + } > + > + /** > + * {@inheritDoc} > + * > + * @see Filter#init(FilterConfig) > + */ > + public void init(FilterConfig filterConfig) throws ServletException > + { > + this.filterConfig = filterConfig; > + } > + > + /** > + * Initializes the XWiki context. > + * > + * @param request the request being processed > + * @param response the response > + * @throws ServletException if the initialization fails > + */ > + protected void initializeXWikiContext(ServletRequest request, ServletResponse response) throws ServletException > + { > + XWikiEngineContext xwikiEngine = new XWikiServletContext(filterConfig.getServletContext()); > + XWikiRequest xwikiRequest = new XWikiServletRequest((HttpServletRequest) request); > + XWikiResponse xwikiResponse = new XWikiServletResponse((HttpServletResponse) response); > + > + XWikiContext context; > + try { > + // Create the XWiki context. > + context = Utils.prepareContext("", xwikiRequest, xwikiResponse, xwikiEngine); > + // Initialize the XWiki database. The following method calls context.setWiki(XWiki). > + XWiki.getXWiki(context); > + } catch (XWikiException e) { > + throw new ServletException("Failed to prepare the XWiki context.", e); > + } > + > + // Initialize the Container component which is the new way of transporting the Context in the new component > + // architecture. > + initializeContainerComponent(context); > + } > + > + /** > + * @param context the XWiki context > + * @throws ServletException if the container component initialization fails > + */ > + protected void initializeContainerComponent(XWikiContext context) throws ServletException > + { > + // Initialize the Container fields (request, response, session). Note that this is a bridge between the old core > + // and the component architecture. In the new component architecture we use ThreadLocal to transport the > + // request, response and session to components which require them. > + ServletContainerInitializer containerInitializer = Utils.getComponent(ServletContainerInitializer.class); > + > + try { > + containerInitializer.initializeRequest(context.getRequest().getHttpServletRequest(), context); > + containerInitializer.initializeResponse(context.getResponse().getHttpServletResponse()); > + containerInitializer.initializeSession(context.getRequest().getHttpServletRequest()); > + } catch (ServletContainerException e) { > + throw new ServletException("Failed to initialize Request/Response or Session", e); > + } > + } > + > + /** > + * We must ensure we clean the ThreadLocal variables located in the Container and Execution components as otherwise > + * we will have a potential memory leak. > + */ > + protected void cleanupComponents() > + { > + Container container = Utils.getComponent(Container.class); > + container.removeRequest(); > + container.removeResponse(); > + container.removeSession(); > + > + Execution execution = Utils.getComponent(Execution.class); > + execution.removeContext(); > + } > +} I committed the context initialization filter in the wysiwyg module for now but I think we should move it to xwiki-core if it's generic enough to be used by other servlets (besides the XWikiRemoteServiceServlet). Thanks, Marius _______________________________________________ devs mailing list [hidden email] http://lists.xwiki.org/mailman/listinfo/devs |
||||||||||||||||
| Free Embeddable Forum Powered by Nabble | Help |