All Downloads are FREE. Search and download functionalities are using the official Maven repository.

dao.EventDistributorMapper.xml Maven / Gradle / Ivy

Go to download

RDBMS based messaging as an alternative to other standard messaging like JMS / Kafka

The newest version!
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

<mapper namespace="org.simple4j.eventdistributor.dao.EventDistributorMapper">
	<resultMap id="eventPaginationResult" type="Event">
        <result column="EVENT_ID" property="eventId"/>
        <result column="BUSINESS_RECORD_ID" property="businessRecordId"/>
        <result column="BUSINESS_REPORT_TYPE" property="businessRecordType"/>
        <result column="BUSINESS_RECORD_SUB_TYPE" property="businessRecordSubType"/>
        <result column="BUSINESS_RECORD_VERSION" property="businessRecordVersion"/>
        <result column="SOURCE" property="source"/>
        <result column="STATUS" property="status"/>
        <result column="DUPLICATE_EVENT_ID" property="duplicateEventId"/>
        <result column="DUPLICATE_CHECK_END_TIME" property="duplicateCheckEndTime"/>
        <result column="REPOST_PARENT_EVENT_ID" property="repostParentEventId"/>
        <result column="PROCESSING_HOST" property="processingHost"/>
        <result column="STATUS_EXPIRY_TIME" property="statusExpiryTime"/>
        <result column="CREATE_TIME" property="createTime"/>
        <result column="UPDATE_TIME" property="updateTime"/>
        <result column="CREATE_BY" property="createBy"/>
        <result column="UPDATE_BY" property="updateBy"/>
    </resultMap>

	<resultMap id="eventResult" type="Event" extends="eventPaginationResult">
        <collection property="targetIds" ofType="String"
            column="EVENT_ID" select="selectTargetFromEvent" />

        <collection property="publishAttempts" ofType="PublishAttempt"
            column="EVENT_ID" select="selectPublishAttemptFromEvent" />
    </resultMap>

	<resultMap id="publishAttemptResult" type="PublishAttempt">
        <result column="PUBLISH_ID" property="publishId"/>
        <result column="EVENT_ID" property="eventId"/>
        <result column="TARGET_ID" property="targetId"/>
        <result column="RESPONSE_HTTP_CODE" property="responseHttpCode"/>
        <result column="RESPONSE_BODY" property="responseBody"/>
        <result column="ERROR_DETAILS" property="errorDetails"/>
        <result column="STATUS" property="publishAttemptStatus"/>
        <result column="CREATE_TIME" property="createTime"/>
        <result column="UPDATE_TIME" property="updateTime"/>
        <result column="CREATE_BY" property="createBy"/>
    </resultMap>

	<select id="getEvents" resultMap="eventResult">

		SELECT
			a.EVENT_ID,
			a.BUSINESS_RECORD_ID,
			a.BUSINESS_REPORT_TYPE,
			a.BUSINESS_RECORD_SUB_TYPE,
			a.BUSINESS_RECORD_VERSION,
			a.SOURCE,
			a.STATUS,
			a.DUPLICATE_EVENT_ID,
			a.DUPLICATE_CHECK_END_TIME,
			a.REPOST_PARENT_EVENT_ID,
			a.PROCESSING_HOST,
			a.STATUS_EXPIRY_TIME,
			a.CREATE_TIME,
			a.UPDATE_TIME,
			a.CREATE_BY,
			a.UPDATE_BY
		FROM (		
			SELECT
				b.EVENT_ID,
				b.BUSINESS_RECORD_ID,
				b.BUSINESS_REPORT_TYPE,
				b.BUSINESS_RECORD_SUB_TYPE,
				b.BUSINESS_RECORD_VERSION,
				b.SOURCE,
				b.STATUS,
				b.DUPLICATE_EVENT_ID,
				b.DUPLICATE_CHECK_END_TIME,
				b.REPOST_PARENT_EVENT_ID,
				b.PROCESSING_HOST,
				b.STATUS_EXPIRY_TIME,
				b.CREATE_TIME,
				b.UPDATE_TIME,
				b.CREATE_BY,
				b.UPDATE_BY,
				rownum rn
			FROM EVENT b
			
		<![CDATA[
			WHERE rownum <= (#{startPosition} + #{numberOfRecords} - 1) 
		]]>
			  <if test="event.eventId != null">
			    AND b.EVENT_ID= #{event.eventId}
			  </if>
              <if test="event.businessRecordId != null">
                AND b.BUSINESS_RECORD_ID= #{event.businessRecordId}
              </if>
              <if test="event.businessRecordType != null">
                AND b.BUSINESS_REPORT_TYPE= #{event.businessRecordType}
              </if>
              <if test="event.businessRecordSubType != null">
                AND b.BUSINESS_RECORD_SUB_TYPE= #{event.businessRecordSubType}
              </if>
              <if test="event.businessRecordVersion != null">
                AND b.BUSINESS_RECORD_VERSION= #{event.businessRecordVersion}
              </if>
              <if test="event.source != null">
                AND b.SOURCE= #{event.source}
              </if>
              <if test="event.status != null">
                AND b.STATUS= #{event.status}
              </if>
              <if test="event.processingHost != null">
                AND b.PROCESSING_HOST= #{event.processingHost}
              </if>
              <if test="event.createBy != null">
                AND b.CREATE_BY= #{event.createBy}
              </if>
              <if test="event.updateBy != null">
                AND b.UPDATE_BY= #{event.updateBy}
              </if>
          ) a
		<![CDATA[
          WHERE a.rn >= #{startPosition}
          ORDER BY a.CREATE_TIME DESC
		]]>
    </select>

	<select id="getEventsForDuplicateCheck" resultMap="eventResult">

		SELECT
			a.EVENT_ID,
			a.BUSINESS_RECORD_ID,
			a.BUSINESS_REPORT_TYPE,
			a.BUSINESS_RECORD_SUB_TYPE,
			a.BUSINESS_RECORD_VERSION,
			a.SOURCE,
			a.STATUS,
			a.DUPLICATE_EVENT_ID,
			a.DUPLICATE_CHECK_END_TIME,
			a.REPOST_PARENT_EVENT_ID,
			a.PROCESSING_HOST,
			a.STATUS_EXPIRY_TIME,
			a.CREATE_TIME,
			a.UPDATE_TIME,
			a.CREATE_BY,
			a.UPDATE_BY
		FROM (		
			SELECT
				b.EVENT_ID,
				b.BUSINESS_RECORD_ID,
				b.BUSINESS_REPORT_TYPE,
				b.BUSINESS_RECORD_SUB_TYPE,
				b.BUSINESS_RECORD_VERSION,
				b.SOURCE,
				b.STATUS,
				b.DUPLICATE_EVENT_ID,
				b.DUPLICATE_CHECK_END_TIME,
				b.REPOST_PARENT_EVENT_ID,
				b.PROCESSING_HOST,
				b.STATUS_EXPIRY_TIME,
				b.CREATE_TIME,
				b.UPDATE_TIME,
				b.CREATE_BY,
				b.UPDATE_BY,
				rownum rn
			FROM EVENT b
			
		<![CDATA[
			WHERE rownum <= (#{startPosition} + #{numberOfRecords}) 
			  AND b.DUPLICATE_CHECK_END_TIME > #{event.createTime}
			  AND b.STATUS != 'ABORT'
		]]>
              <if test="event.businessRecordId != null">
                AND b.BUSINESS_RECORD_ID= #{event.businessRecordId}
              </if>
              <if test="event.businessRecordType != null">
                AND b.BUSINESS_REPORT_TYPE= #{event.businessRecordType}
              </if>
              <if test="event.businessRecordSubType != null">
                AND b.BUSINESS_RECORD_SUB_TYPE= #{event.businessRecordSubType}
              </if>
              <if test="event.businessRecordVersion != null">
                AND b.BUSINESS_RECORD_VERSION= #{event.businessRecordVersion}
              </if>
          ) a
		<![CDATA[
          WHERE a.rn >= #{startPosition}
		]]>
    </select>

	
	
	<insert id="insertEvent" parameterType="Event">
        	INSERT INTO EVENT (EVENT_ID,BUSINESS_RECORD_ID,BUSINESS_REPORT_TYPE,BUSINESS_RECORD_SUB_TYPE,BUSINESS_RECORD_VERSION,SOURCE,STATUS,DUPLICATE_EVENT_ID,DUPLICATE_CHECK_END_TIME,REPOST_PARENT_EVENT_ID,PROCESSING_HOST,STATUS_EXPIRY_TIME,CREATE_TIME,UPDATE_TIME,CREATE_BY,UPDATE_BY) 
        	VALUES (#{event.eventId},#{event.businessRecordId},#{event.businessRecordType},#{event.businessRecordSubType},#{event.businessRecordVersion},#{event.source},#{event.status},#{event.duplicateEventId},#{event.duplicateCheckEndTime},#{event.repostParentEventId},#{event.processingHost},#{event.statusExpiryTime},#{event.createTime},#{event.updateTime},#{event.createBy},#{event.updateBy})
    </insert>

	<select id="getEventId" resultType="java.lang.Long">
		<![CDATA[
			SELECT EVENT_SEQ.nextval
			FROM DUAL
		]]>
    </select>

	<insert id="insertPublishAttempt" parameterType="PublishAttempt">
        	INSERT INTO PUBLISH_ATTEMPT (PUBLISH_ID, EVENT_ID, TARGET_ID, RESPONSE_HTTP_CODE, RESPONSE_BODY, ERROR_DETAILS, STATUS, CREATE_TIME, UPDATE_TIME, CREATED_BY) 
        	VALUES (#{publishAttempt.publishId},#{publishAttempt.eventId},#{publishAttempt.targetId},#{publishAttempt.responseHttpCode},#{publishAttempt.responseBody},#{publishAttempt.errorDetails},#{publishAttempt.publishAttemptStatus},#{publishAttempt.createTime},#{publishAttempt.updateTime},#{publishAttempt.createBy})
    </insert>

	<select id="getPublishAttemptId" resultType="java.lang.Long">
		<![CDATA[
			SELECT PUBLISH_ATTEMPT_SEQ.nextval
			FROM DUAL
		]]>
    </select>

	<select id="getEvent" parameterType="java.lang.Long" resultMap="eventResult">
		<![CDATA[
			SELECT
				b.EVENT_ID,
				b.BUSINESS_RECORD_ID,
				b.BUSINESS_REPORT_TYPE,
				b.BUSINESS_RECORD_SUB_TYPE,
				b.BUSINESS_RECORD_VERSION,
				b.SOURCE,
				b.STATUS,
				b.DUPLICATE_EVENT_ID,
				b.DUPLICATE_CHECK_END_TIME,
				b.REPOST_PARENT_EVENT_ID,
				b.PROCESSING_HOST,
				b.STATUS_EXPIRY_TIME,
				b.CREATE_TIME,
				b.UPDATE_TIME,
				b.CREATE_BY,
				b.UPDATE_BY
			FROM EVENT b
			WHERE b.EVENT_ID = #{eventId}
		]]>
    </select>

	<select id="selectTargetFromEvent" parameterType="java.lang.Integer" resultType="java.lang.String">
		<![CDATA[
			SELECT TARGET_ID
			FROM EVENT_TARGET
			WHERE EVENT_ID = #{EVENT_ID}
		]]>
    </select>

	<select id="selectPublishAttemptFromEvent" parameterType="java.lang.Integer" resultMap="publishAttemptResult">
		<![CDATA[
			SELECT
				b.PUBLISH_ID,
				b.EVENT_ID,
				b.TARGET_ID,
				b.RESPONSE_HTTP_CODE,
				b.RESPONSE_BODY,
				b.ERROR_DETAILS,
				b.STATUS,
				b.CREATE_TIME,
				b.UPDATE_TIME,
				b.CREATED_BY
			FROM PUBLISH_ATTEMPT b
			WHERE b.EVENT_ID = #{EVENT_ID}
		]]>
    </select>

	<select id="getPublishAttempt" parameterType="java.lang.Long" resultMap="publishAttemptResult">
		<![CDATA[
			SELECT
				b.PUBLISH_ID,
				b.EVENT_ID,
				b.TARGET_ID,
				b.RESPONSE_HTTP_CODE,
				b.RESPONSE_BODY,
				b.ERROR_DETAILS,
				b.STATUS,
				b.CREATE_TIME,
				b.UPDATE_TIME,
				b.CREATED_BY
			FROM PUBLISH_ATTEMPT b
			WHERE b.PUBLISH_ID = #{publishId}
		]]>
    </select>

	<insert id="insertEventTarget">
        	INSERT INTO EVENT_TARGET (EVENT_ID, TARGET_ID)
        	VALUES (#{eventId},#{targetId})
    </insert>

	<update id="lockEvents">
		<![CDATA[
            UPDATE EVENT
            SET STATUS='IN_PROGRESS', PROCESSING_HOST = #{hostname}, 
            STATUS_EXPIRY_TIME = #{statusExpiryTimeZonedDateTime}, 
            UPDATE_TIME = #{currentTime}, 
            UPDATE_BY = 'EventFetcher'
            WHERE EVENT_ID IN (SELECT EVENT_ID FROM EVENT WHERE rownum < #{batchSize} AND 
            												STATUS IN ('NEW','IN_PROGRESS') AND 
            												NVL(STATUS_EXPIRY_TIME, #{currentTime})<=#{currentTime}
            				  )
		]]>
    </update>

	<select id="fetchLockedEvents" parameterType="java.lang.String" resultMap="eventResult">
		<![CDATA[
			SELECT
				b.EVENT_ID,
				b.BUSINESS_RECORD_ID,
				b.BUSINESS_REPORT_TYPE,
				b.BUSINESS_RECORD_SUB_TYPE,
				b.BUSINESS_RECORD_VERSION,
				b.SOURCE,
				b.STATUS,
				b.DUPLICATE_EVENT_ID,
				b.DUPLICATE_CHECK_END_TIME,
				b.REPOST_PARENT_EVENT_ID,
				b.PROCESSING_HOST,
				b.STATUS_EXPIRY_TIME,
				b.CREATE_TIME,
				b.UPDATE_TIME,
				b.CREATE_BY,
				b.UPDATE_BY
			FROM EVENT b
			WHERE b.PROCESSING_HOST = #{hostname}
			  AND b.STATUS = 'IN_PROGRESS'
			ORDER BY b.UPDATE_TIME, b.CREATE_TIME, b.EVENT_ID
		]]>
    </select>

	<update id="updatePublishAttempt" parameterType="PublishAttempt">
		<![CDATA[
            UPDATE PUBLISH_ATTEMPT
            SET RESPONSE_HTTP_CODE =#{publishAttempt.responseHttpCode},
                RESPONSE_BODY = #{publishAttempt.responseBody},
                ERROR_DETAILS = #{publishAttempt.errorDetails},
                STATUS = #{publishAttempt.publishAttemptStatus},
                UPDATE_TIME = #{publishAttempt.updateTime}
            WHERE PUBLISH_ID = #{publishAttempt.publishId}
		]]>
    </update>

	<update id="updateEvent" parameterType="Event">
		<![CDATA[
            UPDATE EVENT
            SET STATUS =#{event.status},
                UPDATE_TIME = #{event.updateTime},
                UPDATE_BY = #{event.updateBy}
            WHERE EVENT_ID = #{event.eventId}
		]]>
    </update>


</mapper>




© 2015 - 2025 Weber Informatics LLC | Privacy Policy