diff --git a/domain/src/main/java/org/acegisecurity/domain/dao/InitializationCapable.java b/domain/src/main/java/org/acegisecurity/domain/dao/InitializationCapable.java new file mode 100644 index 0000000000..104f36fb05 --- /dev/null +++ b/domain/src/main/java/org/acegisecurity/domain/dao/InitializationCapable.java @@ -0,0 +1,43 @@ +/* Copyright 2004, 2005 Acegi Technology Pty Limited + * + * 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 net.sf.acegisecurity.domain.dao; + +/** + * Indicates an implementation capable of initializing an object, such that + * any lazy loading is guaranteed to have been completed. + * + *
+ * Structured as a separate interface (rather than a subclass of
+ * Dao), as it is not required for all persistence strategies.
+ *
+ * May throw an exception if the implementation so desires. + *
+ * + * @param entity to initialize + */ + public void initialize(Object entity); +} diff --git a/domain/src/main/java/org/acegisecurity/domain/dao/InitializationUtils.java b/domain/src/main/java/org/acegisecurity/domain/dao/InitializationUtils.java new file mode 100644 index 0000000000..0e4cf2dac6 --- /dev/null +++ b/domain/src/main/java/org/acegisecurity/domain/dao/InitializationUtils.java @@ -0,0 +1,50 @@ +/* Copyright 2004, 2005 Acegi Technology Pty Limited + * + * 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 net.sf.acegisecurity.domain.dao; + +import org.springframework.util.Assert; + + + +/** + * Convenience methods that support initialization of lazily loaded collections + * and associations using DAOs and other objects that implement + * {@link net.sf.acegisecurity.domain.dao.InitializationCapable}. + * + * @author Ben Alex + * @version $Id$ + */ +public class InitializationUtils { + //~ Methods ================================================================ + + /** + * Initializes the passed entity using the passed + * DAO or services layerObject (provided that the passed
+ * Object implements InitializationCapable).
+ *
+ * @param daoOrServices the potential source for
+ * InitializationCapable services (never null)
+ * @param entity to evict (can be null)
+ */
+ public static void initializeIfRequired(Object daoOrServices,
+ Object entity) {
+ Assert.notNull(daoOrServices);
+ if (daoOrServices instanceof InitializationCapable) {
+ ((InitializationCapable) daoOrServices).initialize(entity);
+ }
+ }
+
+}
diff --git a/domain/src/main/java/org/acegisecurity/domain/hibernate/DaoHibernate.java b/domain/src/main/java/org/acegisecurity/domain/hibernate/DaoHibernate.java
index 5942790a45..e39e6db104 100644
--- a/domain/src/main/java/org/acegisecurity/domain/hibernate/DaoHibernate.java
+++ b/domain/src/main/java/org/acegisecurity/domain/hibernate/DaoHibernate.java
@@ -22,6 +22,7 @@ import java.util.List;
import net.sf.acegisecurity.domain.PersistableEntity;
import net.sf.acegisecurity.domain.dao.Dao;
import net.sf.acegisecurity.domain.dao.EvictionCapable;
+import net.sf.acegisecurity.domain.dao.InitializationCapable;
import net.sf.acegisecurity.domain.dao.PaginatedList;
import org.hibernate.Criteria;
@@ -46,7 +47,7 @@ import org.springframework.util.Assert;
* @version $Id$
*/
public class DaoHibernateHibernateCallback that will load a list of
* objects by a Collection of identities.
*
@@ -211,6 +216,8 @@ public class DaoHibernate