/* * Copyright 2004-2009 the original author or authors. * * 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 org.compass.gps.device.jpa.lifecycle; import javax.persistence.EntityManagerFactory; import org.compass.gps.device.jpa.JpaGpsDevice; import org.compass.gps.device.jpa.JpaGpsDeviceException; /** * <p>A global lifecycle event listener injector. Since the <code>EntityManagerFactory</code> does not * allow for setting global lifecycle event listeners, actual implementations of the JPA spec can be * used directly to inject global lifecycle event listeners usign propriety APIs. * * <p>Assume that the <code>EntityManagerFactory</code> is the native one, since the * {@link org.compass.gps.device.jpa.extractor.NativeJpaExtractor} of the * {@link JpaGpsDevice} was used to extract it. * * @author kimchy * @see org.compass.gps.device.jpa.lifecycle.HibernateJpaEntityLifecycleInjector * @see JpaEntityLifecycleInjectorDetector */ public interface JpaEntityLifecycleInjector { /** * Injects a global lifecycle listener into the concrete <code>EntityManagerFactory<code> * implementation. * * @param entityManagerFactory The <code>EntityManagerFactory</code> to inject the global lifecycle to. * @param device The Jpa device calling this injector * @throws JpaGpsDeviceException */ void injectLifecycle(EntityManagerFactory entityManagerFactory, JpaGpsDevice device) throws JpaGpsDeviceException; /** * Removes (if possible) lifecycle listeners injected using the inject method. * * @param entityManagerFactory The EMF to remove lifecycle from * @param device The Jpa device calling * @throws JpaGpsDeviceException */ void removeLifecycle(EntityManagerFactory entityManagerFactory, JpaGpsDevice device) throws JpaGpsDeviceException; /** * Does this injector requires refreshing (i.e. remove and inject) of new listeners upon * {@link org.compass.gps.CompassGpsDevice#refresh()}. */ boolean requireRefresh(); }