/* Copyright (c) 2011 GeoSolutions - http://www.geo-solutions.it/. All rights reserved.
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package it.geosolutions.geoserver.jms.impl.handlers.catalog;
import java.util.logging.Level;
import it.geosolutions.geoserver.jms.JMSEventHandler;
import it.geosolutions.geoserver.jms.JMSEventHandlerSPI;
import javax.jms.JMSException;
import org.geoserver.catalog.CatalogInfo;
import org.geoserver.catalog.event.CatalogEvent;
import org.geoserver.catalog.impl.CatalogImpl;
import com.thoughtworks.xstream.XStream;
/**
* Abstract class which use Xstream as message serializer/de-serializer.
* We extend this class to implementing synchronize method.
*
* @author Carlo Cancellieri - carlo.cancellieri@geo-solutions.it
*
*/
public abstract class JMSCatalogEventHandler extends
JMSEventHandler<String, CatalogEvent> {
public JMSCatalogEventHandler(final XStream xstream,
Class<JMSEventHandlerSPI<String, CatalogEvent>> clazz) {
super(xstream,clazz);
// omit not serializable fields
omitFields();
}
/**
* omit not serializable fields
* @see {@link XStream}
*/
private void omitFields() {
// omit not serializable fields
xstream.omitField(CatalogImpl.class, "listeners");
xstream.omitField(CatalogImpl.class, "facade");
xstream.omitField(CatalogImpl.class, "resourcePool");
xstream.omitField(CatalogImpl.class, "resourceLoader");
}
@Override
public String serialize(CatalogEvent event) throws Exception {
return xstream.toXML(event);
}
@Override
public CatalogEvent deserialize(String s) throws Exception {
final Object source= xstream.fromXML(s);
if (source instanceof CatalogEvent) {
final CatalogEvent ev = (CatalogEvent) source;
if (LOGGER.isLoggable(Level.FINE)) {
final CatalogInfo info = ev.getSource();
LOGGER.fine("Incoming message event of type CatalogEvent: "
+ info.getId());
}
return ev;
} else {
throw new JMSException("Unable to deserialize the following object:\n"+s);
}
}
}