/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.apache.falcon.persistence; import org.apache.openjpa.persistence.jdbc.ForeignKey; import org.apache.openjpa.persistence.jdbc.ForeignKeyAction; import org.apache.openjpa.persistence.jdbc.Index; import javax.persistence.Basic; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Lob; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; import javax.validation.constraints.NotNull; import java.sql.Timestamp; //SUSPEND CHECKSTYLE CHECK LineLengthCheck /** * Instance State which will be stored in DB. */ @Entity @NamedQueries({ @NamedQuery(name = PersistenceConstants.GET_INSTANCE, query = "select OBJECT(a) from InstanceBean a where a.id = :id"), @NamedQuery(name = PersistenceConstants.GET_INSTANCE_FOR_EXTERNAL_ID, query = "select OBJECT(a) from InstanceBean a where a.externalID = :externalID"), @NamedQuery(name = PersistenceConstants.DELETE_INSTANCE, query = "delete from InstanceBean a where a.id = :id"), @NamedQuery(name = PersistenceConstants.DELETE_INSTANCE_FOR_ENTITY, query = "delete from InstanceBean a where a.entityId = :entityId"), @NamedQuery(name = PersistenceConstants.UPDATE_INSTANCE, query = "update InstanceBean a set a.cluster = :cluster, a.externalID = :externalID, a.instanceTime = :instanceTime, a.creationTime = :creationTime, a.actualEndTime = :actualEndTime, a.currentState = :currentState, a.actualStartTime = :actualStartTime, a.instanceSequence = :instanceSequence, a.awaitedPredicates = :awaitedPredicates, a.properties = :properties where a.id = :id"), @NamedQuery(name = PersistenceConstants.GET_INSTANCES_FOR_ENTITY_CLUSTER, query = "select OBJECT(a) from InstanceBean a where a.entityId = :entityId AND a.cluster = :cluster"), @NamedQuery(name = PersistenceConstants.GET_INSTANCES_FOR_ENTITY_CLUSTER_FOR_STATES, query = "select OBJECT(a) from InstanceBean a where a.entityId = :entityId AND a.cluster = :cluster AND a.currentState IN (:currentState)"), @NamedQuery(name = PersistenceConstants.GET_INSTANCES_FOR_ENTITY_FOR_STATES, query = "select OBJECT(a) from InstanceBean a where a.entityId = :entityId AND a.currentState IN (:currentState)"), @NamedQuery(name = PersistenceConstants.GET_INSTANCES_FOR_ENTITY_CLUSTER_FOR_STATES_WITH_RANGE, query = "select OBJECT(a) from InstanceBean a where a.entityId = :entityId AND a.cluster = :cluster AND a.currentState IN (:currentState) AND a.instanceTime >= :startTime AND a.instanceTime < :endTime"), @NamedQuery(name = PersistenceConstants.GET_LAST_INSTANCE_FOR_ENTITY_CLUSTER, query = "select OBJECT(a) from InstanceBean a where a.entityId = :entityId AND a.cluster = :cluster order by a.instanceTime desc"), @NamedQuery(name = PersistenceConstants.DELETE_INSTANCES_TABLE, query = "delete from InstanceBean a"), @NamedQuery(name = PersistenceConstants.GET_INSTANCE_SUMMARY_BY_STATE_WITH_RANGE, query = "select a.currentState, COUNT(a) from InstanceBean a where a.entityId = :entityId AND a.cluster = :cluster AND a.instanceTime >= :startTime AND a.instanceTime < :endTime GROUP BY a.currentState") }) //RESUME CHECKSTYLE CHECK LineLengthCheck @Table(name = "INSTANCES") public class InstanceBean { @Id @NotNull private String id; @Basic @Index @NotNull @Column(name = "entity_id") private String entityId; @Basic @Index @NotNull @Column(name = "cluster") private String cluster; @Basic @Index @Column(name = "external_id") private String externalID; @Basic @Index @Column(name = "instance_time") private Timestamp instanceTime; @Basic @Index @NotNull @Column(name = "creation_time") private Timestamp creationTime; @Basic @Column(name = "actual_start_time") private Timestamp actualStartTime; @Basic @Column(name = "actual_end_time") private Timestamp actualEndTime; @Basic @Index @NotNull @Column(name = "current_state") private String currentState; @Basic @Index @NotNull @Column(name = "instance_sequence") private Integer instanceSequence; @ForeignKey(deleteAction= ForeignKeyAction.CASCADE) @ManyToOne(cascade= CascadeType.REMOVE) private EntityBean entityBean; @Column(name = "awaited_predicates") @Lob private byte[] awaitedPredicates; @Column(name = "properties") @Lob private byte[] properties; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getCluster() { return cluster; } public void setCluster(String cluster) { this.cluster = cluster; } public String getExternalID() { return externalID; } public void setExternalID(String externalID) { this.externalID = externalID; } public Timestamp getInstanceTime() { return instanceTime; } public void setInstanceTime(Timestamp instanceTime) { this.instanceTime = instanceTime; } public Timestamp getCreationTime() { return creationTime; } public void setCreationTime(Timestamp creationTime) { this.creationTime = creationTime; } public Timestamp getActualStartTime() { return actualStartTime; } public void setActualStartTime(Timestamp actualStartTime) { this.actualStartTime = actualStartTime; } public Timestamp getActualEndTime() { return actualEndTime; } public void setActualEndTime(Timestamp actualEndTime) { this.actualEndTime = actualEndTime; } public String getCurrentState() { return currentState; } public void setCurrentState(String currentState) { this.currentState = currentState; } public byte[] getAwaitedPredicates() { return awaitedPredicates; } public void setAwaitedPredicates(byte[] awaitedPredicates) { this.awaitedPredicates = awaitedPredicates; } public Integer getInstanceSequence() { return instanceSequence; } public void setInstanceSequence(Integer instanceSequence) { this.instanceSequence = instanceSequence; } public String getEntityId() { return entityId; } public void setEntityId(String entityId) { this.entityId = entityId; } public byte[] getProperties() { return properties; } public void setProperties(byte[] properties) { this.properties = properties; } public EntityBean getEntityBean() { return entityBean; } public void setEntityBean(EntityBean entityBean) { this.entityBean = entityBean; } }