From 20068f981b98f30e159546562676981cb285dfdd Mon Sep 17 00:00:00 2001 From: Derek Hulley Date: Tue, 6 Mar 2007 07:26:41 +0000 Subject: [PATCH] Upgraded to Hibernate 3.2.1 The code changes were pulled from the fix branch and V1.4 (HIBERNATE_UPGRADE 5207 5293) The jars were manually dropped in again due to the new directory structure git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@5303 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/public-services-context.xml | 333 +----------------- .../metadata/AbstractMetadataExtracter.java | 8 + .../content/metadata/MetadataExtracter.java | 29 +- .../repo/domain/schema/SchemaBootstrap.java | 88 ++++- .../repo/node/BaseNodeServiceTest.java | 2 +- .../HibernateNodeDaoServiceImpl.java | 18 +- .../hibernate/HibernatePermissionTest.java | 23 +- .../repo/service/BeanServiceDescriptor.java | 111 ------ .../service/ServiceDescriptorAdvisor.java | 51 --- .../ServiceDescriptorAdvisorFactory.java | 92 ----- .../service/ServiceDescriptorMetaData.java | 50 --- .../repo/service/ServiceDescriptorMixin.java | 82 ----- .../service/ServiceDescriptorRegistry.java | 44 +-- .../ServiceDescriptorRegistryTest.java | 196 ----------- .../alfresco/repo/service/testregistry.xml | 111 ------ .../alfresco/service/ServiceDescriptor.java | 64 ---- .../org/alfresco/service/ServiceRegistry.java | 9 - 17 files changed, 147 insertions(+), 1164 deletions(-) delete mode 100644 source/java/org/alfresco/repo/service/BeanServiceDescriptor.java delete mode 100644 source/java/org/alfresco/repo/service/ServiceDescriptorAdvisor.java delete mode 100644 source/java/org/alfresco/repo/service/ServiceDescriptorAdvisorFactory.java delete mode 100644 source/java/org/alfresco/repo/service/ServiceDescriptorMetaData.java delete mode 100644 source/java/org/alfresco/repo/service/ServiceDescriptorMixin.java delete mode 100644 source/java/org/alfresco/repo/service/ServiceDescriptorRegistryTest.java delete mode 100644 source/java/org/alfresco/repo/service/testregistry.xml delete mode 100644 source/java/org/alfresco/service/ServiceDescriptor.java diff --git a/config/alfresco/public-services-context.xml b/config/alfresco/public-services-context.xml index cf793d3ad6..e6f7effdfb 100644 --- a/config/alfresco/public-services-context.xml +++ b/config/alfresco/public-services-context.xml @@ -4,38 +4,10 @@ - - - - http://www.alfresco.org - - - - - - org.alfresco.service.ServiceRegistry - - - - - - - - - - - - - - org.alfresco.service.ServiceRegistry - - - Repository service registry - - - + + @@ -52,20 +24,10 @@ - - - - - org.alfresco.service.descriptor.DescriptorService - - - Descriptor service - - - + @@ -81,26 +43,6 @@ - - - - - - - - ${server.transaction.mode.default} - - - - - - - org.alfresco.service.namespace.NamespaceService - - - Namespace service - - @@ -109,33 +51,12 @@ - - - - - - - - ${server.transaction.mode.default} - - - - - - - org.alfresco.service.cmr.dictionary.DictionaryService - - - Dictionary Service - - - + - org.alfresco.service.ServiceDescriptor org.alfresco.service.cmr.repository.NodeService @@ -148,7 +69,6 @@ - @@ -167,15 +87,6 @@ - - - org.alfresco.service.cmr.repository.NodeService - - - Node Service - - - @@ -191,7 +102,6 @@ - @@ -206,29 +116,11 @@ - - - - org.alfresco.service.cmr.repository.ContentService - - - Content Service - - - + - - - org.alfresco.service.cmr.repository.MimetypeService - - - Mime Type Service - - - @@ -244,7 +136,6 @@ - @@ -260,15 +151,6 @@ - - - org.alfresco.service.cmr.search.SearchService - - - Search Service - - - @@ -284,7 +166,6 @@ - @@ -300,15 +181,6 @@ - - - org.alfresco.service.cmr.search.CategoryService - - - Category Service - - - @@ -324,7 +196,6 @@ - @@ -340,15 +211,6 @@ - - - org.alfresco.service.cmr.repository.CopyService - - - Copy Service - - - @@ -364,7 +226,6 @@ - @@ -380,15 +241,6 @@ - - - org.alfresco.service.cmr.lock.LockService - - - Lock Service - - - @@ -404,7 +256,6 @@ - @@ -420,15 +271,6 @@ - - - org.alfresco.service.cmr.version.VersionService - - - Version Service - - - @@ -444,7 +286,6 @@ - @@ -460,15 +301,6 @@ - - - org.alfresco.service.cmr.coci.CheckOutCheckInService - - - Version Service - - - @@ -484,7 +316,6 @@ - @@ -500,15 +331,6 @@ - - - org.alfresco.service.cmr.rule.RuleService - - - Rule Service - - - @@ -524,7 +346,6 @@ - @@ -539,16 +360,7 @@ - - - - org.alfresco.service.cmr.view.ImporterService - - - Importer Service - - - + @@ -562,7 +374,6 @@ - @@ -578,15 +389,6 @@ - - - org.alfresco.service.cmr.view.ExporterService - - - Exporter Service - - - @@ -602,7 +404,6 @@ - @@ -618,15 +419,6 @@ - - - org.alfresco.service.cmr.action.ActionService - - - Action Service - - - @@ -642,7 +434,6 @@ - @@ -658,15 +449,6 @@ - - - org.alfresco.service.cmr.security.PermissionService - - - Permission Service - - - @@ -682,7 +464,6 @@ - @@ -698,15 +479,6 @@ - - - org.alfresco.service.cmr.security.AuthorityService - - - Authority Service - - - @@ -722,7 +494,6 @@ - @@ -738,15 +509,6 @@ - - - org.alfresco.service.cmr.security.OwnableService - - - OwnableService Service - - - @@ -762,7 +524,6 @@ - @@ -778,15 +539,6 @@ - - - org.alfresco.service.cmr.security.PersonService - - - PersonService Service - - - @@ -802,7 +554,6 @@ - @@ -824,15 +575,6 @@ - - - org.alfresco.service.cmr.security.AuthenticationService - - - AuthenticationService Service - - - @@ -848,7 +590,6 @@ - @@ -864,15 +605,6 @@ - - - org.alfresco.service.cmr.repository.TemplateService - - - TemplateService Service - - - @@ -888,7 +620,6 @@ - @@ -904,15 +635,6 @@ - - - org.alfresco.service.cmr.repository.ScriptService - - - ScriptService Service - - - @@ -928,7 +650,6 @@ - @@ -949,15 +670,6 @@ - - - org.alfresco.service.cmr.model.FileFolderService - - - FileFolderService Service - - - @@ -1208,7 +920,6 @@ - @@ -1223,17 +934,7 @@ - - - - org.alfresco.service.cmr.workflow.WorkflowService - - - Workflow Service - - - - + @@ -1249,7 +950,6 @@ - @@ -1265,15 +965,6 @@ - - - org.alfresco.service.cmr.audit.AuditService - - - Audit Service - - - @@ -1288,7 +979,6 @@ - @@ -1304,15 +994,6 @@ - - - org.alfresco.service.cmr.ml.MultilingualContentService - - - Multilingual Content Service - - - diff --git a/source/java/org/alfresco/repo/content/metadata/AbstractMetadataExtracter.java b/source/java/org/alfresco/repo/content/metadata/AbstractMetadataExtracter.java index c332212ab9..8478c0ed12 100644 --- a/source/java/org/alfresco/repo/content/metadata/AbstractMetadataExtracter.java +++ b/source/java/org/alfresco/repo/content/metadata/AbstractMetadataExtracter.java @@ -182,6 +182,14 @@ abstract public class AbstractMetadataExtracter implements MetadataExtracter } } + public final void extract( + ContentReader reader, + Map destination, + Map propertyMapping) throws ContentIOException + { + throw new UnsupportedOperationException(); + } + /** * Override to provide the necessary extraction logic. Implementations must ensure that the reader * is closed before the method exits. diff --git a/source/java/org/alfresco/repo/content/metadata/MetadataExtracter.java b/source/java/org/alfresco/repo/content/metadata/MetadataExtracter.java index 5e9fbae8d5..0872a9da34 100644 --- a/source/java/org/alfresco/repo/content/metadata/MetadataExtracter.java +++ b/source/java/org/alfresco/repo/content/metadata/MetadataExtracter.java @@ -32,8 +32,10 @@ import org.alfresco.service.cmr.repository.ContentReader; import org.alfresco.service.namespace.QName; /** + * Interface for document property extracters. * * @author Jesper Steen Møller + * @author Derek Hulley */ public interface MetadataExtracter { @@ -70,11 +72,32 @@ public interface MetadataExtracter * The source mimetype must be available on the * {@link org.alfresco.service.cmr.repository.ContentAccessor#getMimetype()} method * of the reader. + *

