Author: vjrj_ Date: 2012-03-07 13:19:26 +0100 (Wed, 07 Mar 2012) New Revision: 1746 Added: trunk/src/main/java/cc/kune/core/server/persist/ trunk/src/main/java/cc/kune/core/server/persist/CustomPersistFilter.java trunk/src/main/java/cc/kune/core/server/persist/DataSourceKune.java trunk/src/main/java/cc/kune/core/server/persist/DataSourceKunePersistModule.java trunk/src/main/java/cc/kune/core/server/persist/DataSourceKuneSessionProvider.java trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfire.java trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfirePersistModule.java trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfireSessionProvider.java trunk/src/main/java/cc/kune/core/server/persist/GenericPersistenceInitializer.java trunk/src/main/java/cc/kune/core/server/persist/KunePersistenceService.java trunk/src/main/java/cc/kune/core/server/persist/KuneTransactional.java trunk/src/test/java/cc/kune/core/server/persist/ Removed: trunk/src/main/java/cc/kune/core/server/CustomPersistFilter.java trunk/src/main/java/cc/kune/core/server/DataSourceKune.java trunk/src/main/java/cc/kune/core/server/DataSourceKunePersistModule.java trunk/src/main/java/cc/kune/core/server/DataSourceKuneSessionProvider.java trunk/src/main/java/cc/kune/core/server/DataSourceOpenfire.java trunk/src/main/java/cc/kune/core/server/DataSourceOpenfirePersistModule.java trunk/src/main/java/cc/kune/core/server/DataSourceOpenfireSessionProvider.java trunk/src/main/java/cc/kune/core/server/GenericPersistenceInitializer.java trunk/src/main/java/cc/kune/core/server/KunePersistenceService.java trunk/src/main/java/cc/kune/core/server/KuneTransactional.java Modified: trunk/src/main/java/cc/kune/core/server/KuneContainerListener.java trunk/src/main/java/cc/kune/core/server/KuneRackModule.java trunk/src/main/java/cc/kune/core/server/PlatformServerModule.java trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java trunk/src/main/java/cc/kune/core/server/manager/impl/ExtMediaDescripManagerDefault.java trunk/src/main/java/cc/kune/core/server/manager/impl/GroupManagerDefault.java trunk/src/main/java/cc/kune/core/server/manager/impl/I18nCountryManagerDefault.java trunk/src/main/java/cc/kune/core/server/manager/impl/I18nLanguageManagerDefault.java trunk/src/main/java/cc/kune/core/server/manager/impl/I18nTranslationManagerDefault.java trunk/src/main/java/cc/kune/core/server/manager/impl/LicenseManagerDefault.java trunk/src/main/java/cc/kune/core/server/manager/impl/RateManagerDefault.java trunk/src/main/java/cc/kune/core/server/manager/impl/SocialNetworkManagerDefault.java trunk/src/main/java/cc/kune/core/server/manager/impl/TagManagerDefault.java trunk/src/main/java/cc/kune/core/server/manager/impl/TagUserContentManagerDefault.java trunk/src/main/java/cc/kune/core/server/manager/impl/ToolConfigurationManagerDefault.java trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java trunk/src/main/java/cc/kune/core/server/xmpp/OpenfireXmppRosterProvider.java trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPresenter.java trunk/src/test/java/cc/kune/core/server/PersistenceTest.java trunk/src/test/java/cc/kune/core/server/TestHelper.java trunk/src/test/java/cc/kune/core/server/integration/IntegrationTestHelper.java trunk/src/test/java/com/google/inject/persist/jpa/KuneJpaLocalTxnInterceptor.java Log: NEW - # 201: Add Openfire to the persist system so we can connect and get xmpp users info http://kune.ourproject.org/issues/ticket/201 Deleted: trunk/src/main/java/cc/kune/core/server/CustomPersistFilter.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/CustomPersistFilter.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/CustomPersistFilter.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -1,111 +0,0 @@ -/** - * Copyright (C) 2010 Google, Inc. - * - * Licensed 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. - */ -package cc.kune.core.server; - -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 com.google.inject.Inject; -import com.google.inject.Singleton; -import com.google.inject.persist.PersistService; -import com.google.inject.persist.UnitOfWork; - -/** - * Apply this filter to enable the HTTP Request unit of work and to have - * guice-persist manage the lifecycle of active units of work. The filter - * automatically starts and stops the relevant {@link PersistService} upon - * {@link javax.servlet.Filter#init(javax.servlet.FilterConfig)} and - * {@link javax.servlet.Filter#destroy()} respectively. - * - * <p> - * To be able to use the open session-in-view pattern (i.e. work per request), - * register this filter <b>once</b> in your Guice {@code ServletModule}. It is - * important that you register this filter before any other filter. - * - * For multiple providers, you should register this filter once per provider, - * inside a private module for each persist module installed (this must be the - * same private module where the specific persist module is itself installed). - * - * <p> - * Example configuration: - * - * <pre> - * { - * @code - * public class MyModule extends ServletModule { - * public void configureServlets() { - * filter("/*").through(PersistFilter.class); - * - * serve("/index.html").with(MyHtmlServlet.class); - * // Etc. - * } - * } - * } - * </pre> - * <p> - * This filter is thread safe and allows you to create injectors concurrently - * and deploy multiple guice-persist modules within the same injector, or even - * multiple injectors with persist modules withing the same JVM or web app. - * <p> - * This filter requires the Guice Servlet extension. - * - * @author Dhanji R. Prasanna ([email protected]) - * - * (Custom PersistFilter.class modified for kune needs without - * persistence start/stop) - */ - -@Singleton -public class CustomPersistFilter implements Filter { - private final PersistService persistService; - private final UnitOfWork unitOfWork; - - @Inject - public CustomPersistFilter(final UnitOfWork unitOfWork, final PersistService persistService) { - this.unitOfWork = unitOfWork; - this.persistService = persistService; - } - - @Override - public void destroy() { - // Commented in kune - // persistService.stop(); - } - - @Override - public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, - final FilterChain filterChain) throws IOException, ServletException { - - unitOfWork.begin(); - try { - filterChain.doFilter(servletRequest, servletResponse); - } finally { - unitOfWork.end(); - } - } - - @Override - public void init(final FilterConfig filterConfig) throws ServletException { - // Commented in kune - // persistService.start(); - } -} \ No newline at end of file Deleted: trunk/src/main/java/cc/kune/core/server/DataSourceKune.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/DataSourceKune.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/DataSourceKune.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -1,17 +0,0 @@ -package cc.kune.core.server; - -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.PARAMETER; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -import com.google.inject.BindingAnnotation; - -@Retention(RetentionPolicy.RUNTIME) -@Target({ FIELD, PARAMETER, METHOD }) -@BindingAnnotation -public @interface DataSourceKune { -} \ No newline at end of file Deleted: trunk/src/main/java/cc/kune/core/server/DataSourceKunePersistModule.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/DataSourceKunePersistModule.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/DataSourceKunePersistModule.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -1,138 +0,0 @@ -package cc.kune.core.server; - -import java.util.Properties; - -import javax.persistence.EntityManager; - -import org.apache.commons.configuration.SystemConfiguration; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.hibernate.Session; - -import cc.kune.core.server.properties.KuneProperties; -import cc.kune.core.server.properties.KunePropertiesDefault; -import cc.kune.domain.finders.ContainerFinder; -import cc.kune.domain.finders.ContentFinder; -import cc.kune.domain.finders.ExtMediaDescripFinder; -import cc.kune.domain.finders.GroupFinder; -import cc.kune.domain.finders.I18nCountryFinder; -import cc.kune.domain.finders.I18nLanguageFinder; -import cc.kune.domain.finders.I18nTranslationFinder; -import cc.kune.domain.finders.LicenseFinder; -import cc.kune.domain.finders.RateFinder; -import cc.kune.domain.finders.TagFinder; -import cc.kune.domain.finders.TagUserContentFinder; -import cc.kune.domain.finders.UserFinder; - -import com.google.inject.AbstractModule; -import com.google.inject.Key; -import com.google.inject.Provider; -import com.google.inject.persist.jpa.JpaPersistModule; - -public class DataSourceKunePersistModule extends AbstractModule { - public static final Log LOG = LogFactory.getLog(DataSourceKunePersistModule.class); - public static final Key<CustomPersistFilter> MY_DATA_SOURCE_ONE_FILTER_KEY = Key.get( - CustomPersistFilter.class, DataSourceKune.class); - private String settedJpaUnit = null; - private String settedProperties = null; - - public DataSourceKunePersistModule() { - } - - /** - * Instantiates this module during tests - * - * @param settedProperties - * the setted properties - * @param settedJpaUnit - * the setted jpa unit - */ - public DataSourceKunePersistModule(final String settedProperties, final String settedJpaUnit) { - this.settedProperties = settedProperties; - this.settedJpaUnit = settedJpaUnit; - } - - @Override - public void configure() { - final SystemConfiguration sysConf = new SystemConfiguration(); - final String kuneConfig = settedProperties != null ? settedProperties - : sysConf.getString("kune.server.config"); - - final KunePropertiesDefault kuneProperties = new KunePropertiesDefault(kuneConfig); - bind(KuneProperties.class).toInstance(kuneProperties); - - // precedence method param > properties - final String configuredJpaUnit = kuneProperties.get(KuneProperties.SITE_DB_PERSISTENCE_NAME); - final String jpaUnit = settedJpaUnit != null ? settedJpaUnit - : configuredJpaUnit != null ? configuredJpaUnit : "development"; - LOG.info(String.format("Using persistence unit '%s' and properties '%s'", jpaUnit, kuneConfig)); - - final JpaPersistModule jpm = new JpaPersistModule(jpaUnit); - - if (!jpaUnit.equals("test")) { - // In tests (and development) we don't override this db info) - final Properties dbProperties = new Properties(); - dbProperties.setProperty("hibernate.connection.url", - kuneProperties.get(KuneProperties.SITE_DB_URL)); - dbProperties.setProperty("hibernate.connection.username", - kuneProperties.get(KuneProperties.SITE_DB_USER)); - dbProperties.setProperty("hibernate.connection.password", - kuneProperties.get(KuneProperties.SITE_DB_PASSWORD)); - jpm.properties(dbProperties); - } - - jpm.addFinder(ContainerFinder.class); - jpm.addFinder(ContentFinder.class); - jpm.addFinder(ExtMediaDescripFinder.class); - jpm.addFinder(GroupFinder.class); - jpm.addFinder(I18nCountryFinder.class); - jpm.addFinder(I18nLanguageFinder.class); - jpm.addFinder(I18nTranslationFinder.class); - jpm.addFinder(LicenseFinder.class); - jpm.addFinder(RateFinder.class); - jpm.addFinder(TagFinder.class); - jpm.addFinder(TagUserContentFinder.class); - jpm.addFinder(UserFinder.class); - install(jpm); - - bind(Session.class).annotatedWith(DataSourceKune.class).toProvider( - DataSourceKuneSessionProvider.class); - - // bind(UnitOfWork.class).annotatedWith(DataSourceKune.class).toProvider( - // DataSourceKuneUnitOfWorkProvider.class); - // expose(UnitOfWork.class).annotatedWith(DataSourceKune.class); - - // final KuneJpaLocalTxnInterceptor transactionInterceptor = new - // KuneJpaLocalTxnInterceptor(); - // requestInjection(transactionInterceptor); - // - // bindInterceptor(annotatedWith(KuneTransactional.class), any(), - // transactionInterceptor); - // bindInterceptor(any(), annotatedWith(KuneTransactional.class), - // transactionInterceptor); - - final Provider<EntityManager> entityManagerProvider = binder().getProvider(EntityManager.class); - bind(EntityManager.class).annotatedWith(DataSourceKune.class).toProvider(entityManagerProvider); - - bind(MY_DATA_SOURCE_ONE_FILTER_KEY).to(CustomPersistFilter.class); - - // expose(EntityManager.class).annotatedWith(DataSourceKune.class); - // expose(Session.class).annotatedWith(DataSourceKune.class); - // expose(KuneProperties.class); - // expose(ContainerFinder.class); - // expose(ContentFinder.class); - // expose(ExtMediaDescripFinder.class); - // expose(GroupFinder.class); - // expose(I18nCountryFinder.class); - // expose(I18nLanguageFinder.class); - // expose(I18nTranslationFinder.class); - // expose(LicenseFinder.class); - // expose(RateFinder.class); - // expose(TagFinder.class); - // expose(TagUserContentFinder.class); - // expose(UserFinder.class); - // expose(MY_DATA_SOURCE_ONE_FILTER_KEY); - - bind(GenericPersistenceInitializer.class).asEagerSingleton(); - } -} \ No newline at end of file Deleted: trunk/src/main/java/cc/kune/core/server/DataSourceKuneSessionProvider.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/DataSourceKuneSessionProvider.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/DataSourceKuneSessionProvider.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -1,26 +0,0 @@ -package cc.kune.core.server; - -import javax.persistence.EntityManager; - -import org.hibernate.Session; - -import com.google.inject.Inject; -import com.google.inject.Provider; - -public class DataSourceKuneSessionProvider implements Provider<Session> { - /** The entity manger to retrieve the session from. */ - @Inject - @DataSourceKune - private Provider<EntityManager> entityManagerProvider; - - /** - * @return the Hibernate session, being the delegate of the entity manager - * provided by the injected entity manager provider. - */ - @Override - public Session get() { - final Session session = (Session) entityManagerProvider.get().getDelegate(); - // configure session i.e. flush mode or filtering - return session; - } -}; \ No newline at end of file Deleted: trunk/src/main/java/cc/kune/core/server/DataSourceOpenfire.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/DataSourceOpenfire.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/DataSourceOpenfire.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -1,17 +0,0 @@ -package cc.kune.core.server; - -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.PARAMETER; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -import com.google.inject.BindingAnnotation; - -@Retention(RetentionPolicy.RUNTIME) -@Target({ FIELD, PARAMETER, METHOD }) -@BindingAnnotation -public @interface DataSourceOpenfire { -} \ No newline at end of file Deleted: trunk/src/main/java/cc/kune/core/server/DataSourceOpenfirePersistModule.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/DataSourceOpenfirePersistModule.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/DataSourceOpenfirePersistModule.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -1,60 +0,0 @@ -package cc.kune.core.server; - -import java.util.Properties; - -import javax.persistence.EntityManager; - -import org.hibernate.Session; - -import cc.kune.core.server.xmpp.OpenfireXmppRosterFinder; -import cc.kune.core.server.xmpp.OpenfireXmppRosterProvider; -import cc.kune.core.server.xmpp.XmppRosterProvider; - -import com.google.inject.Key; -import com.google.inject.PrivateModule; -import com.google.inject.Provider; -import com.google.inject.Singleton; -import com.google.inject.persist.jpa.JpaPersistModule; - -public class DataSourceOpenfirePersistModule extends PrivateModule { - public static final Key<CustomPersistFilter> MY_DATA_SOURCE_TWO_FILTER_KEY = Key.get( - CustomPersistFilter.class, DataSourceOpenfire.class); - - @Override - public void configure() { - final JpaPersistModule jpm = new JpaPersistModule("openfire"); - // jpm.properties(new Properties()); - - final Properties dbProperties = new Properties(); - dbProperties.setProperty( - "hibernate.connection.url", - "jdbc:mysql://localhost/openfire4?createDatabaseIfNotExist=false&useUnicode=true&characterEncoding=UTF-8"); - // kuneProperties.get(KuneProperties.SITE_DB_URL)); - dbProperties.setProperty("hibernate.connection.username", "openfire"); - // kuneProperties.get(KuneProperties.SITE_DB_USER)); - dbProperties.setProperty("hibernate.connection.password", "easyeasy"); - dbProperties.setProperty("exclude-unlisted-classes", "true"); - - // kuneProperties.get(KuneProperties.SITE_DB_PASSWORD)); - - jpm.properties(dbProperties); - install(jpm.addFinder(OpenfireXmppRosterFinder.class)); - expose(OpenfireXmppRosterFinder.class); - - bind(XmppRosterProvider.class).to(OpenfireXmppRosterProvider.class).in(Singleton.class); - expose(XmppRosterProvider.class); - - bind(Session.class).annotatedWith(DataSourceOpenfire.class).toProvider( - DataSourceOpenfireSessionProvider.class); - expose(Session.class).annotatedWith(DataSourceOpenfire.class); - - final Provider<EntityManager> entityManagerProvider = binder().getProvider(EntityManager.class); - bind(EntityManager.class).annotatedWith(DataSourceOpenfire.class).toProvider(entityManagerProvider); - expose(EntityManager.class).annotatedWith(DataSourceOpenfire.class); - - bind(MY_DATA_SOURCE_TWO_FILTER_KEY).to(CustomPersistFilter.class); - expose(MY_DATA_SOURCE_TWO_FILTER_KEY); - - // bind(KunePersistenceInitializer.class).asEagerSingleton(); - } -} \ No newline at end of file Deleted: trunk/src/main/java/cc/kune/core/server/DataSourceOpenfireSessionProvider.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/DataSourceOpenfireSessionProvider.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/DataSourceOpenfireSessionProvider.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -1,26 +0,0 @@ -package cc.kune.core.server; - -import javax.persistence.EntityManager; - -import org.hibernate.Session; - -import com.google.inject.Inject; -import com.google.inject.Provider; - -public class DataSourceOpenfireSessionProvider implements Provider<Session> { - /** The entity manger to retrieve the session from. */ - @Inject - @DataSourceOpenfire - private Provider<EntityManager> entityManagerProvider; - - /** - * @return the Hibernate session, being the delegate of the entity manager - * provided by the injected entity manager provider. - */ - @Override - public Session get() { - final Session session = (Session) entityManagerProvider.get().getDelegate(); - // configure session i.e. flush mode or filtering - return session; - } -}; \ No newline at end of file Deleted: trunk/src/main/java/cc/kune/core/server/GenericPersistenceInitializer.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/GenericPersistenceInitializer.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/GenericPersistenceInitializer.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -1,12 +0,0 @@ -package cc.kune.core.server; - -import com.google.inject.Inject; -import com.google.inject.persist.PersistService; - -public class GenericPersistenceInitializer { - @Inject - GenericPersistenceInitializer(final PersistService service) { - service.start(); - // At this point JPA is started and ready. - } -} \ No newline at end of file Modified: trunk/src/main/java/cc/kune/core/server/KuneContainerListener.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/KuneContainerListener.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/KuneContainerListener.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -31,6 +31,7 @@ import org.apache.log4j.PropertyConfigurator; +import cc.kune.core.server.persist.KunePersistenceService; import cc.kune.core.server.rack.ContainerListener; import com.google.inject.Inject; Deleted: trunk/src/main/java/cc/kune/core/server/KunePersistenceService.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/KunePersistenceService.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/KunePersistenceService.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -1,41 +0,0 @@ -/* - * - * Copyright (C) 2007-2011 The kune development team (see CREDITS for details) - * This file is part of kune. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program 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 Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ -package cc.kune.core.server; - -import cc.kune.core.server.error.ServerException; -import cc.kune.core.server.init.DatabaseInitializer; - -import com.google.inject.Inject; -import com.google.inject.Singleton; - -@Singleton -public class KunePersistenceService { - @Inject - DatabaseInitializer databaseInitializer; - - public void start() { - try { - databaseInitializer.initConditional(); - } catch (final Exception e) { - throw new ServerException("Error starting persistence service", e); - } - } - -} Modified: trunk/src/main/java/cc/kune/core/server/KuneRackModule.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/KuneRackModule.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/KuneRackModule.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -40,6 +40,7 @@ import cc.kune.core.server.manager.file.FileUploadManager; import cc.kune.core.server.manager.file.UserLogoDownloadManager; import cc.kune.core.server.manager.impl.GroupServerUtils; +import cc.kune.core.server.persist.DataSourceKunePersistModule; import cc.kune.core.server.rack.RackBuilder; import cc.kune.core.server.rack.RackModule; import cc.kune.core.server.rack.filters.ForwardFilter; Deleted: trunk/src/main/java/cc/kune/core/server/KuneTransactional.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/KuneTransactional.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/KuneTransactional.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -1,29 +0,0 @@ -package cc.kune.core.server; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Inherited; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Target({ ElementType.METHOD, ElementType.TYPE }) -@Retention(RetentionPolicy.RUNTIME) -@Inherited -public @interface KuneTransactional { - - /** - * A list of exceptions to <b>not<b> rollback on. A caveat to the rollbackOn - * clause. The disjunction of rollbackOn and ignore represents the list of - * exceptions that will trigger a rollback. The complement of rollbackOn and - * the universal set plus any exceptions in the ignore set represents the list - * of exceptions that will trigger a commit. Note that ignore exceptions take - * precedence over rollbackOn, but with subtype granularity. - */ - Class<? extends Exception>[] ignore() default {}; - - /** - * A list of exceptions to rollback on, if thrown by the transactional method. - * These exceptions are propagated correctly after a rollback. - */ - Class<? extends Exception>[] rollbackOn() default RuntimeException.class; -} \ No newline at end of file Modified: trunk/src/main/java/cc/kune/core/server/PlatformServerModule.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/PlatformServerModule.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/PlatformServerModule.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -91,6 +91,7 @@ import cc.kune.core.server.notifier.NotificationSenderDefault; import cc.kune.core.server.notifier.PendingNotificationSender; import cc.kune.core.server.notifier.UsersOnline; +import cc.kune.core.server.persist.KunePersistenceService; import cc.kune.core.server.rpc.ContentRPC; import cc.kune.core.server.rpc.GroupRPC; import cc.kune.core.server.rpc.I18nRPC; Modified: trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -30,11 +30,11 @@ import cc.kune.core.client.errors.DefaultException; import cc.kune.core.client.errors.MoveOnSameContainerException; import cc.kune.core.client.errors.NameInUseException; -import cc.kune.core.server.DataSourceKune; import cc.kune.core.server.manager.SearchResult; import cc.kune.core.server.manager.file.FileUtils; import cc.kune.core.server.manager.impl.DefaultManager; import cc.kune.core.server.manager.impl.ServerManagerException; +import cc.kune.core.server.persist.DataSourceKune; import cc.kune.core.server.utils.FilenameUtils; import cc.kune.domain.AccessLists; import cc.kune.domain.Container; Modified: trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -46,7 +46,6 @@ import cc.kune.core.client.errors.MoveOnSameContainerException; import cc.kune.core.client.errors.NameInUseException; import cc.kune.core.client.errors.UserNotFoundException; -import cc.kune.core.server.DataSourceKune; import cc.kune.core.server.access.FinderService; import cc.kune.core.server.manager.SearchResult; import cc.kune.core.server.manager.TagUserContentManager; @@ -54,6 +53,7 @@ import cc.kune.core.server.manager.impl.DefaultManager; import cc.kune.core.server.manager.impl.GroupServerUtils; import cc.kune.core.server.manager.impl.ServerManagerException; +import cc.kune.core.server.persist.DataSourceKune; import cc.kune.core.server.tool.ServerTool; import cc.kune.core.server.tool.ServerToolRegistry; import cc.kune.core.server.utils.FilenameUtils; Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/ExtMediaDescripManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/manager/impl/ExtMediaDescripManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/manager/impl/ExtMediaDescripManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -23,8 +23,8 @@ import javax.persistence.EntityManager; -import cc.kune.core.server.DataSourceKune; import cc.kune.core.server.manager.ExtMediaDescripManager; +import cc.kune.core.server.persist.DataSourceKune; import cc.kune.domain.ExtMediaDescrip; import cc.kune.domain.finders.ExtMediaDescripFinder; Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/GroupManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/manager/impl/GroupManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/manager/impl/GroupManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -39,12 +39,12 @@ import cc.kune.core.client.errors.GroupLongNameInUseException; import cc.kune.core.client.errors.GroupShortNameInUseException; import cc.kune.core.client.errors.UserMustBeLoggedException; -import cc.kune.core.server.DataSourceKune; import cc.kune.core.server.manager.FileManager; import cc.kune.core.server.manager.GroupManager; import cc.kune.core.server.manager.LicenseManager; import cc.kune.core.server.manager.SearchResult; import cc.kune.core.server.manager.file.FileUtils; +import cc.kune.core.server.persist.DataSourceKune; import cc.kune.core.server.properties.KuneBasicProperties; import cc.kune.core.server.properties.KuneProperties; import cc.kune.core.server.tool.ServerTool; Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/I18nCountryManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/manager/impl/I18nCountryManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/manager/impl/I18nCountryManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -23,8 +23,8 @@ import javax.persistence.EntityManager; -import cc.kune.core.server.DataSourceKune; import cc.kune.core.server.manager.I18nCountryManager; +import cc.kune.core.server.persist.DataSourceKune; import cc.kune.domain.I18nCountry; import cc.kune.domain.finders.I18nCountryFinder; Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/I18nLanguageManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/manager/impl/I18nLanguageManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/manager/impl/I18nLanguageManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -23,8 +23,8 @@ import javax.persistence.EntityManager; -import cc.kune.core.server.DataSourceKune; import cc.kune.core.server.manager.I18nLanguageManager; +import cc.kune.core.server.persist.DataSourceKune; import cc.kune.domain.I18nLanguage; import cc.kune.domain.finders.I18nLanguageFinder; Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/I18nTranslationManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/manager/impl/I18nTranslationManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/manager/impl/I18nTranslationManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -27,9 +27,9 @@ import cc.kune.common.shared.utils.TextUtils; import cc.kune.core.client.errors.DefaultException; -import cc.kune.core.server.DataSourceKune; import cc.kune.core.server.manager.I18nLanguageManager; import cc.kune.core.server.manager.I18nTranslationManager; +import cc.kune.core.server.persist.DataSourceKune; import cc.kune.core.shared.dto.I18nTranslationDTO; import cc.kune.core.shared.dto.SearchResultDTO; import cc.kune.domain.I18nLanguage; Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/LicenseManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/manager/impl/LicenseManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/manager/impl/LicenseManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -23,8 +23,8 @@ import javax.persistence.EntityManager; -import cc.kune.core.server.DataSourceKune; import cc.kune.core.server.manager.LicenseManager; +import cc.kune.core.server.persist.DataSourceKune; import cc.kune.core.server.properties.KuneBasicProperties; import cc.kune.domain.License; import cc.kune.domain.finders.LicenseFinder; Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/RateManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/manager/impl/RateManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/manager/impl/RateManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -22,8 +22,8 @@ import javax.persistence.EntityManager; import javax.persistence.NoResultException; -import cc.kune.core.server.DataSourceKune; import cc.kune.core.server.manager.RateManager; +import cc.kune.core.server.persist.DataSourceKune; import cc.kune.domain.Content; import cc.kune.domain.Rate; import cc.kune.domain.User; Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/SocialNetworkManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/manager/impl/SocialNetworkManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/manager/impl/SocialNetworkManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -30,11 +30,11 @@ import cc.kune.core.client.errors.InvalidSNOperationException; import cc.kune.core.client.errors.LastAdminInGroupException; import cc.kune.core.client.errors.UserMustBeLoggedException; -import cc.kune.core.server.DataSourceKune; import cc.kune.core.server.access.AccessRightsService; import cc.kune.core.server.error.ServerException; import cc.kune.core.server.manager.SocialNetworkManager; import cc.kune.core.server.manager.UserManager; +import cc.kune.core.server.persist.DataSourceKune; import cc.kune.core.shared.domain.AdmissionType; import cc.kune.core.shared.domain.GroupListMode; import cc.kune.core.shared.domain.SocialNetworkVisibility; Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/TagManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/manager/impl/TagManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/manager/impl/TagManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -21,8 +21,8 @@ import javax.persistence.EntityManager; -import cc.kune.core.server.DataSourceKune; import cc.kune.core.server.manager.TagManager; +import cc.kune.core.server.persist.DataSourceKune; import cc.kune.domain.Tag; import cc.kune.domain.finders.TagFinder; Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/TagUserContentManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/manager/impl/TagUserContentManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/manager/impl/TagUserContentManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -26,9 +26,9 @@ import javax.persistence.NoResultException; import cc.kune.common.shared.utils.TextUtils; -import cc.kune.core.server.DataSourceKune; import cc.kune.core.server.manager.TagManager; import cc.kune.core.server.manager.TagUserContentManager; +import cc.kune.core.server.persist.DataSourceKune; import cc.kune.core.shared.domain.TagCloudResult; import cc.kune.core.shared.domain.TagCount; import cc.kune.domain.Content; Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/ToolConfigurationManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/manager/impl/ToolConfigurationManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/manager/impl/ToolConfigurationManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -21,8 +21,8 @@ import javax.persistence.EntityManager; -import cc.kune.core.server.DataSourceKune; import cc.kune.core.server.manager.ToolConfigurationManager; +import cc.kune.core.server.persist.DataSourceKune; import cc.kune.domain.ToolConfiguration; import com.google.inject.Inject; Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -58,7 +58,6 @@ import cc.kune.core.client.errors.WrongCurrentPasswordException; import cc.kune.core.client.state.SiteTokens; import cc.kune.core.client.state.TokenUtils; -import cc.kune.core.server.DataSourceKune; import cc.kune.core.server.i18n.I18nTranslationServiceMultiLang; import cc.kune.core.server.manager.GroupManager; import cc.kune.core.server.manager.I18nCountryManager; @@ -66,6 +65,7 @@ import cc.kune.core.server.manager.SearchResult; import cc.kune.core.server.manager.UserManager; import cc.kune.core.server.notifier.NotificationService; +import cc.kune.core.server.persist.DataSourceKune; import cc.kune.core.server.properties.ChatProperties; import cc.kune.core.server.properties.KuneBasicProperties; import cc.kune.core.server.xmpp.ChatConnection; Copied: trunk/src/main/java/cc/kune/core/server/persist/CustomPersistFilter.java (from rev 1742, trunk/src/main/java/cc/kune/core/server/CustomPersistFilter.java) =================================================================== --- trunk/src/main/java/cc/kune/core/server/persist/CustomPersistFilter.java (rev 0) +++ trunk/src/main/java/cc/kune/core/server/persist/CustomPersistFilter.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -0,0 +1,111 @@ +/** + * Copyright (C) 2010 Google, Inc. + * + * Licensed 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. + */ +package cc.kune.core.server.persist; + +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 com.google.inject.Inject; +import com.google.inject.Singleton; +import com.google.inject.persist.PersistService; +import com.google.inject.persist.UnitOfWork; + +/** + * Apply this filter to enable the HTTP Request unit of work and to have + * guice-persist manage the lifecycle of active units of work. The filter + * automatically starts and stops the relevant {@link PersistService} upon + * {@link javax.servlet.Filter#init(javax.servlet.FilterConfig)} and + * {@link javax.servlet.Filter#destroy()} respectively. + * + * <p> + * To be able to use the open session-in-view pattern (i.e. work per request), + * register this filter <b>once</b> in your Guice {@code ServletModule}. It is + * important that you register this filter before any other filter. + * + * For multiple providers, you should register this filter once per provider, + * inside a private module for each persist module installed (this must be the + * same private module where the specific persist module is itself installed). + * + * <p> + * Example configuration: + * + * <pre> + * { + * @code + * public class MyModule extends ServletModule { + * public void configureServlets() { + * filter("/*").through(PersistFilter.class); + * + * serve("/index.html").with(MyHtmlServlet.class); + * // Etc. + * } + * } + * } + * </pre> + * <p> + * This filter is thread safe and allows you to create injectors concurrently + * and deploy multiple guice-persist modules within the same injector, or even + * multiple injectors with persist modules withing the same JVM or web app. + * <p> + * This filter requires the Guice Servlet extension. + * + * @author Dhanji R. Prasanna ([email protected]) + * + * (Custom PersistFilter.class modified for kune needs without + * persistence start/stop) + */ + +@Singleton +public class CustomPersistFilter implements Filter { + private final PersistService persistService; + private final UnitOfWork unitOfWork; + + @Inject + public CustomPersistFilter(final UnitOfWork unitOfWork, final PersistService persistService) { + this.unitOfWork = unitOfWork; + this.persistService = persistService; + } + + @Override + public void destroy() { + // Commented in kune + // persistService.stop(); + } + + @Override + public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, + final FilterChain filterChain) throws IOException, ServletException { + + unitOfWork.begin(); + try { + filterChain.doFilter(servletRequest, servletResponse); + } finally { + unitOfWork.end(); + } + } + + @Override + public void init(final FilterConfig filterConfig) throws ServletException { + // Commented in kune (because if not this is started twice) + // persistService.start(); + } +} \ No newline at end of file Copied: trunk/src/main/java/cc/kune/core/server/persist/DataSourceKune.java (from rev 1742, trunk/src/main/java/cc/kune/core/server/DataSourceKune.java) =================================================================== --- trunk/src/main/java/cc/kune/core/server/persist/DataSourceKune.java (rev 0) +++ trunk/src/main/java/cc/kune/core/server/persist/DataSourceKune.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -0,0 +1,17 @@ +package cc.kune.core.server.persist; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.google.inject.BindingAnnotation; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ FIELD, PARAMETER, METHOD }) +@BindingAnnotation +public @interface DataSourceKune { +} \ No newline at end of file Copied: trunk/src/main/java/cc/kune/core/server/persist/DataSourceKunePersistModule.java (from rev 1744, trunk/src/main/java/cc/kune/core/server/DataSourceKunePersistModule.java) =================================================================== --- trunk/src/main/java/cc/kune/core/server/persist/DataSourceKunePersistModule.java (rev 0) +++ trunk/src/main/java/cc/kune/core/server/persist/DataSourceKunePersistModule.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -0,0 +1,144 @@ +package cc.kune.core.server.persist; + +import java.util.Properties; + +import javax.persistence.EntityManager; + +import org.apache.commons.configuration.SystemConfiguration; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.hibernate.Session; + +import cc.kune.core.server.properties.KuneProperties; +import cc.kune.core.server.properties.KunePropertiesDefault; +import cc.kune.domain.finders.ContainerFinder; +import cc.kune.domain.finders.ContentFinder; +import cc.kune.domain.finders.ExtMediaDescripFinder; +import cc.kune.domain.finders.GroupFinder; +import cc.kune.domain.finders.I18nCountryFinder; +import cc.kune.domain.finders.I18nLanguageFinder; +import cc.kune.domain.finders.I18nTranslationFinder; +import cc.kune.domain.finders.LicenseFinder; +import cc.kune.domain.finders.RateFinder; +import cc.kune.domain.finders.TagFinder; +import cc.kune.domain.finders.TagUserContentFinder; +import cc.kune.domain.finders.UserFinder; + +import com.google.inject.AbstractModule; +import com.google.inject.Key; +import com.google.inject.Provider; +import com.google.inject.persist.jpa.JpaPersistModule; + +public class DataSourceKunePersistModule extends AbstractModule { + // FIXME Trying to make this PrivateModule so we can have two Persist sources + // http://code.google.com/p/google-guice/wiki/GuicePersistMultiModules + + public static final Log LOG = LogFactory.getLog(DataSourceKunePersistModule.class); + public static final Key<CustomPersistFilter> MY_DATA_SOURCE_ONE_FILTER_KEY = Key.get( + CustomPersistFilter.class, DataSourceKune.class); + private String settedJpaUnit = null; + private String settedProperties = null; + + /** + * Instantiates this module (main constructor) + */ + public DataSourceKunePersistModule() { + } + + /** + * Instantiates this module only during tests + * + * @param settedProperties + * the setted properties + * @param settedJpaUnit + * the setted jpa unit + */ + public DataSourceKunePersistModule(final String settedProperties, final String settedJpaUnit) { + this.settedProperties = settedProperties; + this.settedJpaUnit = settedJpaUnit; + } + + @Override + public void configure() { + final SystemConfiguration sysConf = new SystemConfiguration(); + final String kuneConfig = settedProperties != null ? settedProperties + : sysConf.getString("kune.server.config"); + + final KunePropertiesDefault kuneProperties = new KunePropertiesDefault(kuneConfig); + bind(KuneProperties.class).toInstance(kuneProperties); + + // precedence method param > properties + final String configuredJpaUnit = kuneProperties.get(KuneProperties.SITE_DB_PERSISTENCE_NAME); + final String jpaUnit = settedJpaUnit != null ? settedJpaUnit + : configuredJpaUnit != null ? configuredJpaUnit : "development"; + LOG.info(String.format("Using persistence unit '%s' and properties '%s'", jpaUnit, kuneConfig)); + + final JpaPersistModule jpm = new JpaPersistModule(jpaUnit); + + if (!jpaUnit.equals("test")) { + // In tests (and development) we don't override this db info) + final Properties dbProperties = new Properties(); + dbProperties.setProperty("hibernate.connection.url", + kuneProperties.get(KuneProperties.SITE_DB_URL)); + dbProperties.setProperty("hibernate.connection.username", + kuneProperties.get(KuneProperties.SITE_DB_USER)); + dbProperties.setProperty("hibernate.connection.password", + kuneProperties.get(KuneProperties.SITE_DB_PASSWORD)); + jpm.properties(dbProperties); + } + + jpm.addFinder(ContainerFinder.class); + jpm.addFinder(ContentFinder.class); + jpm.addFinder(ExtMediaDescripFinder.class); + jpm.addFinder(GroupFinder.class); + jpm.addFinder(I18nCountryFinder.class); + jpm.addFinder(I18nLanguageFinder.class); + jpm.addFinder(I18nTranslationFinder.class); + jpm.addFinder(LicenseFinder.class); + jpm.addFinder(RateFinder.class); + jpm.addFinder(TagFinder.class); + jpm.addFinder(TagUserContentFinder.class); + jpm.addFinder(UserFinder.class); + install(jpm); + + bind(Session.class).annotatedWith(DataSourceKune.class).toProvider( + DataSourceKuneSessionProvider.class); + + // FIXME: Trying to use a custom JpaLocalTxnInterceptor because when this + // module is private the objects are not persisted with the guice-persist + // @Transactional + + // final KuneJpaLocalTxnInterceptor transactionInterceptor = new + // KuneJpaLocalTxnInterceptor(); + // requestInjection(transactionInterceptor); + // + // bindInterceptor(annotatedWith(KuneTransactional.class), any(), + // transactionInterceptor); + // bindInterceptor(any(), annotatedWith(KuneTransactional.class), + // transactionInterceptor); + + final Provider<EntityManager> entityManagerProvider = binder().getProvider(EntityManager.class); + bind(EntityManager.class).annotatedWith(DataSourceKune.class).toProvider(entityManagerProvider); + + bind(MY_DATA_SOURCE_ONE_FILTER_KEY).to(CustomPersistFilter.class); + + // expose(EntityManager.class).annotatedWith(DataSourceKune.class); + // expose(Session.class).annotatedWith(DataSourceKune.class); + // expose(KuneProperties.class); + // expose(ContainerFinder.class); + // expose(ContentFinder.class); + // expose(ExtMediaDescripFinder.class); + // expose(GroupFinder.class); + // expose(I18nCountryFinder.class); + // expose(I18nLanguageFinder.class); + // expose(I18nTranslationFinder.class); + // expose(LicenseFinder.class); + // expose(RateFinder.class); + // expose(TagFinder.class); + // expose(TagUserContentFinder.class); + // expose(UserFinder.class); + // expose(MY_DATA_SOURCE_ONE_FILTER_KEY); + + bind(GenericPersistenceInitializer.class).asEagerSingleton(); + } +} \ No newline at end of file Copied: trunk/src/main/java/cc/kune/core/server/persist/DataSourceKuneSessionProvider.java (from rev 1742, trunk/src/main/java/cc/kune/core/server/DataSourceKuneSessionProvider.java) =================================================================== --- trunk/src/main/java/cc/kune/core/server/persist/DataSourceKuneSessionProvider.java (rev 0) +++ trunk/src/main/java/cc/kune/core/server/persist/DataSourceKuneSessionProvider.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -0,0 +1,26 @@ +package cc.kune.core.server.persist; + +import javax.persistence.EntityManager; + +import org.hibernate.Session; + +import com.google.inject.Inject; +import com.google.inject.Provider; + +public class DataSourceKuneSessionProvider implements Provider<Session> { + /** The entity manger to retrieve the session from. */ + @Inject + @DataSourceKune + private Provider<EntityManager> entityManagerProvider; + + /** + * @return the Hibernate session, being the delegate of the entity manager + * provided by the injected entity manager provider. + */ + @Override + public Session get() { + final Session session = (Session) entityManagerProvider.get().getDelegate(); + // configure session i.e. flush mode or filtering + return session; + } +}; \ No newline at end of file Copied: trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfire.java (from rev 1742, trunk/src/main/java/cc/kune/core/server/DataSourceOpenfire.java) =================================================================== --- trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfire.java (rev 0) +++ trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfire.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -0,0 +1,17 @@ +package cc.kune.core.server.persist; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.google.inject.BindingAnnotation; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ FIELD, PARAMETER, METHOD }) +@BindingAnnotation +public @interface DataSourceOpenfire { +} \ No newline at end of file Copied: trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfirePersistModule.java (from rev 1742, trunk/src/main/java/cc/kune/core/server/DataSourceOpenfirePersistModule.java) =================================================================== --- trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfirePersistModule.java (rev 0) +++ trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfirePersistModule.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -0,0 +1,60 @@ +package cc.kune.core.server.persist; + +import java.util.Properties; + +import javax.persistence.EntityManager; + +import org.hibernate.Session; + +import cc.kune.core.server.xmpp.OpenfireXmppRosterFinder; +import cc.kune.core.server.xmpp.OpenfireXmppRosterProvider; +import cc.kune.core.server.xmpp.XmppRosterProvider; + +import com.google.inject.Key; +import com.google.inject.PrivateModule; +import com.google.inject.Provider; +import com.google.inject.Singleton; +import com.google.inject.persist.jpa.JpaPersistModule; + +public class DataSourceOpenfirePersistModule extends PrivateModule { + public static final Key<CustomPersistFilter> MY_DATA_SOURCE_TWO_FILTER_KEY = Key.get( + CustomPersistFilter.class, DataSourceOpenfire.class); + + @Override + public void configure() { + final JpaPersistModule jpm = new JpaPersistModule("openfire"); + // jpm.properties(new Properties()); + + final Properties dbProperties = new Properties(); + dbProperties.setProperty( + "hibernate.connection.url", + "jdbc:mysql://localhost/openfire4?createDatabaseIfNotExist=false&useUnicode=true&characterEncoding=UTF-8"); + // kuneProperties.get(KuneProperties.SITE_DB_URL)); + dbProperties.setProperty("hibernate.connection.username", "openfire"); + // kuneProperties.get(KuneProperties.SITE_DB_USER)); + dbProperties.setProperty("hibernate.connection.password", "easyeasy"); + dbProperties.setProperty("exclude-unlisted-classes", "true"); + + // kuneProperties.get(KuneProperties.SITE_DB_PASSWORD)); + + jpm.properties(dbProperties); + install(jpm.addFinder(OpenfireXmppRosterFinder.class)); + expose(OpenfireXmppRosterFinder.class); + + bind(XmppRosterProvider.class).to(OpenfireXmppRosterProvider.class).in(Singleton.class); + expose(XmppRosterProvider.class); + + bind(Session.class).annotatedWith(DataSourceOpenfire.class).toProvider( + DataSourceOpenfireSessionProvider.class); + expose(Session.class).annotatedWith(DataSourceOpenfire.class); + + final Provider<EntityManager> entityManagerProvider = binder().getProvider(EntityManager.class); + bind(EntityManager.class).annotatedWith(DataSourceOpenfire.class).toProvider(entityManagerProvider); + expose(EntityManager.class).annotatedWith(DataSourceOpenfire.class); + + bind(MY_DATA_SOURCE_TWO_FILTER_KEY).to(CustomPersistFilter.class); + expose(MY_DATA_SOURCE_TWO_FILTER_KEY); + + // bind(KunePersistenceInitializer.class).asEagerSingleton(); + } +} \ No newline at end of file Copied: trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfireSessionProvider.java (from rev 1742, trunk/src/main/java/cc/kune/core/server/DataSourceOpenfireSessionProvider.java) =================================================================== --- trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfireSessionProvider.java (rev 0) +++ trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfireSessionProvider.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -0,0 +1,26 @@ +package cc.kune.core.server.persist; + +import javax.persistence.EntityManager; + +import org.hibernate.Session; + +import com.google.inject.Inject; +import com.google.inject.Provider; + +public class DataSourceOpenfireSessionProvider implements Provider<Session> { + /** The entity manger to retrieve the session from. */ + @Inject + @DataSourceOpenfire + private Provider<EntityManager> entityManagerProvider; + + /** + * @return the Hibernate session, being the delegate of the entity manager + * provided by the injected entity manager provider. + */ + @Override + public Session get() { + final Session session = (Session) entityManagerProvider.get().getDelegate(); + // configure session i.e. flush mode or filtering + return session; + } +}; \ No newline at end of file Copied: trunk/src/main/java/cc/kune/core/server/persist/GenericPersistenceInitializer.java (from rev 1742, trunk/src/main/java/cc/kune/core/server/GenericPersistenceInitializer.java) =================================================================== --- trunk/src/main/java/cc/kune/core/server/persist/GenericPersistenceInitializer.java (rev 0) +++ trunk/src/main/java/cc/kune/core/server/persist/GenericPersistenceInitializer.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -0,0 +1,12 @@ +package cc.kune.core.server.persist; + +import com.google.inject.Inject; +import com.google.inject.persist.PersistService; + +public class GenericPersistenceInitializer { + @Inject + GenericPersistenceInitializer(final PersistService service) { + service.start(); + // At this point JPA is started and ready. + } +} \ No newline at end of file Copied: trunk/src/main/java/cc/kune/core/server/persist/KunePersistenceService.java (from rev 1742, trunk/src/main/java/cc/kune/core/server/KunePersistenceService.java) =================================================================== --- trunk/src/main/java/cc/kune/core/server/persist/KunePersistenceService.java (rev 0) +++ trunk/src/main/java/cc/kune/core/server/persist/KunePersistenceService.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -0,0 +1,41 @@ +/* + * + * Copyright (C) 2007-2011 The kune development team (see CREDITS for details) + * This file is part of kune. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ +package cc.kune.core.server.persist; + +import cc.kune.core.server.error.ServerException; +import cc.kune.core.server.init.DatabaseInitializer; + +import com.google.inject.Inject; +import com.google.inject.Singleton; + +@Singleton +public class KunePersistenceService { + @Inject + DatabaseInitializer databaseInitializer; + + public void start() { + try { + databaseInitializer.initConditional(); + } catch (final Exception e) { + throw new ServerException("Error starting persistence service", e); + } + } + +} Copied: trunk/src/main/java/cc/kune/core/server/persist/KuneTransactional.java (from rev 1744, trunk/src/main/java/cc/kune/core/server/KuneTransactional.java) =================================================================== --- trunk/src/main/java/cc/kune/core/server/persist/KuneTransactional.java (rev 0) +++ trunk/src/main/java/cc/kune/core/server/persist/KuneTransactional.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -0,0 +1,29 @@ +package cc.kune.core.server.persist; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ ElementType.METHOD, ElementType.TYPE }) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +public @interface KuneTransactional { + + /** + * A list of exceptions to <b>not<b> rollback on. A caveat to the rollbackOn + * clause. The disjunction of rollbackOn and ignore represents the list of + * exceptions that will trigger a rollback. The complement of rollbackOn and + * the universal set plus any exceptions in the ignore set represents the list + * of exceptions that will trigger a commit. Note that ignore exceptions take + * precedence over rollbackOn, but with subtype granularity. + */ + Class<? extends Exception>[] ignore() default {}; + + /** + * A list of exceptions to rollback on, if thrown by the transactional method. + * These exceptions are propagated correctly after a rollback. + */ + Class<? extends Exception>[] rollbackOn() default RuntimeException.class; +} \ No newline at end of file Modified: trunk/src/main/java/cc/kune/core/server/xmpp/OpenfireXmppRosterProvider.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/xmpp/OpenfireXmppRosterProvider.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/core/server/xmpp/OpenfireXmppRosterProvider.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -5,8 +5,8 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import cc.kune.core.server.DataSourceOpenfire; import cc.kune.core.server.manager.impl.DefaultManager; +import cc.kune.core.server.persist.DataSourceOpenfire; import com.google.inject.Inject; import com.google.inject.Provider; Modified: trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPresenter.java =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPresenter.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPresenter.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -43,7 +43,7 @@ public class UserOptGeneralPresenter extends EntityOptGeneralPresenter implements UserOptGeneral { - private boolean changeLanguage = true; + private boolean askChangeLanguage = true; private final Provider<UserServiceAsync> userService; private final UserOptGeneralView userView; @@ -128,8 +128,8 @@ @Override public void onSuccess(final StateAbstractDTO result) { NotifyUser.hideProgress(); - if (changeLanguage) { - i18n.changeToLanguageIfNecessary(lang.getCode(), lang.getEnglishName(), true, + if (askChangeLanguage) { + i18n.changeToLanguageIfNecessary(lang.getCode(), i18n.t(lang.getEnglishName()), true, new I18nLanguageChangeNeeded() { @Override public void onChangeNeeded() { @@ -137,7 +137,7 @@ @Override public void onChangeNotNeeded() { - changeLanguage = false; + askChangeLanguage = false; stateManager.setRetrievedStateAndGo(result); sendChangeEntityEvent(); } Modified: trunk/src/test/java/cc/kune/core/server/PersistenceTest.java =================================================================== --- trunk/src/test/java/cc/kune/core/server/PersistenceTest.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/test/java/cc/kune/core/server/PersistenceTest.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -24,6 +24,8 @@ import org.junit.Before; +import cc.kune.core.server.persist.DataSourceKune; + import com.google.inject.Inject; import com.google.inject.Injector; import com.google.inject.Provider; Modified: trunk/src/test/java/cc/kune/core/server/TestHelper.java =================================================================== --- trunk/src/test/java/cc/kune/core/server/TestHelper.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/test/java/cc/kune/core/server/TestHelper.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -34,6 +34,7 @@ import org.waveprotocol.wave.federation.noop.NoOpFederationModule; import cc.kune.core.server.integration.HttpServletRequestMocked; +import cc.kune.core.server.persist.DataSourceKunePersistModule; import cc.kune.wave.server.CustomSettingsBinder; import com.google.inject.Binder; Modified: trunk/src/test/java/cc/kune/core/server/integration/IntegrationTestHelper.java =================================================================== --- trunk/src/test/java/cc/kune/core/server/integration/IntegrationTestHelper.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/test/java/cc/kune/core/server/integration/IntegrationTestHelper.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -32,10 +32,10 @@ import cc.kune.barters.server.BarterServerModule; import cc.kune.chat.server.ChatServerModule; -import cc.kune.core.server.KunePersistenceService; -import cc.kune.core.server.DataSourceKunePersistModule; import cc.kune.core.server.PlatformServerModule; import cc.kune.core.server.TestConstants; +import cc.kune.core.server.persist.DataSourceKunePersistModule; +import cc.kune.core.server.persist.KunePersistenceService; import cc.kune.docs.server.DocumentServerModule; import cc.kune.events.server.EventsServerModule; import cc.kune.lists.server.ListsServerModule; Modified: trunk/src/test/java/com/google/inject/persist/jpa/KuneJpaLocalTxnInterceptor.java =================================================================== --- trunk/src/test/java/com/google/inject/persist/jpa/KuneJpaLocalTxnInterceptor.java 2012-03-07 04:59:48 UTC (rev 1745) +++ trunk/src/test/java/com/google/inject/persist/jpa/KuneJpaLocalTxnInterceptor.java 2012-03-07 12:19:26 UTC (rev 1746) @@ -24,7 +24,7 @@ import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; -import cc.kune.core.server.KuneTransactional; +import cc.kune.core.server.persist.KuneTransactional; import com.google.inject.Inject; import com.google.inject.persist.UnitOfWork;