blob: d8286b6258d34e2410b71a5d97eacf505afb3182 [file] [log] [blame]
/**
* 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.oozie.store;
//import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityManager;
import javax.persistence.FlushModeType;
import javax.persistence.PersistenceUnit;
/*
import javax.persistence.Persistence;
import org.apache.oozie.CoordinatorActionBean;
import org.apache.oozie.CoordinatorJobBean;
import org.apache.oozie.WorkflowActionBean;
import org.apache.oozie.WorkflowJobBean;
import org.apache.oozie.SLAEventBean;
import org.apache.oozie.client.rest.JsonCoordinatorAction;
import org.apache.oozie.client.rest.JsonCoordinatorJob;
import org.apache.oozie.client.rest.JsonWorkflowAction;
import org.apache.oozie.client.rest.JsonWorkflowJob;
import org.apache.oozie.client.rest.JsonSLAEvent;
*/
import org.apache.oozie.service.Services;
import org.apache.oozie.service.StoreService;
import org.apache.oozie.util.XLog;
import org.apache.openjpa.persistence.OpenJPAEntityManager;
import org.apache.openjpa.persistence.OpenJPAPersistence;
import java.sql.Connection;
import java.sql.SQLException;
@PersistenceUnit(unitName = "oozie")
/**
* <code>Store</code> Abstract class to separate Entities from Actual store implementation
*/
public abstract class Store {
private EntityManager entityManager;
/**
* create a fresh transaction
*/
public Store() {
entityManager = Services.get().get(StoreService.class).getEntityManager();
}
/**
* Use an existing transaction for cross store operations
*
* @param store use the EntityManager of given store
*/
public Store(Store store) {
entityManager = store.getEntityManager();
}
/**
* Return EntityManager
*
* @return entity manager
*/
public EntityManager getEntityManager() {
return entityManager;
}
/**
* Invoke transaction on the EntityManager
*/
public void beginTrx() {
entityManager.setFlushMode(FlushModeType.COMMIT);
entityManager.getTransaction().begin();
}
/**
* Commit current transaction
*/
public void commitTrx() {
entityManager.getTransaction().commit();
}
/**
* Close current transaction <p> Before close transaction, it needs to be committed.
*/
public void closeTrx() {
entityManager.close();
}
/**
* Rollback transaction
*/
public void rollbackTrx() {
entityManager.getTransaction().rollback();
}
/**
* Check if transaction is active
*
* @return boolean
*/
public boolean isActive() {
return entityManager.getTransaction().isActive();
}
public String getConnection() {
OpenJPAEntityManager kem = OpenJPAPersistence.cast(entityManager);
Connection conn = (Connection) kem.getConnection();
return conn.toString();
}
public boolean isDetached(Object o) {
OpenJPAEntityManager kem = OpenJPAPersistence.cast(entityManager);
return kem.isDetached(o);
}
public boolean isClosed() {
OpenJPAEntityManager kem = OpenJPAPersistence.cast(entityManager);
Connection conn = (Connection) kem.getConnection();
try {
return conn.isClosed();
}
catch (SQLException e) {
XLog.getLog(getClass()).info(XLog.STD, e.getMessage(), e);
}
return true;
}
public boolean contains(Object entity) {
return entityManager.contains(entity);
}
public String getFlushMode() {
return entityManager.getFlushMode().toString();
}
}