+ * Note: Internally, the extracter may need to perform a mapping of document-specific + * properties to QName. This is an implementation detail that is + * supported in the default abstract implementations. * - * @param reader the source of the content - * @param destination the destination of the extraction - * @throws ContentIOException if an IO exception occurs + * @param reader the source of the content + * @param destination the map of properties to populate (essentially a return value) + * @throws ContentIOException if a detectable error occurs + * + * @see #extract(ContentReader, Map, Map) */ public void extract(ContentReader reader, Map destination) throws ContentIOException; + /** + * + * + * @param reader the source of the content + * @param destination the map of properties to populate (essentially a return value) + * @param propertyMapping a mapping of internal (document-specific properties) to system + * properties. + * @throws ContentIOException if a detectable error occurs + * + * @see #extract(ContentReader, Map) + */ + public void extract( + ContentReader reader, + Map destination, + Map propertyMapping) throws ContentIOException; } diff --git a/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java b/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java index eefd09f71a..96dc4efa75 100644 --- a/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java +++ b/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java @@ -39,6 +39,7 @@ import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; +import java.util.Properties; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.i18n.I18NUtil; @@ -53,10 +54,13 @@ import org.alfresco.util.ApplicationContextHelper; import org.alfresco.util.TempFileProvider; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; +import org.hibernate.cfg.Environment; +import org.hibernate.connection.UserSuppliedConnectionProvider; import org.hibernate.dialect.Dialect; import org.hibernate.tool.hbm2ddl.DatabaseMetadata; import org.hibernate.tool.hbm2ddl.SchemaExport; @@ -110,7 +114,7 @@ public class SchemaBootstrap extends AbstractLifecycleBean { this.localSessionFactory = localSessionFactory; } - + public LocalSessionFactoryBean getLocalSessionFactory() { return localSessionFactory; @@ -630,6 +634,11 @@ public class SchemaBootstrap extends AbstractLifecycleBean connection.setAutoCommit(false); Configuration cfg = localSessionFactory.getConfiguration(); + // Ensure that our static connection provider is used + String defaultConnectionProviderFactoryClass = cfg.getProperty(Environment.CONNECTION_PROVIDER); + cfg.setProperty(Environment.CONNECTION_PROVIDER, SchemaBootstrapConnectionProvider.class.getName()); + SchemaBootstrapConnectionProvider.setBootstrapConnection(connection); + // dump the schema, if required if (schemaOuputFilename != null) { @@ -648,6 +657,9 @@ public class SchemaBootstrap extends AbstractLifecycleBean checkSchemaPatchScripts(cfg, session, connection, preUpdateScriptPatches, false); // check scripts checkSchemaPatchScripts(cfg, session, connection, postUpdateScriptPatches, false); // check scripts + // Reset the configuration + cfg.setProperty(Environment.CONNECTION_PROVIDER, defaultConnectionProviderFactoryClass); + // all done successfully transaction.commit(); } @@ -663,6 +675,12 @@ public class SchemaBootstrap extends AbstractLifecycleBean throw new AlfrescoRuntimeException(ERR_VALIDATION_FAILED, e); } } + finally + { + // Remove the connection reference from the threadlocal boostrap + SchemaBootstrapConnectionProvider.setBootstrapConnection(null); + + } } @Override @@ -671,6 +689,74 @@ public class SchemaBootstrap extends AbstractLifecycleBean // NOOP } + /** + * This is a workaround for the odd Spring-Hibernate interaction during configuration. + * The Hibernate code assumes that schema scripts will be generated during context + * initialization. We want to do it afterwards and have a little more control. Hence this class. + *

