Issue #2191: Registry Garbage Collection

Change-Id: I15094a928b4f8793daab751b85a20b19b6352438

Former-commit-id: 34764a4a09 [formerly 3aebfb2956 [formerly 6afda27e19d0ea38c547afc9a28c55525706f9f1]]
Former-commit-id: 3aebfb2956
Former-commit-id: 0af12c7e8b
This commit is contained in:
Benjamin Phillippe 2013-07-12 10:17:16 -05:00
parent 0b21274439
commit 4a482184ca
18 changed files with 727 additions and 49 deletions

View file

@ -89,7 +89,7 @@ public class RegistryObjectListType implements Serializable {
private Integer key;
@ManyToMany
@Cascade(value = { org.hibernate.annotations.CascadeType.PERSIST })
@Cascade({})
@JoinTable(schema = "ebxml")
@XmlElement(name = "RegistryObject")
@DynamicSerializeElement

View file

@ -43,6 +43,7 @@ import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.annotations.Index;
import com.raytheon.uf.common.dataplugin.persist.IPersistableDataObject;
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
@ -88,7 +89,8 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
// "child_slot_key", referencedColumnName = "key")))
@Cache(region = "registryObjects", usage = CacheConcurrencyStrategy.TRANSACTIONAL, include = "all")
@Table(schema = "ebxml", name = "Slot")
public class SlotType extends ExtensibleObjectType implements Serializable {
public class SlotType extends ExtensibleObjectType implements
IPersistableDataObject<Integer>, Serializable {
private static final long serialVersionUID = -2184582316481503043L;
@ -98,7 +100,7 @@ public class SlotType extends ExtensibleObjectType implements Serializable {
@XmlTransient
private Integer key;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@XmlElement(name = "SlotValue")
@DynamicSerializeElement
protected ValueType slotValue;
@ -258,4 +260,9 @@ public class SlotType extends ExtensibleObjectType implements Serializable {
this.type = value;
}
@Override
public Integer getIdentifier() {
return key;
}
}

View file

@ -37,6 +37,7 @@ import javax.xml.bind.annotation.XmlType;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import com.raytheon.uf.common.dataplugin.persist.IPersistableDataObject;
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
/**
@ -75,7 +76,7 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
@Cache(region = "registryObjects", usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Table(schema = "ebxml", name = "Value")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class ValueType {
public abstract class ValueType implements IPersistableDataObject<Integer> {
@Id
@SequenceGenerator(name = "ValueTypeGenerator", schema = "ebxml", sequenceName = "ebxml.Value_sequence")
@ -89,4 +90,9 @@ public abstract class ValueType {
public abstract String getColumnName();
@Override
public Integer getIdentifier() {
return key;
}
}

View file

@ -358,7 +358,12 @@ public abstract class SessionManagedDao<IDENTIFIER extends Serializable, ENTITY
.createQuery(statement).setCacheable(true)
.setCacheRegion(QUERY_CACHE_REGION);
for (int i = 0; i < params.length; i += 2) {
query.setParameter((String) params[i], params[i + 1]);
if (params[i + 1] instanceof Collection<?>) {
query.setParameterList((String) params[i],
(Collection<?>) params[i + 1]);
} else {
query.setParameter((String) params[i], params[i + 1]);
}
}
return query.executeUpdate();
} catch (Throwable e) {

View file

@ -0,0 +1,16 @@
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<camelContext id="ebxml-garbagecollector" xmlns="http://camel.apache.org/schema/spring"
errorHandlerRef="errorHandler">
<endpoint id="garbageCollectEndpoint"
uri="quartz://registry/garbageCollect/?cron=${ebxml-garbage-collect-process.cron}" />
<route id="garbageCollectRoute">
<from uri="garbageCollectEndpoint" />
<bean ref="RegistryGarbageCollector" method="gc" />
</route>
</camelContext>
</beans>

View file

@ -1,36 +1,42 @@
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
<bean id="edexRegistryManagerFactory"
class="com.raytheon.uf.edex.registry.ebxml.util.EDEXRegistryManagerFactory">
<property name="queryManager" ref="queryServiceImpl" />
<property name="lifecycleManager" ref="lcmServiceImpl" />
</bean>
<bean id="edexRegistryManagerFactory"
class="com.raytheon.uf.edex.registry.ebxml.util.EDEXRegistryManagerFactory">
<property name="queryManager" ref="queryServiceImpl" />
<property name="lifecycleManager" ref="lcmServiceImpl" />
</bean>
<bean id="registryHandler"
class="com.raytheon.uf.common.registry.ebxml.FactoryRegistryHandler">
<property name="lcmFactory" ref="edexRegistryManagerFactory" />
<property name="queryFactory" ref="edexRegistryManagerFactory" />
<property name="encoderStrategy" ref="registryEncoder" />
</bean>
<bean id="registryHandler"
class="com.raytheon.uf.common.registry.ebxml.FactoryRegistryHandler">
<property name="lcmFactory" ref="edexRegistryManagerFactory" />
<property name="queryFactory" ref="edexRegistryManagerFactory" />
<property name="encoderStrategy" ref="registryEncoder" />
</bean>
<bean id="edexRegistryManager"
class="com.raytheon.uf.edex.registry.ebxml.util.EDEXRegistryManager">
<property name="xacmlPep" ref="XACMLPolicyEnforcementPoint" />
<property name="registryHandler" ref="registryHandler" />
</bean>
<bean id="edexRegistryManager"
class="com.raytheon.uf.edex.registry.ebxml.util.EDEXRegistryManager">
<property name="xacmlPep" ref="XACMLPolicyEnforcementPoint" />
<property name="registryHandler" ref="registryHandler" />
</bean>
<bean id="registryEncoderType"
class="com.raytheon.uf.common.registry.ebxml.encoder.RegistryEncoders$Type"
factory-method="valueOf">
<constructor-arg value="JAXB" />
</bean>
<bean id="registryEncoderType"
class="com.raytheon.uf.common.registry.ebxml.encoder.RegistryEncoders$Type"
factory-method="valueOf">
<constructor-arg value="JAXB" />
</bean>
<bean id="registryEncoder"
class="com.raytheon.uf.common.registry.ebxml.encoder.RegistryEncoders"
factory-method="ofType">
<constructor-arg ref="registryEncoderType" />
</bean>
<bean id="registryEncoder"
class="com.raytheon.uf.common.registry.ebxml.encoder.RegistryEncoders"
factory-method="ofType">
<constructor-arg ref="registryEncoderType" />
</bean>
<bean id="RegistryGarbageCollector"
class="com.raytheon.uf.edex.registry.ebxml.services.RegistryGarbageCollector">
<constructor-arg name="slotDao" ref="slotTypeDao" />
<constructor-arg name="eventDao" ref="AuditableEventTypeDao" />
</bean>
</beans>

View file

@ -2,15 +2,19 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
<bean id="slotTypeDao" class="com.raytheon.uf.edex.registry.ebxml.dao.SlotTypeDao">
<property name="sessionFactory" ref="metadataSessionFactory" />
</bean>
<bean id="registryObjectDao"
class="com.raytheon.uf.edex.registry.ebxml.dao.RegistryObjectDao">
<property name="sessionFactory" ref="metadataSessionFactory" />
</bean>
<bean id="registryDao" class="com.raytheon.uf.edex.registry.ebxml.dao.RegistryDao">
<property name="sessionFactory" ref="metadataSessionFactory" />
</bean>
<bean id="federationDao" class="com.raytheon.uf.edex.registry.ebxml.dao.FederationDao">
<property name="sessionFactory" ref="metadataSessionFactory" />
</bean>
@ -72,8 +76,9 @@
<property name="sessionFactory" ref="metadataSessionFactory" />
<property name="associationDao" ref="associationDao" />
</bean>
<bean name="notificationTypeDao" class="com.raytheon.uf.edex.registry.ebxml.dao.NotificationTypeDao" >
<bean name="notificationTypeDao"
class="com.raytheon.uf.edex.registry.ebxml.dao.NotificationTypeDao">
<property name="sessionFactory" ref="metadataSessionFactory" />
</bean>
</beans>

View file

@ -1,4 +1,5 @@
# The period which registry subscriptions are processed
ebxml-subscription-process.cron=0+0/1+*+*+*+?
ebxml-garbage-collect-process.cron=0/30+*+*+*+*+?
# Master switch enabling email transmission
ebxml-email.enabled=false

View file

@ -21,6 +21,7 @@
package com.raytheon.uf.edex.registry.ebxml.dao;
import java.math.BigInteger;
import java.util.Calendar;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@ -36,6 +37,9 @@ import oasis.names.tc.ebxml.regrep.xsd.rim.v4.RegistryObjectType;
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.VersionInfoType;
import oasis.names.tc.ebxml.regrep.xsd.rs.v4.RegistryRequestType;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.raytheon.uf.common.registry.constants.ActionTypes;
import com.raytheon.uf.common.registry.constants.RegistryObjectTypes;
import com.raytheon.uf.common.registry.constants.StatusTypes;
@ -84,6 +88,19 @@ public class AuditableEventTypeDao extends
/** Order by clause */
private static final String ORDER_CLAUSE = " order by event.timestamp asc";
/** The number of hours to retain auditable events */
private static final int AUDITABLE_EVENT_RETENTION_TIME = 48;
/** Cutoff parameter for the query to get the expired events */
private static final String GET_EXPIRED_EVENTS_QUERY_CUTOFF_PARAMETER = "cutoff";
/** Batch size for the query to get expired events */
private static final int GET_EXPIRED_EVENTS_QUERY_BATCH_SIZE = 2500;
/** Query to get Expired AuditableEvents */
private static final String GET_EXPIRED_EVENTS_QUERY = "FROM AuditableEventType event where event.timestamp < :"
+ GET_EXPIRED_EVENTS_QUERY_CUTOFF_PARAMETER;
/**
* Constructor.
*
@ -97,6 +114,28 @@ public class AuditableEventTypeDao extends
template.save(event);
}
/**
* Deletes auditable events older than 48 hrs old
*
* @throws EbxmlRegistryException
* If errors occur purging auditable events
*/
@Transactional(propagation = Propagation.REQUIRED)
public void deleteExpiredEvents() throws EbxmlRegistryException {
Calendar cutoffTime = TimeUtil.newGmtCalendar();
cutoffTime.add(Calendar.HOUR_OF_DAY, -AUDITABLE_EVENT_RETENTION_TIME);
List<AuditableEventType> expiredEvents = this.executeHQLQuery(
GET_EXPIRED_EVENTS_QUERY, GET_EXPIRED_EVENTS_QUERY_BATCH_SIZE,
GET_EXPIRED_EVENTS_QUERY_CUTOFF_PARAMETER, EbxmlObjectUtil
.getTimeAsXMLGregorianCalendar(cutoffTime
.getTimeInMillis()));
if (!expiredEvents.isEmpty()) {
statusHandler.info("Deleting " + expiredEvents.size()
+ " Auditable Events prior to: " + cutoffTime.getTime());
this.template.deleteAll(expiredEvents);
}
}
/**
* Gets the events of interest based on the start time, end time, and the
* list of objects of interest

View file

@ -0,0 +1,105 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.edex.registry.ebxml.dao;
import java.util.List;
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.SlotType;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.raytheon.uf.edex.database.dao.SessionManagedDao;
/**
*
* Data Access object for interacting with slot objects
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 7/11/2013 1707 bphillip Initial implementation
* </pre>
*
* @author bphillip
* @version 1
*/
public class SlotTypeDao extends SessionManagedDao<Integer, SlotType> {
/** SQL query to get the ids of the orphaned slots */
private static final String ORPHANED_SLOT_QUERY = "select key from ebxml.slot where key not in "
+ "(select child_slot_key from ebxml.action_slot "
+ "UNION "
+ "select child_slot_key from ebxml.personname_slot "
+ "UNION "
+ "select child_slot_key from ebxml.objectref_slot "
+ "UNION "
+ "select child_slot_key from ebxml.parameter_slot "
+ "UNION "
+ "select child_slot_key from ebxml.queryexpression_slot "
+ "UNION "
+ "select child_slot_key from ebxml.registryobject_slot "
+ "UNION "
+ "select child_slot_key from ebxml.query_slot "
+ "UNION "
+ "select child_slot_key from ebxml.slot_slot "
+ "UNION "
+ "select child_slot_key from ebxml.telephonenumber_slot "
+ "UNION "
+ "select child_slot_key from ebxml.deliveryinfo_slot "
+ "UNION "
+ "select child_slot_key from ebxml.emailaddress_slot "
+ "UNION "
+ "select child_slot_key from ebxml.postaladdress_slot "
+ ")";
/** Keys parameter for the query to get the orphaned slot objects */
private static final String GET_BY_ID_QUERY_KEYS_PARAMETER = "keys";
/** Result batch size for the query to get the orphaned slot objects */
private static final int GET_BY_ID_QUERY_BATCH_SIZE = 1000;
private static final String GET_BY_ID_QUERY = "FROM SlotType slot where slot.key in (:"
+ GET_BY_ID_QUERY_KEYS_PARAMETER + ")";
@Override
protected Class<SlotType> getEntityClass() {
return SlotType.class;
}
@SuppressWarnings("unchecked")
@Transactional(propagation = Propagation.REQUIRED)
public void deleteOrphanedSlots() {
List<Integer> orphanedSlotIds = this.getSessionFactory()
.getCurrentSession().createSQLQuery(ORPHANED_SLOT_QUERY).list();
if (!orphanedSlotIds.isEmpty()) {
List<SlotType> slots = this.executeHQLQuery(GET_BY_ID_QUERY,
GET_BY_ID_QUERY_BATCH_SIZE, GET_BY_ID_QUERY_KEYS_PARAMETER,
orphanedSlotIds);
statusHandler.info("Removing " + orphanedSlotIds.size()
+ " orphaned slots...");
this.deleteAll(slots);
}
}
}

View file

@ -0,0 +1,93 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.edex.registry.ebxml.services;
import java.util.concurrent.atomic.AtomicBoolean;
import com.raytheon.uf.edex.registry.ebxml.dao.AuditableEventTypeDao;
import com.raytheon.uf.edex.registry.ebxml.dao.SlotTypeDao;
import com.raytheon.uf.edex.registry.ebxml.exception.EbxmlRegistryException;
/**
*
* Garbage collector object to clean up unused and orphaned objects from the
* registry. The gc method is run on a cron to continuously clean up the
* registry.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 7/11/2013 1707 bphillip Initial implementation
* </pre>
*
* @author bphillip
* @version 1
*/
public class RegistryGarbageCollector {
/** Sentinel to denote if the garbage collection is currently running */
private AtomicBoolean running = new AtomicBoolean(false);
/** Data access object for SlotType */
private SlotTypeDao slotDao;
/** Data access object for AuditableEventType */
private AuditableEventTypeDao eventDao;
/**
* Creates a new GarbageCollector object
*/
public RegistryGarbageCollector() {
}
/**
* Creates a new GarbageCollector object
*
* @param slotDao
* The slot dao to use
* @param eventDao
* The auditable event dao to use
*/
public RegistryGarbageCollector(SlotTypeDao slotDao,
AuditableEventTypeDao eventDao) {
this.slotDao = slotDao;
this.eventDao = eventDao;
}
/**
* Cleans up the registry by removing unused and/or orphaned objects
*/
public void gc() throws EbxmlRegistryException {
if (!running.compareAndSet(false, true)) {
return;
}
try {
eventDao.deleteExpiredEvents();
slotDao.deleteOrphanedSlots();
} finally {
running.set(false);
}
}
}

View file

@ -0,0 +1,71 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.edex.registry.ebxml.services.cataloger;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import oasis.names.tc.ebxml.regrep.wsdl.registry.services.v4.Cataloger;
import oasis.names.tc.ebxml.regrep.wsdl.registry.services.v4.MsgRegistryException;
import oasis.names.tc.ebxml.regrep.xsd.spi.v4.CatalogObjectsRequest;
import oasis.names.tc.ebxml.regrep.xsd.spi.v4.CatalogObjectsResponse;
import org.springframework.transaction.annotation.Transactional;
/**
*
* Wrapper for the cataloger service to be used with the SOAP interface.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 7/11/2013 1707 bphillip Initial implementation
* </pre>
*
* @author bphillip
* @version 1
*/
@Transactional
public class CatalogerImplWrapper implements Cataloger {
private CatalogerImpl cataloger;
public CatalogerImplWrapper() {
}
public CatalogerImplWrapper(CatalogerImpl cataloger) {
this.cataloger = cataloger;
}
@Override
@WebMethod(action = "urn:oasis:names:tc:ebxml-regrep:wsdl:spi:bindings:4.0:Cataloger#catalogObjects")
@WebResult(name = "CatalogObjectsResponse", targetNamespace = "urn:oasis:names:tc:ebxml-regrep:xsd:spi:4.0", partName = "partCatalogObjectsResponse")
public CatalogObjectsResponse catalogObjects(
@WebParam(name = "CatalogObjectsRequest", targetNamespace = "urn:oasis:names:tc:ebxml-regrep:xsd:spi:4.0", partName = "partCatalogObjectsRequest") CatalogObjectsRequest partCatalogObjectsRequest)
throws MsgRegistryException {
return cataloger.catalogObjects(partCatalogObjectsRequest);
}
}

View file

@ -0,0 +1,92 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.edex.registry.ebxml.services.lifecycle;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import oasis.names.tc.ebxml.regrep.wsdl.registry.services.v4.LifecycleManager;
import oasis.names.tc.ebxml.regrep.wsdl.registry.services.v4.MsgRegistryException;
import oasis.names.tc.ebxml.regrep.xsd.lcm.v4.RemoveObjectsRequest;
import oasis.names.tc.ebxml.regrep.xsd.lcm.v4.SubmitObjectsRequest;
import oasis.names.tc.ebxml.regrep.xsd.lcm.v4.UpdateObjectsRequest;
import oasis.names.tc.ebxml.regrep.xsd.rs.v4.RegistryResponseType;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
/**
*
* Wrapper for the lifecyclemanager service to be used with the SOAP interface.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 7/11/2013 1707 bphillip Initial implementation
* </pre>
*
* @author bphillip
* @version 1
*/
@Transactional(propagation = Propagation.REQUIRED)
public class LifecycleManagerImplWrapper implements LifecycleManager {
private LifecycleManagerImpl lifecycleManager;
public LifecycleManagerImplWrapper() {
}
public LifecycleManagerImplWrapper(LifecycleManagerImpl lifecycleManager) {
this.lifecycleManager = lifecycleManager;
}
@Override
@WebMethod(action = "urn:oasis:names:tc:ebxml-regrep:wsdl:registry:bindings:4.0:LifecycleManager#removeObjects")
@WebResult(name = "RegistryResponse", targetNamespace = "urn:oasis:names:tc:ebxml-regrep:xsd:rs:4.0", partName = "partRegistryResponse")
public RegistryResponseType removeObjects(
@WebParam(name = "RemoveObjectsRequest", targetNamespace = "urn:oasis:names:tc:ebxml-regrep:xsd:lcm:4.0", partName = "partRemoveObjectsRequest") RemoveObjectsRequest partRemoveObjectsRequest)
throws MsgRegistryException {
return lifecycleManager.removeObjects(partRemoveObjectsRequest);
}
@Override
@WebMethod(action = "urn:oasis:names:tc:ebxml-regrep:wsdl:registry:bindings:4.0:LifecycleManager#submitObjects")
@WebResult(name = "RegistryResponse", targetNamespace = "urn:oasis:names:tc:ebxml-regrep:xsd:rs:4.0", partName = "partRegistryResponse")
public RegistryResponseType submitObjects(
@WebParam(name = "SubmitObjectsRequest", targetNamespace = "urn:oasis:names:tc:ebxml-regrep:xsd:lcm:4.0", partName = "partSubmitObjectsRequest") SubmitObjectsRequest partSubmitObjectsRequest)
throws MsgRegistryException {
return lifecycleManager.submitObjects(partSubmitObjectsRequest);
}
@Override
@WebMethod(action = "urn:oasis:names:tc:ebxml-regrep:wsdl:registry:bindings:4.0:LifecycleManager#updateObjects")
@WebResult(name = "RegistryResponse", targetNamespace = "urn:oasis:names:tc:ebxml-regrep:xsd:rs:4.0", partName = "partRegistryResponse")
public RegistryResponseType updateObjects(
@WebParam(name = "UpdateObjectsRequest", targetNamespace = "urn:oasis:names:tc:ebxml-regrep:xsd:lcm:4.0", partName = "partUpdateObjectsRequest") UpdateObjectsRequest partUpdateObjectsRequest)
throws MsgRegistryException {
return lifecycleManager.updateObjects(partUpdateObjectsRequest);
}
}

View file

@ -0,0 +1,70 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.edex.registry.ebxml.services.notification;
import javax.jws.Oneway;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import oasis.names.tc.ebxml.regrep.wsdl.registry.services.v4.NotificationListener;
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.NotificationType;
import org.springframework.transaction.annotation.Transactional;
/**
*
* Wrapper for the notificationlistener service to be used with the SOAP
* interface.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 7/11/2013 1707 bphillip Initial implementation
* </pre>
*
* @author bphillip
* @version 1
*/
@Transactional
public class NotificationListenerImplWrapper implements NotificationListener {
private NotificationListenerImpl notificationListener;
public NotificationListenerImplWrapper() {
}
public NotificationListenerImplWrapper(
NotificationListenerImpl notificationListener) {
this.notificationListener = notificationListener;
}
@Override
@WebMethod(action = "urn:oasis:names:tc:ebxml-regrep:wsdl:NotificationListener:bindings:4.0:NotificationListener:onNotification")
@Oneway
public void onNotification(
@WebParam(name = "Notification", targetNamespace = "urn:oasis:names:tc:ebxml-regrep:xsd:rim:4.0", partName = "Notification") NotificationType notification) {
notificationListener.onNotification(notification);
}
}

View file

@ -0,0 +1,71 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.edex.registry.ebxml.services.query;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import oasis.names.tc.ebxml.regrep.wsdl.registry.services.v4.MsgRegistryException;
import oasis.names.tc.ebxml.regrep.wsdl.registry.services.v4.QueryManager;
import oasis.names.tc.ebxml.regrep.xsd.query.v4.QueryRequest;
import oasis.names.tc.ebxml.regrep.xsd.query.v4.QueryResponse;
import org.springframework.transaction.annotation.Transactional;
/**
*
* Wrapper for the query service to be used with the SOAP interface.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 7/11/2013 1707 bphillip Initial implementation
* </pre>
*
* @author bphillip
* @version 1
*/
@Transactional
public class QueryManagerImplWrapper implements QueryManager {
private QueryManagerImpl queryManager;
public QueryManagerImplWrapper() {
}
public QueryManagerImplWrapper(QueryManagerImpl queryManager) {
this.queryManager = queryManager;
}
@Override
@WebMethod(action = "urn:oasis:names:tc:ebxml-regrep:wsdl:registry:bindings:4.0:QueryManager#executeQuery")
@WebResult(name = "QueryResponse", targetNamespace = "urn:oasis:names:tc:ebxml-regrep:xsd:query:4.0", partName = "partQueryResponse")
public QueryResponse executeQuery(
@WebParam(name = "QueryRequest", targetNamespace = "urn:oasis:names:tc:ebxml-regrep:xsd:query:4.0", partName = "partQueryRequest") QueryRequest partQueryRequest)
throws MsgRegistryException {
return queryManager.executeQuery(partQueryRequest);
}
}

View file

@ -46,7 +46,6 @@ import com.raytheon.uf.edex.registry.ebxml.services.query.types.CanonicalEbxmlQu
* @author bphillip
* @version 1.0
*/
public class GarbageCollector extends CanonicalEbxmlQuery {
@Override
@ -57,7 +56,6 @@ public class GarbageCollector extends CanonicalEbxmlQuery {
@Override
protected void query(QueryType queryType, QueryResponse queryResponse,
String client) throws EbxmlRegistryException {
// TODO:Implement
}
@Override

View file

@ -0,0 +1,71 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.edex.registry.ebxml.services.validator;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import oasis.names.tc.ebxml.regrep.wsdl.registry.services.v4.MsgRegistryException;
import oasis.names.tc.ebxml.regrep.wsdl.registry.services.v4.Validator;
import oasis.names.tc.ebxml.regrep.xsd.spi.v4.ValidateObjectsRequest;
import oasis.names.tc.ebxml.regrep.xsd.spi.v4.ValidateObjectsResponse;
import org.springframework.transaction.annotation.Transactional;
/**
*
* Wrapper for the validator service to be used with the SOAP interface.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 7/11/2013 1707 bphillip Initial implementation
* </pre>
*
* @author bphillip
* @version 1
*/
@Transactional
public class ValidatorImplWrapper implements Validator {
private ValidatorImpl validator;
public ValidatorImplWrapper() {
}
public ValidatorImplWrapper(ValidatorImpl validator) {
this.validator = validator;
}
@Override
@WebMethod(action = "urn:oasis:names:tc:ebxml-regrep:wsdl:spi:bindings:4.0:Validator#validateObjects")
@WebResult(name = "ValidateObjectsResponse", targetNamespace = "urn:oasis:names:tc:ebxml-regrep:xsd:spi:4.0", partName = "partValidateObjectsResponse")
public ValidateObjectsResponse validateObjects(
@WebParam(name = "ValidateObjectsRequest", targetNamespace = "urn:oasis:names:tc:ebxml-regrep:xsd:spi:4.0", partName = "partValidateObjectsRequest") ValidateObjectsRequest partValidateObjectsRequest)
throws MsgRegistryException {
return validator.validateObjects(partValidateObjectsRequest);
}
}

View file

@ -9,23 +9,45 @@
http://cxf.apache.org/schemas/jaxrs.xsd">
<import resource="file:///${edex.home}/conf/spring/edex-db.xml" />
<import resource="classpath:res/spring/eventbus-common.xml" />
<import resource="classpath:res/spring/eventbus-common.xml" />
<import resource="classpath:res/spring/ebxml.xml" />
<import resource="classpath:res/spring/ebxml-webservices.xml" />
<import resource="classpath:res/spring/ebxml-validator-plugins.xml" />
<import resource="classpath:res/spring/ebxml-validator-plugins.xml" />
<import resource="classpath:res/spring/ebxml-querytypes.xml" />
<import resource="classpath:res/spring/ebxml-registry-dao.xml" />
<import resource="classpath:res/spring/ebxml-subscription.xml" />
<import resource="classpath:res/spring/ebxml-constants.xml" />
<import resource="classpath:res/spring/ebxml-thrift-client.xml" />
<import resource="classpath:res/spring/ebxml-xacml.xml" />
<import resource="classpath:res/spring/ebxml-impl.xml"/>
<import resource="classpath:res/spring/ebxml-impl.xml" />
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<bean id="QueryServiceWrapper"
class="com.raytheon.uf.edex.registry.ebxml.services.query.QueryManagerImplWrapper">
<constructor-arg name="queryManager" ref="queryServiceImpl" />
</bean>
<bean id="NotificationListenerServiceWrapper"
class="com.raytheon.uf.edex.registry.ebxml.services.notification.NotificationListenerImplWrapper">
<constructor-arg name="notificationListener" ref="notificationServiceImpl" />
</bean>
<bean id="LifecycleManagerServiceWrapper"
class="com.raytheon.uf.edex.registry.ebxml.services.lifecycle.LifecycleManagerImplWrapper">
<constructor-arg name="lifecycleManager" ref="lcmServiceImpl" />
</bean>
<bean id="ValidatorServiceWrapper"
class="com.raytheon.uf.edex.registry.ebxml.services.validator.ValidatorImplWrapper">
<constructor-arg name="validator" ref="validatorServiceImpl" />
</bean>
<bean id="CatalogerServiceWrapper"
class="com.raytheon.uf.edex.registry.ebxml.services.cataloger.CatalogerImplWrapper">
<constructor-arg name="cataloger" ref="catalogerServiceImpl" />
</bean>
<jaxws:server id="RegistryRequest"
serviceClass="com.raytheon.uf.common.registry.IRegistryRequestService" address="/registryRequest">
serviceClass="com.raytheon.uf.common.registry.IRegistryRequestService"
address="/registryRequest">
<jaxws:serviceBean>
<ref bean="routeWrapper" />
</jaxws:serviceBean>
@ -34,25 +56,25 @@
<!-- SOAP Service definitions -->
<jaxws:server id="QueryService" address="/queryManager">
<jaxws:serviceBean>
<ref bean="queryServiceImpl" />
<ref bean="QueryServiceWrapper" />
</jaxws:serviceBean>
</jaxws:server>
<jaxws:server id="NotificationListenerService" address="/notificationListener">
<jaxws:serviceBean>
<ref bean="notificationServiceImpl" />
<ref bean="NotificationListenerServiceWrapper" />
</jaxws:serviceBean>
</jaxws:server>
<jaxws:server id="LifecycleManagerServiceService" address="/lifecycleManager">
<jaxws:server id="LifecycleManagerService" address="/lifecycleManager">
<jaxws:serviceBean>
<ref bean="lcmServiceImpl" />
<ref bean="LifecycleManagerServiceWrapper" />
</jaxws:serviceBean>
</jaxws:server>
<jaxws:server id="ValidatorService" address="/validator">
<jaxws:serviceBean>
<ref bean="validatorServiceImpl" />
<ref bean="ValidatorServiceWrapper" />
</jaxws:serviceBean>
</jaxws:server>
@ -66,7 +88,7 @@
<!-- REST Service Definitions -->
<jaxrs:server id="registryRestServices" address="/">
<jaxrs:serviceBeans>
<ref bean="registryAvailabilityService"/>
<ref bean="registryAvailabilityService" />
<ref bean="registryObjectsRestService" />
<ref bean="repositoryObjectsRestService" />
<ref bean="queryProtocolRestService" />