Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[eclipselink-users] EntityListener not called

Hello,

I have this Entity Listener defined:

package de.topsystem.common.core.persistence;

import java.util.Properties;

import javax.persistence.PostPersist;
import javax.persistence.PostUpdate;

import org.osgi.framework.BundleReference;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventAdmin;
import org.osgi.util.tracker.ServiceTracker;

import core.Identifiable;
import core.annotations.EventTopic;

public class EventAdminEntityListener {

	ServiceTracker tracker;

	EventAdmin getEventAdmin() {
		if (null == this.tracker) {
this.tracker = new ServiceTracker(((BundleReference) this.getClass().getClassLoader()).getBundle()
					.getBundleContext(), EventAdmin.class.getName(), null);
			this.tracker.open();
		}
		return (EventAdmin) this.tracker.getService();
	}

	@PostUpdate
	@PostPersist
	public void postUpdate(final Object entity) {
if (!(entity instanceof Identifiable<?>) || !entity.getClass().isAnnotationPresent(EventTopic.class)) {
			return;
		}
		final EventAdmin ea = getEventAdmin();
		if (ea != null) {
final EventTopic topic = entity.getClass().getAnnotation(EventTopic.class);
			final Properties properties = new Properties();
			final Identifiable<?> identifiable = (Identifiable<?>) entity;
			properties.put("entity.id", identifiable.getId());
			ea.postEvent(new Event(topic.value() + "/UPDATE", properties));
		}
	}
}


and annotated my Entity like this
@EntityListeners( { EventAdminEntityListener.class })
@EventTopic("picker")
public class LegacyPicker extends BeanModel implements Picker {
}

The EventAdmiEntityListener is instantiated, so EL can find the class.
However the annotated method is never called when I merge or persist an LegacyPicker entity.
Can I enable some more logging to understand whats going on?

Thanks in advance,
Phil


Back to the top