+ * The connection that is used will not be closed or manipulated in any way. This class + * merely serves to give the connection to Hibernate. + * + * @author Derek Hulley + */ + public static class SchemaBootstrapConnectionProvider extends UserSuppliedConnectionProvider + { + private static ThreadLocal threadLocalConnection = new ThreadLocal(); + + public SchemaBootstrapConnectionProvider() + { + } + + /** + * Set the connection for Hibernate to use for schema generation. + */ + public static void setBootstrapConnection(Connection connection) + { + threadLocalConnection.set(connection); + } + + /** + * Unsets the connection. + */ + @Override + public void close() + { + // Leave the connection well alone, just remove it + threadLocalConnection.set(null); + } + + /** + * Does nothing. The connection was given by a 3rd party and they can close it. + */ + @Override + public void closeConnection(Connection conn) + { + } + + /** + * Does nothing. + */ + @Override + public void configure(Properties props) throws HibernateException + { + } + + /** + * @see #setBootstrapConnection(Connection) + */ + @Override + public Connection getConnection() + { + return threadLocalConnection.get(); + } + + @Override + public boolean supportsAggressiveRelease() + { + return false; + } + } + private static final String DIR_SCHEMAS = "schemas"; /** * Dump a set of creation files for all known Hibernate dialects. These will be diff --git a/source/java/org/alfresco/repo/node/BaseNodeServiceTest.java b/source/java/org/alfresco/repo/node/BaseNodeServiceTest.java index 3a58d744f7..4c3bbe9b20 100644 --- a/source/java/org/alfresco/repo/node/BaseNodeServiceTest.java +++ b/source/java/org/alfresco/repo/node/BaseNodeServiceTest.java @@ -406,7 +406,7 @@ public abstract class BaseNodeServiceTest extends BaseSpringTest .setString(1, nodeRef.getStoreRef().getProtocol()) .setString(2, nodeRef.getStoreRef().getIdentifier()) .list(); - Integer count = (Integer) results.get(0); + Long count = (Long) results.get(0); return count.intValue(); } diff --git a/source/java/org/alfresco/repo/node/db/hibernate/HibernateNodeDaoServiceImpl.java b/source/java/org/alfresco/repo/node/db/hibernate/HibernateNodeDaoServiceImpl.java index 52c1382085..cd0f89cfa7 100644 --- a/source/java/org/alfresco/repo/node/db/hibernate/HibernateNodeDaoServiceImpl.java +++ b/source/java/org/alfresco/repo/node/db/hibernate/HibernateNodeDaoServiceImpl.java @@ -668,7 +668,7 @@ public class HibernateNodeDaoServiceImpl extends HibernateDaoSupport implements Query query = session .getNamedQuery(HibernateNodeDaoServiceImpl.QUERY_GET_PRIMARY_CHILD_NODE_STATUSES) .setLong("parentId", parentNode.getId()) - .setFlushMode(FlushMode.NEVER); + .setFlushMode(FlushMode.MANUAL); return query.list(); } }; @@ -685,7 +685,7 @@ public class HibernateNodeDaoServiceImpl extends HibernateDaoSupport implements { Query query = session .getNamedQuery(HibernateNodeDaoServiceImpl.QUERY_GET_CHILD_ASSOCS) - .setFlushMode(FlushMode.NEVER) + .setFlushMode(FlushMode.MANUAL) .setLong("parentId", parentNode.getId()); return query.list(); } @@ -703,7 +703,7 @@ public class HibernateNodeDaoServiceImpl extends HibernateDaoSupport implements { Query query = session .getNamedQuery(HibernateNodeDaoServiceImpl.QUERY_GET_CHILD_ASSOC_REFS) - .setFlushMode(FlushMode.NEVER) + .setFlushMode(FlushMode.MANUAL) .setLong("parentId", parentNode.getId()); return query.list(); } @@ -723,7 +723,7 @@ public class HibernateNodeDaoServiceImpl extends HibernateDaoSupport implements { Query query = session .getNamedQuery(HibernateNodeDaoServiceImpl.QUERY_GET_CHILD_ASSOC_REFS_BY_QNAME) - .setFlushMode(FlushMode.NEVER) + .setFlushMode(FlushMode.MANUAL) .setLong("parentId", parentNode.getId()) .setParameter("childAssocQName", assocQName); return query.list(); @@ -1188,9 +1188,9 @@ public class HibernateNodeDaoServiceImpl extends HibernateDaoSupport implements return query.uniqueResult(); } }; - Integer count = (Integer) getHibernateTemplate().execute(callback); + Long count = (Long) getHibernateTemplate().execute(callback); // done - return count; + return count.intValue(); } @SuppressWarnings("unchecked") @@ -1206,9 +1206,9 @@ public class HibernateNodeDaoServiceImpl extends HibernateDaoSupport implements return query.uniqueResult(); } }; - Integer count = (Integer) getHibernateTemplate().execute(callback); + Long count = (Long) getHibernateTemplate().execute(callback); // done - return count; + return count.intValue(); } @SuppressWarnings("unchecked") @@ -1224,7 +1224,7 @@ public class HibernateNodeDaoServiceImpl extends HibernateDaoSupport implements return query.uniqueResult(); } }; - Integer count = (Integer) getHibernateTemplate().execute(callback); + Long count = (Long) getHibernateTemplate().execute(callback); // done return count.intValue(); } diff --git a/source/java/org/alfresco/repo/security/permissions/impl/hibernate/HibernatePermissionTest.java b/source/java/org/alfresco/repo/security/permissions/impl/hibernate/HibernatePermissionTest.java index fdca6e514e..0baa455f9b 100644 --- a/source/java/org/alfresco/repo/security/permissions/impl/hibernate/HibernatePermissionTest.java +++ b/source/java/org/alfresco/repo/security/permissions/impl/hibernate/HibernatePermissionTest.java @@ -42,7 +42,6 @@ import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.QName; import org.alfresco.util.BaseSpringTest; import org.alfresco.util.GUID; -import org.hibernate.ObjectDeletedException; /** * @see org.alfresco.repo.domain.hibernate.PermissionsDaoComponentImpl @@ -205,23 +204,9 @@ public class HibernatePermissionTest extends BaseSpringTest // Check that deletion of the list cascades node.setAccessControlList(null); getSession().delete(accessControlList); - try - { - getSession().get(DbAccessControlListImpl.class, nodeAclId); - fail("Access control list was not deleted"); - } - catch (ObjectDeletedException e) - { - // expected - } - try - { - getSession().get(DbAccessControlEntryImpl.class, aceEntryId); - fail("Access control entries were not cascade deleted"); - } - catch (ObjectDeletedException e) - { - // expected - } + DbAccessControlEntry deletedAcl = (DbAccessControlEntry) getSession().get(DbAccessControlListImpl.class, nodeAclId); + assertNull("Access control list was not deleted", deletedAcl); + DbAccessControlEntry deletedAclEntry = (DbAccessControlEntry) getSession().get(DbAccessControlEntryImpl.class, aceEntryId); + assertNull("Access control entries were not cascade deleted", deletedAclEntry); } } \ No newline at end of file diff --git a/source/java/org/alfresco/repo/service/BeanServiceDescriptor.java b/source/java/org/alfresco/repo/service/BeanServiceDescriptor.java deleted file mode 100644 index 7b7b2b2d2b..0000000000 --- a/source/java/org/alfresco/repo/service/BeanServiceDescriptor.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) 2005-2007 Alfresco Software Limited. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * 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 General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - * As a special exception to the terms and conditions of version 2.0 of - * the GPL, you may redistribute this Program in connection with Free/Libre - * and Open Source Software ("FLOSS") applications as described in Alfresco's - * FLOSS exception. You should have recieved a copy of the text describing - * the FLOSS exception, and it is also available here: - * http://www.alfresco.com/legal/licensing" - */ -package org.alfresco.repo.service; - -import java.util.Collection; - -import org.alfresco.service.ServiceDescriptor; -import org.alfresco.service.cmr.repository.StoreRef; -import org.alfresco.service.namespace.QName; - - -/** - * Service Descriptor. - * - * @author David Caruana - */ -public class BeanServiceDescriptor - implements ServiceDescriptor -{ - // Service Name - private QName serviceName; - - // Service Description - private String description; - - // Service interface class - private Class interfaceClass; - - // Supported Store Protocols - Collection protocols = null; - - // Supported Stores - Collection stores = null; - - - /*package*/ BeanServiceDescriptor(QName serviceName, ServiceDescriptorMetaData metaData, StoreRedirector redirector) - { - this.serviceName = serviceName; - this.interfaceClass = metaData.getInterface(); - this.description = metaData.getDescription(); - - if (redirector != null) - { - protocols = redirector.getSupportedStoreProtocols(); - stores = redirector.getSupportedStores(); - } - } - - /* (non-Javadoc) - * @see org.alfresco.service.ServiceDescriptor#getQualifiedName() - */ - public QName getQualifiedName() - { - return serviceName; - } - - /* (non-Javadoc) - * @see org.alfresco.service.ServiceDescriptor#getDescription() - */ - public String getDescription() - { - return description; - } - - /* (non-Javadoc) - * @see org.alfresco.service.ServiceDescriptor#getInterface() - */ - public Class getInterface() - { - return interfaceClass; - } - - /* (non-Javadoc) - * @see org.alfresco.service.ServiceDescriptor#getSupportedStoreProtocols() - */ - public Collection getSupportedStoreProtocols() - { - return protocols; - } - - /* (non-Javadoc) - * @see org.alfresco.repo.service.StoreRedirector#getSupportedStores() - */ - public Collection getSupportedStores() - { - return stores; - } - -} diff --git a/source/java/org/alfresco/repo/service/ServiceDescriptorAdvisor.java b/source/java/org/alfresco/repo/service/ServiceDescriptorAdvisor.java deleted file mode 100644 index 31d34e0f54..0000000000 --- a/source/java/org/alfresco/repo/service/ServiceDescriptorAdvisor.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2005-2007 Alfresco Software Limited. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * 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 General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - * As a special exception to the terms and conditions of version 2.0 of - * the GPL, you may redistribute this Program in connection with Free/Libre - * and Open Source Software ("FLOSS") applications as described in Alfresco's - * FLOSS exception. You should have recieved a copy of the text describing - * the FLOSS exception, and it is also available here: - * http://www.alfresco.com/legal/licensing" - */ -package org.alfresco.repo.service; - -import org.springframework.aop.support.DefaultIntroductionAdvisor; - -/** - * Service Descriptor Advisor - * - * @author David Caruana - */ -public class ServiceDescriptorAdvisor extends DefaultIntroductionAdvisor -{ - private static final long serialVersionUID = -3327182176681357761L; - - - /** - * Construct Service Descriptor Advisor - * - * @param namespace service name namespace - * @param description service description - * @param interfaceClass service interface class - */ - public ServiceDescriptorAdvisor(String namespace, String description, Class interfaceClass) - { - super(new ServiceDescriptorMixin(namespace, description, interfaceClass), ServiceDescriptorMetaData.class); - } - -} diff --git a/source/java/org/alfresco/repo/service/ServiceDescriptorAdvisorFactory.java b/source/java/org/alfresco/repo/service/ServiceDescriptorAdvisorFactory.java deleted file mode 100644 index eede50e2a2..0000000000 --- a/source/java/org/alfresco/repo/service/ServiceDescriptorAdvisorFactory.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (C) 2005-2007 Alfresco Software Limited. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * 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 General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - * As a special exception to the terms and conditions of version 2.0 of - * the GPL, you may redistribute this Program in connection with Free/Libre - * and Open Source Software ("FLOSS") applications as described in Alfresco's - * FLOSS exception. You should have recieved a copy of the text describing - * the FLOSS exception, and it is also available here: - * http://www.alfresco.com/legal/licensing" - */ -package org.alfresco.repo.service; - -import org.springframework.beans.factory.FactoryBean; - -/** - * Factory for creating Service Descriptor Advisors. - * - * @author David Caruana - */ -public class ServiceDescriptorAdvisorFactory implements FactoryBean -{ - - private String namespace; - private String description; - private Class interfaceClass; - - - /* (non-Javadoc) - * @see org.springframework.beans.factory.FactoryBean#getObject() - */ - public Object getObject() throws Exception - { - return new ServiceDescriptorAdvisor(namespace, description, interfaceClass); - } - - /* (non-Javadoc) - * @see org.springframework.beans.factory.FactoryBean#getObjectType() - */ - public Class getObjectType() - { - // TODO Auto-generated method stub - return ServiceDescriptorAdvisor.class; - } - - /* (non-Javadoc) - * @see org.springframework.beans.factory.FactoryBean#isSingleton() - */ - public boolean isSingleton() - { - // TODO Auto-generated method stub - return false; - } - - /** - * @param namespace the service name namespace - */ - public void setNamespace(String namespace) - { - this.namespace = namespace; - } - - /** - * @param description the service description - */ - public void setDescription(String description) - { - this.description = description; - } - - /** - * @param interfaceClass the service interface class - */ - public void setInterface(Class interfaceClass) - { - this.interfaceClass = interfaceClass; - } - -} diff --git a/source/java/org/alfresco/repo/service/ServiceDescriptorMetaData.java b/source/java/org/alfresco/repo/service/ServiceDescriptorMetaData.java deleted file mode 100644 index d4f9a57a0e..0000000000 --- a/source/java/org/alfresco/repo/service/ServiceDescriptorMetaData.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2005-2007 Alfresco Software Limited. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * 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 General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - * As a special exception to the terms and conditions of version 2.0 of - * the GPL, you may redistribute this Program in connection with Free/Libre - * and Open Source Software ("FLOSS") applications as described in Alfresco's - * FLOSS exception. You should have recieved a copy of the text describing - * the FLOSS exception, and it is also available here: - * http://www.alfresco.com/legal/licensing" - */ -package org.alfresco.repo.service; - - -/** - * Service Meta Data - * - * @author David Caruana - */ -public interface ServiceDescriptorMetaData -{ - /** - * @return the service name namespace - */ - public String getNamespace(); - - /** - * @return the service description - */ - public String getDescription(); - - /** - * @return the service interface class - */ - public Class getInterface(); - -} diff --git a/source/java/org/alfresco/repo/service/ServiceDescriptorMixin.java b/source/java/org/alfresco/repo/service/ServiceDescriptorMixin.java deleted file mode 100644 index 30f43a20f5..0000000000 --- a/source/java/org/alfresco/repo/service/ServiceDescriptorMixin.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2005-2007 Alfresco Software Limited. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * 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 General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - * As a special exception to the terms and conditions of version 2.0 of - * the GPL, you may redistribute this Program in connection with Free/Libre - * and Open Source Software ("FLOSS") applications as described in Alfresco's - * FLOSS exception. You should have recieved a copy of the text describing - * the FLOSS exception, and it is also available here: - * http://www.alfresco.com/legal/licensing" - */ -package org.alfresco.repo.service; - -import org.springframework.aop.support.DelegatingIntroductionInterceptor; - -/** - * Service Descriptor Mixin. - * - * @author David Caruana - */ -public class ServiceDescriptorMixin extends DelegatingIntroductionInterceptor - implements ServiceDescriptorMetaData -{ - private static final long serialVersionUID = -6511459263796802334L; - - private String namespace; - private String description; - private Class interfaceClass; - - - /** - * Construct Service Descriptor Mixin - * - * @param namespace - * @param description - * @param interfaceClass - */ - public ServiceDescriptorMixin(String namespace, String description, Class interfaceClass) - { - this.namespace = namespace; - this.description = description; - this.interfaceClass = interfaceClass; - } - - /* (non-Javadoc) - * @see org.alfresco.repo.service.ServiceDescriptorMetaData#getNamespace() - */ - public String getNamespace() - { - return namespace; - } - - /* (non-Javadoc) - * @see org.alfresco.repo.service.ServiceDescriptorMetaData#getDescription() - */ - public String getDescription() - { - return description; - } - - /* (non-Javadoc) - * @see org.alfresco.repo.service.ServiceDescriptorMetaData#getInterface() - */ - public Class getInterface() - { - return interfaceClass; - } - -} diff --git a/source/java/org/alfresco/repo/service/ServiceDescriptorRegistry.java b/source/java/org/alfresco/repo/service/ServiceDescriptorRegistry.java index c375ec8e0a..9ed286e206 100644 --- a/source/java/org/alfresco/repo/service/ServiceDescriptorRegistry.java +++ b/source/java/org/alfresco/repo/service/ServiceDescriptorRegistry.java @@ -25,12 +25,7 @@ package org.alfresco.repo.service; import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import org.alfresco.service.ServiceDescriptor; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.action.ActionService; import org.alfresco.service.cmr.audit.AuditService; @@ -66,8 +61,6 @@ import org.alfresco.service.transaction.TransactionService; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; -import org.springframework.beans.factory.config.BeanFactoryPostProcessor; -import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; /** @@ -77,33 +70,12 @@ import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; * @author David Caruana */ public class ServiceDescriptorRegistry - implements BeanFactoryAware, BeanFactoryPostProcessor, ServiceRegistry + implements BeanFactoryAware, ServiceRegistry { // Bean Factory within which the registry lives private BeanFactory beanFactory = null; - // Service Descriptor map - private Map descriptors = new HashMap(); - - /* (non-Javadoc) - * @see org.springframework.beans.factory.config.BeanFactoryPostProcessor#postProcessBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory) - */ - public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException - { - Map beans = beanFactory.getBeansOfType(ServiceDescriptorMetaData.class); - Iterator iter = beans.entrySet().iterator(); - while (iter.hasNext()) - { - Map.Entry entry = (Map.Entry)iter.next(); - ServiceDescriptorMetaData metaData = (ServiceDescriptorMetaData)entry.getValue(); - QName serviceName = QName.createQName(metaData.getNamespace(), (String)entry.getKey()); - StoreRedirector redirector = (entry.getValue() instanceof StoreRedirector) ? (StoreRedirector)entry.getValue() : null; - BeanServiceDescriptor serviceDescriptor = new BeanServiceDescriptor(serviceName, metaData, redirector); - descriptors.put(serviceDescriptor.getQualifiedName(), serviceDescriptor); - } - } - /* (non-Javadoc) * @see org.springframework.beans.factory.BeanFactoryAware#setBeanFactory(org.springframework.beans.factory.BeanFactory) */ @@ -117,7 +89,8 @@ public class ServiceDescriptorRegistry */ public Collection getServices() { - return Collections.unmodifiableSet(descriptors.keySet()); + // TODO: Implement + throw new UnsupportedOperationException(); } /* (non-Javadoc) @@ -125,15 +98,8 @@ public class ServiceDescriptorRegistry */ public boolean isServiceProvided(QName service) { - return descriptors.containsKey(service); - } - - /* (non-Javadoc) - * @see org.alfresco.repo.service.ServiceRegistry#getServiceDescriptor(org.alfresco.repo.ref.QName) - */ - public ServiceDescriptor getServiceDescriptor(QName service) - { - return descriptors.get(service); + // TODO: Implement + throw new UnsupportedOperationException(); } /* (non-Javadoc) diff --git a/source/java/org/alfresco/repo/service/ServiceDescriptorRegistryTest.java b/source/java/org/alfresco/repo/service/ServiceDescriptorRegistryTest.java deleted file mode 100644 index 414afd5767..0000000000 --- a/source/java/org/alfresco/repo/service/ServiceDescriptorRegistryTest.java +++ /dev/null @@ -1,196 +0,0 @@ -/* - * Copyright (C) 2005-2007 Alfresco Software Limited. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * 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 General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - * As a special exception to the terms and conditions of version 2.0 of - * the GPL, you may redistribute this Program in connection with Free/Libre - * and Open Source Software ("FLOSS") applications as described in Alfresco's - * FLOSS exception. You should have recieved a copy of the text describing - * the FLOSS exception, and it is also available here: - * http://www.alfresco.com/legal/licensing" - */ -package org.alfresco.repo.service; - -import java.util.Collection; - -import javax.transaction.UserTransaction; - -import junit.framework.TestCase; - -import org.alfresco.service.ServiceDescriptor; -import org.alfresco.service.ServiceRegistry; -import org.alfresco.service.cmr.coci.CheckOutCheckInService; -import org.alfresco.service.cmr.dictionary.DictionaryService; -import org.alfresco.service.cmr.lock.LockService; -import org.alfresco.service.cmr.repository.ContentService; -import org.alfresco.service.cmr.repository.CopyService; -import org.alfresco.service.cmr.repository.MimetypeService; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.cmr.search.SearchService; -import org.alfresco.service.cmr.version.VersionService; -import org.alfresco.service.namespace.QName; -import org.alfresco.service.transaction.TransactionService; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -public class ServiceDescriptorRegistryTest extends TestCase -{ - - private ApplicationContext factory = null; - - private static String TEST_NAMESPACE = "http://www.alfresco.org/test/serviceregistrytest"; - private static QName invalidService = QName.createQName(TEST_NAMESPACE, "invalid"); - private static QName service1 = QName.createQName(TEST_NAMESPACE, "service1"); - private static QName service2 = QName.createQName(TEST_NAMESPACE, "service2"); - private static QName service3 = QName.createQName(TEST_NAMESPACE, "service3"); - - - public void setUp() - { - factory = new ClassPathXmlApplicationContext("org/alfresco/repo/service/testregistry.xml"); - } - - public void testDescriptor() - { - ServiceRegistry registry = (ServiceRegistry)factory.getBean("serviceRegistry"); - - Collection services = registry.getServices(); - assertNotNull(services); - assertEquals(3, services.size()); - - assertTrue(registry.isServiceProvided(service1)); - assertFalse(registry.isServiceProvided(invalidService)); - - ServiceDescriptor invalid = registry.getServiceDescriptor(invalidService); - assertNull(invalid); - ServiceDescriptor desc1 = registry.getServiceDescriptor(service1); - assertNotNull(desc1); - assertEquals(service1, desc1.getQualifiedName()); - assertEquals("Test Service 1", desc1.getDescription()); - assertEquals(TestServiceInterface.class, desc1.getInterface()); - ServiceDescriptor desc2 = registry.getServiceDescriptor(service2); - assertNotNull(desc2); - assertEquals(service2, desc2.getQualifiedName()); - assertEquals("Test Service 2", desc2.getDescription()); - assertEquals(TestServiceInterface.class, desc2.getInterface()); - } - - - public void testService() - { - ServiceRegistry registry = (ServiceRegistry)factory.getBean("serviceRegistry"); - - TestServiceInterface theService1 = (TestServiceInterface)registry.getService(service1); - assertNotNull(service1); - assertEquals("Test1:service1", theService1.test("service1")); - TestServiceInterface theService2 = (TestServiceInterface)registry.getService(service2); - assertNotNull(service2); - assertEquals("Test2:service2", theService2.test("service2")); - } - - - public void testStores() - { - ServiceRegistry registry = (ServiceRegistry)factory.getBean("serviceRegistry"); - - ServiceDescriptor desc3 = registry.getServiceDescriptor(service3); - assertNotNull(desc3); - StoreRedirector theService3 = (StoreRedirector)registry.getService(service3); - assertNotNull(service3); - - Collection descStores = desc3.getSupportedStoreProtocols(); - assertTrue(descStores.contains("Type1")); - assertTrue(descStores.contains("Type2")); - assertFalse(descStores.contains("Invalid")); - - Collection serviceStores = theService3.getSupportedStoreProtocols(); - for (String store: descStores) - { - assertTrue(serviceStores.contains(store)); - } - } - - - public void testAppContext() - { - ApplicationContext appContext = new ClassPathXmlApplicationContext("alfresco/application-context.xml"); - - ServiceRegistry registry = (ServiceRegistry)appContext.getBean(ServiceRegistry.SERVICE_REGISTRY); - assertNotNull(registry); - NodeService s1 = registry.getNodeService(); - assertNotNull(s1); - CheckOutCheckInService s2 = registry.getCheckOutCheckInService(); - assertNotNull(s2); - ContentService s3 = registry.getContentService(); - assertNotNull(s3); - CopyService s4 = registry.getCopyService(); - assertNotNull(s4); - DictionaryService s5 = registry.getDictionaryService(); - assertNotNull(s5); - LockService s6 = registry.getLockService(); - assertNotNull(s6); - MimetypeService s7 = registry.getMimetypeService(); - assertNotNull(s7); - SearchService s8 = registry.getSearchService(); - assertNotNull(s8); - TransactionService transactionService = registry.getTransactionService(); - UserTransaction s9 = transactionService.getUserTransaction(); - assertNotNull(s9); - UserTransaction s10 = transactionService.getUserTransaction(); - assertNotNull(s10); - assertFalse(s9.equals(s10)); - VersionService s11 = registry.getVersionService(); - assertNotNull(s11); - } - - - public interface TestServiceInterface - { - public String test(String arg); - } - - public static abstract class Component implements TestServiceInterface - { - private String type; - - private Component(String type) - { - this.type = type; - } - - public String test(String arg) - { - return type + ":" + arg; - } - } - - public static class Test1Component extends Component - { - private Test1Component() - { - super("Test1"); - } - } - - public static class Test2Component extends Component - { - private Test2Component() - { - super("Test2"); - } - } - -} diff --git a/source/java/org/alfresco/repo/service/testregistry.xml b/source/java/org/alfresco/repo/service/testregistry.xml deleted file mode 100644 index 56ec5740ac..0000000000 --- a/source/java/org/alfresco/repo/service/testregistry.xml +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - alfresco/model/dictionaryModel.xml - - - - - - - - - http://www.alfresco.org/test/serviceregistrytest - - - - - - - org.alfresco.repo.service.ServiceDescriptorRegistryTest$TestServiceInterface - - - - - - - - - - - - - - org.alfresco.repo.service.ServiceDescriptorRegistryTest$TestServiceInterface - - - Test Service 1 - - - - - - - org.alfresco.repo.service.ServiceDescriptorRegistryTest$TestServiceInterface - - - - - - - - - - - - - - org.alfresco.repo.service.ServiceDescriptorRegistryTest$TestServiceInterface - - - Test Service 2 - - - - - - org.alfresco.repo.service.ServiceDescriptorRegistryTest$TestServiceInterface, org.alfresco.repo.service.StoreRedirector - - - - - - - - - - - - - - org.alfresco.repo.service.ServiceDescriptorRegistryTest$TestServiceInterface - - - Test Service 3 - - - - - - - - - \ No newline at end of file diff --git a/source/java/org/alfresco/service/ServiceDescriptor.java b/source/java/org/alfresco/service/ServiceDescriptor.java deleted file mode 100644 index bcfbf75a9f..0000000000 --- a/source/java/org/alfresco/service/ServiceDescriptor.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2005-2007 Alfresco Software Limited. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * 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 General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - * As a special exception to the terms and conditions of version 2.0 of - * the GPL, you may redistribute this Program in connection with Free/Libre - * and Open Source Software ("FLOSS") applications as described in Alfresco's - * FLOSS exception. You should have recieved a copy of the text describing - * the FLOSS exception, and it is also available here: - * http://www.alfresco.com/legal/licensing" - */ -package org.alfresco.service; - -import java.util.Collection; - -import org.alfresco.service.cmr.repository.StoreRef; -import org.alfresco.service.namespace.QName; - - -/** - * This interface represents service meta-data. - * - * @author David Caruana - */ -public interface ServiceDescriptor -{ - /** - * @return the qualified name of the service - */ - public QName getQualifiedName(); - - /** - * @return the service description - */ - public String getDescription(); - - /** - * @return the service interface class description - */ - public Class getInterface(); - - /** - * @return the names of the protocols supported - */ - public Collection getSupportedStoreProtocols(); - - /** - * @return the Store Refs of the stores supported - */ - public Collection getSupportedStores(); -} diff --git a/source/java/org/alfresco/service/ServiceRegistry.java b/source/java/org/alfresco/service/ServiceRegistry.java index 63c683b119..3909941605 100644 --- a/source/java/org/alfresco/service/ServiceRegistry.java +++ b/source/java/org/alfresco/service/ServiceRegistry.java @@ -122,15 +122,6 @@ public interface ServiceRegistry @NotAuditable boolean isServiceProvided(QName service); - /** - * Get meta-data about the specified service - * - * @param service name of service to retrieve meta data for - * @return the service meta data - */ - @NotAuditable - ServiceDescriptor getServiceDescriptor(QName service); - /** * Get the specified service. *