2
0
Fork 0

WIP: left over open files for long...

This commit is contained in:
Willem 2017-06-10 02:22:01 +02:00
parent 0a2398c5c1
commit 76aa74990e
165 changed files with 4299 additions and 3373 deletions

View file

@ -1,29 +1,30 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>vasc-backend</artifactId>
<groupId>net.forwardfire.vasc.backend</groupId>
<version>0.4.2-SNAPSHOT</version>
</parent>
<artifactId>vasc-backend-jpa</artifactId>
<name>vasc-backend-jpa</name>
<description>vasc-backend-jpa</description>
<dependencies>
<dependency>
<groupId>net.forwardfire.vasc.backend</groupId>
<artifactId>vasc-backend-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>net.forwardfire.vasc.lib</groupId>
<artifactId>vasc-lib-xpql</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>${persistence-api.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>vasc-backend</artifactId>
<groupId>net.forwardfire.vasc.backend</groupId>
<version>0.4.2-SNAPSHOT</version>
</parent>
<artifactId>vasc-backend-jpa</artifactId>
<name>vasc-backend-jpa</name>
<description>vasc-backend-jpa</description>
<dependencies>
<dependency>
<groupId>net.forwardfire.vasc.backend</groupId>
<artifactId>vasc-backend-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>net.forwardfire.vasc.lib</groupId>
<artifactId>vasc-lib-xpql</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>${javaee-api.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>

View file

@ -26,73 +26,54 @@ import java.io.Serializable;
import javax.persistence.EntityManager;
import net.forwardfire.vasc.backend.AbstractVascBackend;
import net.forwardfire.vasc.backend.VascBackendException;
import net.forwardfire.vasc.backend.AbstractVascBackendLocal;
/**
* AbstractPersistenceVascBackend.
*
* @author Willem Cazander
* @version 1.0 Mar 21, 2007
* @version 1.0 Aug 25, 2014
*/
abstract public class AbstractPersistenceVascBackend<DATA_OBJECT extends Serializable> extends AbstractVascBackend<DATA_OBJECT> {
abstract public class AbstractPersistenceVascBackend<DATA_PK extends Serializable> extends AbstractVascBackendLocal<DATA_PK> {
protected boolean emTransaction = true;
private Boolean emTransaction;
abstract EntityManager getEntityManager();
private EntityManagerProvider entityManagerProvider = null;
abstract protected void startBackendPersistence();
/**
* @see net.forwardfire.vasc.backend.AbstractVascBackendLocal#startBackendLocal()
*/
@Override
public void persist(DATA_OBJECT object) throws VascBackendException {
EntityManager s = getEntityManager();
try {
if (emTransaction) {
s.getTransaction().begin();
}
s.persist(object);
if (emTransaction) {
s.getTransaction().commit();
}
} finally {
if (s!=null) {
//s.close();
}
}
protected final void startBackendLocal() {
requireNonNull(getEntityManagerProvider(), "entityManagerProvider is null.");
//requireNonEmpty(keyMapType.keySet(), "No primary keys defined.");
startBackendPersistence();
}
@Override
public DATA_OBJECT merge(DATA_OBJECT object) throws VascBackendException {
EntityManager s = getEntityManager();
try {
if (emTransaction) {
s.getTransaction().begin();
}
DATA_OBJECT result = (DATA_OBJECT)s.merge(object);
if (emTransaction) {
s.getTransaction().commit();
}
return result;
} finally {
if (s!=null) {
//s.close();
}
protected final EntityManager getEntityManager() {
if (emTransaction == null) {
emTransaction=entityManagerProvider.hasEntityManagerTransaction();
}
return entityManagerProvider.getEntityManager();
}
@Override
public void delete(DATA_OBJECT object) throws VascBackendException {
EntityManager s = getEntityManager();
try {
if (emTransaction) {
s.getTransaction().begin();
}
Object newObject = s.merge(object);
s.remove(newObject);
if (emTransaction) {
s.getTransaction().commit();
}
} finally {
if (s!=null) {
//s.close();
}
}
protected final boolean hasTransaction() {
return emTransaction;
}
/**
* @return the entityManagerProvider
*/
public final EntityManagerProvider getEntityManagerProvider() {
return entityManagerProvider;
}
/**
* @param entityManagerProvider the entityManagerProvider to set
*/
public final void setEntityManagerProvider(EntityManagerProvider entityManagerProvider) {
this.entityManagerProvider = entityManagerProvider;
}
}

View file

@ -0,0 +1,161 @@
/*
* Copyright 2007-2012 forwardfire.net All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.forwardfire.vasc.backends.jpa;
import java.io.Serializable;
import javax.persistence.EntityManager;
import net.forwardfire.vasc.backend.VascBackendAccessDataKey;
import net.forwardfire.vasc.backend.VascBackendException;
import net.forwardfire.vasc.backend.VascBackendAccessDataRecord;
import net.forwardfire.vasc.backend.crud.VascBackendCrud;
/**
* Manages persistance with xpql queries
*
* @author Willem Cazander
* @version 1.0 Mar 17, 2009
*/
public class PersistanceVascBackendCrud<DATA_PK extends Serializable,DATA_RECORD extends Serializable> extends AbstractPersistenceVascBackend<DATA_PK> implements VascBackendCrud<DATA_PK,DATA_RECORD> {
private Class<DATA_RECORD> recordClass = null;
public PersistanceVascBackendCrud() {
}
public PersistanceVascBackendCrud(Class<DATA_RECORD> recordClass) {
setRecordClass(recordClass);
}
@Override
protected void startBackendPersistence() {
requireNonNull(getRecordClass(), "recordClass is null");
}
@Override
public VascBackendAccessDataRecord<DATA_PK, DATA_RECORD> createVascBackendAccessDataRecord() {
// TODO Auto-generated method stub
return null;
}
@Override
public VascBackendAccessDataKey<DATA_PK> createVascBackendAccessDataKey() {
// TODO Auto-generated method stub
return null;
}
@Override
public DATA_RECORD newRecord() throws VascBackendException {
try {
return getRecordClass().newInstance();
} catch (InstantiationException | IllegalAccessException e) {
throw new VascBackendException(e);
}
}
@Override
public DATA_RECORD fetch(DATA_PK recordPK) throws VascBackendException {
EntityManager s = getEntityManager();
try {
if (hasTransaction()) {
s.getTransaction().begin();
}
DATA_RECORD record = s.find(getRecordClass(), recordPK);
if (hasTransaction()) {
s.getTransaction().commit();
}
return record;
} finally {
if (s!=null) {
//s.close();
}
}
}
@Override
public DATA_RECORD persist(DATA_RECORD record) throws VascBackendException {
EntityManager s = getEntityManager();
try {
if (hasTransaction()) {
s.getTransaction().begin();
}
s.persist(record);
if (hasTransaction()) {
s.getTransaction().commit();
}
return record;
} finally {
if (s!=null) {
//s.close();
}
}
}
@Override
public DATA_RECORD merge(DATA_RECORD record) throws VascBackendException {
EntityManager s = getEntityManager();
try {
if (hasTransaction()) {
s.getTransaction().begin();
}
DATA_RECORD result = (DATA_RECORD)s.merge(record);
if (hasTransaction()) {
s.getTransaction().commit();
}
return result;
} finally {
if (s!=null) {
//s.close();
}
}
}
@Override
public void delete(DATA_PK recordPK) throws VascBackendException {
EntityManager s = getEntityManager();
try {
if (hasTransaction()) {
s.getTransaction().begin();
}
Object newObject = s.find(Object.class,recordPK);
s.remove(newObject);
if (hasTransaction()) {
s.getTransaction().commit();
}
} finally {
if (s!=null) {
//s.close();
}
}
}
public Class<DATA_RECORD> getRecordClass() {
return recordClass;
}
public void setRecordClass(Class<DATA_RECORD> recordClass) {
this.recordClass = recordClass;
}
}

View file

@ -23,32 +23,30 @@
package net.forwardfire.vasc.backends.jpa;
import java.io.Serializable;
import java.util.EnumSet;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import net.forwardfire.vasc.backend.DefaultVascBackendResult;
import net.forwardfire.vasc.backend.VascBackendAccessDataKey;
import net.forwardfire.vasc.backend.VascBackendException;
import net.forwardfire.vasc.backend.VascBackendResult;
import net.forwardfire.vasc.backend.VascBackendState;
import net.forwardfire.vasc.backend.VascEntryFieldValue;
import net.forwardfire.vasc.backend.VascEntryRecordCreator;
import net.forwardfire.vasc.backend.data.BeanVascEntryFieldValue;
import net.forwardfire.vasc.backend.data.BeanVascEntryRecordCreator;
import net.forwardfire.vasc.backend.VascBackendAccessDataRecord;
import net.forwardfire.vasc.backend.data.BeanVascBackendAccessDataRecord;
import net.forwardfire.vasc.backend.list.DefaultVascBackendListResult;
import net.forwardfire.vasc.backend.list.VascBackendList;
import net.forwardfire.vasc.backend.list.VascBackendListFeature;
import net.forwardfire.vasc.backend.list.VascBackendListResult;
import net.forwardfire.vasc.backend.list.VascBackendListRequest;
import net.forwardfire.vasc.xpql.query.QueryParameterValue;
/**
* Manages persistance with xpql queries
*
* @author Willem Cazander
* @version 1.0 Mar 17, 2009
*/
public class XpqlPersistanceVascBackend<DATA_OBJECT extends Serializable> extends AbstractPersistenceVascBackend<DATA_OBJECT> {
private EntityManagerProvider entityManagerProvider = null;
public class PersistanceVascBackendXpqlList<DATA_PK extends Serializable,DATA_RECORD extends Serializable> extends AbstractPersistenceVascBackend<DATA_PK> implements VascBackendList<DATA_PK,DATA_RECORD> {
private net.forwardfire.vasc.xpql.query.Query query = null;
@ -62,38 +60,62 @@ public class XpqlPersistanceVascBackend<DATA_OBJECT extends Serializable> extend
private net.forwardfire.vasc.xpql.query.Query queryMoveDownUp = null;
private Class<?> resultClass = null;
public XpqlPersistanceVascBackend() {
}
/**
* @see net.forwardfire.vasc.backends.jpa.AbstractPersistenceVascBackend#getEntityManager()
*/
@Override
EntityManager getEntityManager() {
emTransaction=entityManagerProvider.hasEntityManagerTransaction();
return entityManagerProvider.getEntityManager();
public PersistanceVascBackendXpqlList() {
}
@Override
public VascBackendResult<DATA_OBJECT> execute(VascBackendState state) throws VascBackendException {
return new DefaultVascBackendResult<DATA_OBJECT>(executeList(state),fetchTotalExecuteSize(state));
protected void startBackendPersistence() {
// TODO Auto-generated method stub
}
@Override
public VascBackendAccessDataRecord<DATA_PK, DATA_RECORD> createVascBackendAccessDataRecord() {
// TODO Auto-generated method stub
return null;
}
@Override
public VascBackendAccessDataKey<DATA_PK> createVascBackendAccessDataKey() {
// TODO Auto-generated method stub
return null;
}
@Override
public EnumSet<VascBackendListFeature> getSupportedFeatures() {
// TODO Auto-generated method stub
return null;
}
@Override
public List<String> getSupportedRowActions() {
// TODO Auto-generated method stub
return null;
}
@Override
public void executeRowAction(VascBackendListRequest request,List<DATA_PK> recordPKs, String actionName) throws VascBackendException {
// TODO Auto-generated method stub
}
@Override
public VascBackendListResult<DATA_RECORD> execute(VascBackendListRequest state) throws VascBackendException {
return new DefaultVascBackendListResult<DATA_RECORD>(executeList(state),fetchTotalExecuteSize(state));
}
@SuppressWarnings("unchecked")
private List<DATA_OBJECT> executeList(VascBackendState state) throws VascBackendException {
private List<DATA_RECORD> executeList(VascBackendListRequest state) throws VascBackendException {
// Copy parameters
for (String key:state.getDataParameterKeys()) {
Object value = state.getDataParameter(key);
query.setQueryParameter(key, value);
if (queryTotal!=null) {
queryTotal.setQueryParameter(key, value);
}
}
// Copy parameters
for (String key:state.getDataParameterKeys()) {
Object value = state.getDataParameter(key);
//System.out.println("Set para pame: "+key+" value: "+value);
query.setQueryParameter(key, value);
if (queryTotal!=null) {
queryTotal.setQueryParameter(key, value);
}
}
EntityManager em = getEntityManager();
try {
Query q = em.createQuery(query.toPreparedSQL(query));
@ -109,11 +131,11 @@ public class XpqlPersistanceVascBackend<DATA_OBJECT extends Serializable> extend
q.setFirstResult(state.getPageIndex()*state.getPageSize());
q.setMaxResults(state.getPageSize());
}
if (emTransaction) {
if (hasTransaction()) {
em.getTransaction().begin();
}
List<DATA_OBJECT> data = q.getResultList();
if (emTransaction) {
List<DATA_RECORD> data = q.getResultList();
if (hasTransaction()) {
em.getTransaction().commit();
}
return data;
@ -123,24 +145,6 @@ public class XpqlPersistanceVascBackend<DATA_OBJECT extends Serializable> extend
}
}
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#provideVascEntryFieldValue()
*/
@Override
public VascEntryFieldValue provideVascEntryFieldValue() {
VascEntryFieldValue result = new BeanVascEntryFieldValue();
return result;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#provideVascEntryRecordCreator()
*/
@Override
public VascEntryRecordCreator provideVascEntryRecordCreator() {
VascEntryRecordCreator result = new BeanVascEntryRecordCreator(resultClass);
return result;
}
/**
* @return the query
@ -155,53 +159,24 @@ public class XpqlPersistanceVascBackend<DATA_OBJECT extends Serializable> extend
public void setQuery(net.forwardfire.vasc.xpql.query.Query query) {
this.query = query;
}
/**
* @return the queryTotal
*/
public net.forwardfire.vasc.xpql.query.Query getQueryTotal() {
return queryTotal;
}
/**
* @param queryTotal the queryTotal to set
*/
public void setQueryTotal(net.forwardfire.vasc.xpql.query.Query queryTotal) {
this.queryTotal = queryTotal;
}
/**
* @return the resultClass
* @see net.forwardfire.vasc.backend.crud.VascBackendList#isPageable()
*/
public Class<?> getResultClass() {
return resultClass;
}
/**
* @param resultClass the resultClass to set
*/
public void setResultClass(Class<?> resultClass) {
this.resultClass = resultClass;
}
/**
* @return the entityManagerProvider
*/
public EntityManagerProvider getEntityManagerProvider() {
return entityManagerProvider;
}
/**
* @param entityManagerProvider the entityManagerProvider to set
*/
public void setEntityManagerProvider(EntityManagerProvider entityManagerProvider) {
this.entityManagerProvider = entityManagerProvider;
}
/**
* @see net.forwardfire.vasc.backend.AbstractVascBackend#isPageable()
*/
@Override
public boolean isPageable() {
if (queryTotal==null) {
return false;
@ -209,21 +184,21 @@ public class XpqlPersistanceVascBackend<DATA_OBJECT extends Serializable> extend
return true;
}
private long fetchTotalExecuteSize(VascBackendState state) {
private long fetchTotalExecuteSize(VascBackendListRequest state) {
EntityManager em = getEntityManager();
try {
Query q = em.createQuery(queryTotal.toPreparedSQL(queryTotal));
List<QueryParameterValue> values = queryTotal.getOrderQueryParameterValues();
int i = 1;
for (QueryParameterValue value:values) {
q.setParameter(i,value.getValue());
q.setParameter(i,value.getValue());
i++;
}
if (emTransaction) {
if (hasTransaction()) {
em.getTransaction().begin();
}
Long resultTotal = (Long)q.getSingleResult();
if (emTransaction) {
if (hasTransaction()) {
em.getTransaction().commit();
}
return resultTotal;
@ -234,25 +209,23 @@ public class XpqlPersistanceVascBackend<DATA_OBJECT extends Serializable> extend
}
}
/**
* @see net.forwardfire.vasc.core.AbstractVascBackend#doRecordMoveDownById(VascBackendState state,java.lang.Object)
*/
@Override
public long doRecordMoveDownById(VascBackendState state,Object primaryId) throws VascBackendException {
public long doRecordMoveDownById(Object primaryId) throws VascBackendException {
long result = 0l;
if (queryMoveDown!=null) {
EntityManager em = getEntityManager();
try {
if (emTransaction) {
if (hasTransaction()) {
em.getTransaction().begin();
}
// Copy parameters
for (String key:state.getDataParameterKeys()) {
Object value = state.getDataParameter(key);
queryMoveDown.setQueryParameter(key, value);
}
// for (String key:state.getDataParameterKeys()) {
// Object value = state.getDataParameter(key);
// queryMoveDown.setQueryParameter(key, value);
// }
// set id
queryMoveDown.setQueryParameter("id", primaryId);
@ -268,10 +241,10 @@ public class XpqlPersistanceVascBackend<DATA_OBJECT extends Serializable> extend
result+=q.executeUpdate();
// Copy parameters
for (String key:state.getDataParameterKeys()) {
Object value = state.getDataParameter(key);
queryMoveDownUp.setQueryParameter(key, value);
}
// for (String key:state.getDataParameterKeys()) {
// Object value = state.getDataParameter(key);
// queryMoveDownUp.setQueryParameter(key, value);
// }
// set id
queryMoveDownUp.setQueryParameter("id", primaryId);
@ -286,7 +259,7 @@ public class XpqlPersistanceVascBackend<DATA_OBJECT extends Serializable> extend
}
result+=q.executeUpdate();
if (emTransaction) {
if (hasTransaction()) {
em.getTransaction().commit();
}
} finally {
@ -301,21 +274,20 @@ public class XpqlPersistanceVascBackend<DATA_OBJECT extends Serializable> extend
/**
* @see net.forwardfire.vasc.core.AbstractVascBackend#doRecordMoveUpById(VascBackendState state,java.lang.Object)
*/
@Override
public long doRecordMoveUpById(VascBackendState state,Object primaryId) throws VascBackendException {
public long doRecordMoveUpById(Object primaryId) throws VascBackendException {
long result = 0l;
if (queryMoveUp!=null) {
EntityManager em = getEntityManager();
try {
if (emTransaction) {
em.getTransaction().begin();
}
// if (emTransaction) {
// em.getTransaction().begin();
// }
// Copy parameters
for (String key:state.getDataParameterKeys()) {
Object value = state.getDataParameter(key);
queryMoveUp.setQueryParameter(key, value);
}
// for (String key:state.getDataParameterKeys()) {
// Object value = state.getDataParameter(key);
// queryMoveUp.setQueryParameter(key, value);
// }
// set id
queryMoveUp.setQueryParameter("id", primaryId);
@ -331,10 +303,10 @@ public class XpqlPersistanceVascBackend<DATA_OBJECT extends Serializable> extend
result+=q.executeUpdate();
// Copy parameters
for (String key:state.getDataParameterKeys()) {
Object value = state.getDataParameter(key);
queryMoveUpDown.setQueryParameter(key, value);
}
// for (String key:state.getDataParameterKeys()) {
// Object value = state.getDataParameter(key);
// queryMoveUpDown.setQueryParameter(key, value);
// }
// set id
queryMoveUpDown.setQueryParameter("id", primaryId);
@ -349,9 +321,9 @@ public class XpqlPersistanceVascBackend<DATA_OBJECT extends Serializable> extend
}
result+=q.executeUpdate();
if (emTransaction) {
em.getTransaction().commit();
}
// if (emTransaction) {
// em.getTransaction().commit();
// }
} finally {
if (em!=null) {
//em.close();
@ -360,11 +332,21 @@ public class XpqlPersistanceVascBackend<DATA_OBJECT extends Serializable> extend
}
return result;
}
/**
* @see net.forwardfire.vasc.backend.crud.VascBackendList#isSearchable()
*/
public boolean isSearchable() {
if (query.getQueryParameterValue("text_search")!=null) {
return true;
}
return false;
}
/**
* @see net.forwardfire.vasc.backend.AbstractVascBackend#isRecordMoveable()
* @see net.forwardfire.vasc.backend.crud.AbstractVascBackendCrud#isRecordMoveable()
*/
@Override
public boolean isRecordMoveable() {
return queryMoveUp!=null & queryMoveDown!=null;
}
@ -424,16 +406,4 @@ public class XpqlPersistanceVascBackend<DATA_OBJECT extends Serializable> extend
public void setQueryMoveDownUp(net.forwardfire.vasc.xpql.query.Query queryMoveDownUp) {
this.queryMoveDownUp = queryMoveDownUp;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#isSearchable()
*/
@Override
public boolean isSearchable() {
if (query.getQueryParameterValue("text_search")==null) {
return false;
}
//return true;
return false;
}
}
}