JPA classes manually managed
This commit is contained in:
parent
89ff09e630
commit
14ac05ea6c
|
@ -5,6 +5,7 @@ import java.io.UncheckedIOException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -43,7 +44,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public abstract class AbstractRecordManager<T extends Record> {
|
public abstract class AbstractRecordManager<T extends Record> {
|
||||||
|
|
||||||
|
|
||||||
private static EntityManagerFactory emf=null;
|
private static EntityManagerFactory emf=null;
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
|
@ -52,38 +53,38 @@ public abstract class AbstractRecordManager<T extends Record> {
|
||||||
try {
|
try {
|
||||||
DatabaseConnection conn=ISUtils.queryForDB("postgresql", "internal-db");
|
DatabaseConnection conn=ISUtils.queryForDB("postgresql", "internal-db");
|
||||||
log.debug("Found Internal Database : "+conn);
|
log.debug("Found Internal Database : "+conn);
|
||||||
|
|
||||||
emf = new HibernatePersistenceProvider().createContainerEntityManagerFactory(
|
emf = new HibernatePersistenceProvider().createContainerEntityManagerFactory(
|
||||||
archiverPersistenceUnitInfo(),
|
archiverPersistenceUnitInfo(),
|
||||||
ImmutableMap.<String, Object>builder()
|
ImmutableMap.<String, Object>builder()
|
||||||
.put(AvailableSettings.JPA_JDBC_DRIVER, "org.postgresql.Driver")
|
.put(AvailableSettings.JPA_JDBC_DRIVER, "org.postgresql.Driver")
|
||||||
.put(AvailableSettings.JPA_JDBC_URL, conn.getUrl())
|
.put(AvailableSettings.JPA_JDBC_URL, conn.getUrl())
|
||||||
.put(AvailableSettings.DIALECT, org.hibernate.dialect.PostgreSQLDialect.class)
|
.put(AvailableSettings.DIALECT, org.hibernate.dialect.PostgreSQLDialect.class)
|
||||||
.put(AvailableSettings.HBM2DDL_AUTO, org.hibernate.tool.schema.Action.UPDATE)
|
.put(AvailableSettings.HBM2DDL_AUTO, org.hibernate.tool.schema.Action.UPDATE)
|
||||||
.put(AvailableSettings.SHOW_SQL, true)
|
.put(AvailableSettings.SHOW_SQL, true)
|
||||||
.put(AvailableSettings.QUERY_STARTUP_CHECKING, false)
|
.put(AvailableSettings.QUERY_STARTUP_CHECKING, false)
|
||||||
.put(AvailableSettings.GENERATE_STATISTICS, false)
|
.put(AvailableSettings.GENERATE_STATISTICS, false)
|
||||||
.put(AvailableSettings.USE_REFLECTION_OPTIMIZER, false)
|
.put(AvailableSettings.USE_REFLECTION_OPTIMIZER, false)
|
||||||
.put(AvailableSettings.USE_SECOND_LEVEL_CACHE, false)
|
.put(AvailableSettings.USE_SECOND_LEVEL_CACHE, false)
|
||||||
.put(AvailableSettings.USE_QUERY_CACHE, false)
|
.put(AvailableSettings.USE_QUERY_CACHE, false)
|
||||||
.put(AvailableSettings.USE_STRUCTURED_CACHE, false)
|
.put(AvailableSettings.USE_STRUCTURED_CACHE, false)
|
||||||
.put(AvailableSettings.STATEMENT_BATCH_SIZE, 20)
|
.put(AvailableSettings.STATEMENT_BATCH_SIZE, 20)
|
||||||
.put(AvailableSettings.JPA_JDBC_USER, conn.getUser())
|
.put(AvailableSettings.JPA_JDBC_USER, conn.getUser())
|
||||||
.put(AvailableSettings.JPA_JDBC_PASSWORD, conn.getPwd())
|
.put(AvailableSettings.JPA_JDBC_PASSWORD, conn.getPwd())
|
||||||
.build());
|
.build());
|
||||||
}catch(Throwable t) {
|
}catch(Throwable t) {
|
||||||
log.warn("Unable to contact DB from IS, trying local..",t);
|
log.warn("Unable to contact DB from IS, trying local..",t);
|
||||||
try{
|
try{
|
||||||
emf=Persistence.createEntityManagerFactory(DBConstants.INTERNAL.DB_NAME);
|
emf=Persistence.createEntityManagerFactory(DBConstants.INTERNAL.DB_NAME);
|
||||||
}catch(Throwable t1) {
|
}catch(Throwable t1) {
|
||||||
log.error("NO INTERNAL DATABASE FOUND ",t);
|
log.error("NO INTERNAL DATABASE FOUND ",t);
|
||||||
throw new RuntimeException("NO INTERNAL DATABASE",t);
|
throw new RuntimeException("NO INTERNAL DATABASE",t);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return emf;
|
return emf;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void shutdown() {
|
public static void shutdown() {
|
||||||
getEMF().close();
|
getEMF().close();
|
||||||
}
|
}
|
||||||
|
@ -106,10 +107,10 @@ public abstract class AbstractRecordManager<T extends Record> {
|
||||||
}
|
}
|
||||||
|
|
||||||
//Transaction management
|
//Transaction management
|
||||||
|
|
||||||
EntityTransaction transaction=null;
|
EntityTransaction transaction=null;
|
||||||
EntityManager entityManager=null;
|
EntityManager entityManager=null;
|
||||||
|
|
||||||
//************************ INSTANCE
|
//************************ INSTANCE
|
||||||
|
|
||||||
private T theRecord;
|
private T theRecord;
|
||||||
|
@ -122,7 +123,7 @@ public abstract class AbstractRecordManager<T extends Record> {
|
||||||
transaction.begin();
|
transaction.begin();
|
||||||
this.theRecord=theRecord;
|
this.theRecord=theRecord;
|
||||||
storeInfo();
|
storeInfo();
|
||||||
|
|
||||||
this.contentHandler=new ContentHandler(theRecord);
|
this.contentHandler=new ContentHandler(theRecord);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,24 +148,24 @@ public abstract class AbstractRecordManager<T extends Record> {
|
||||||
|
|
||||||
log.trace("Committing record "+theRecord+" Publish is "+publish);
|
log.trace("Committing record "+theRecord+" Publish is "+publish);
|
||||||
if (publish) validate();
|
if (publish) validate();
|
||||||
|
|
||||||
// storeInfo();
|
// storeInfo();
|
||||||
|
|
||||||
log.debug("Record is valid, storing changed content");
|
log.debug("Record is valid, storing changed content");
|
||||||
contentHandler.storeChanges(publish);
|
contentHandler.storeChanges(publish);
|
||||||
// storeInfo();
|
// storeInfo();
|
||||||
|
|
||||||
if(publish) {
|
if(publish) {
|
||||||
log.debug("Registering centroid of "+theRecord);
|
log.debug("Registering centroid of "+theRecord);
|
||||||
registerCentroid();
|
registerCentroid();
|
||||||
// storeInfo();
|
// storeInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
transaction.commit();
|
transaction.commit();
|
||||||
return theRecord;
|
return theRecord;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void finalize() throws Throwable {
|
protected void finalize() throws Throwable {
|
||||||
entityManager.close();
|
entityManager.close();
|
||||||
|
@ -184,11 +185,11 @@ public abstract class AbstractRecordManager<T extends Record> {
|
||||||
log.debug("Inserting / updated centroid Row {} ",centroidRow);
|
log.debug("Inserting / updated centroid Row {} ",centroidRow);
|
||||||
|
|
||||||
PreparedStatement ps = db.prepareInsertStatement(centroidsTable, true, true);
|
PreparedStatement ps = db.prepareInsertStatement(centroidsTable, true, true);
|
||||||
|
|
||||||
|
|
||||||
log.debug("Deleting centroid if present. ID is "+theRecord.getId());
|
log.debug("Deleting centroid if present. ID is "+theRecord.getId());
|
||||||
db.deleteByFieldValue(centroidsTable, new Field(DBConstants.Concessioni.ID,FieldType.TEXT), theRecord.getId()+"");
|
db.deleteByFieldValue(centroidsTable, new Field(DBConstants.Concessioni.ID,FieldType.TEXT), theRecord.getId()+"");
|
||||||
|
|
||||||
centroidsTable.fillCSVPreparedStatament(centroidRow, ps, false);
|
centroidsTable.fillCSVPreparedStatament(centroidRow, ps, false);
|
||||||
ps.executeUpdate();
|
ps.executeUpdate();
|
||||||
db.commit();
|
db.commit();
|
||||||
|
@ -198,8 +199,8 @@ public abstract class AbstractRecordManager<T extends Record> {
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected abstract Map<String,String> evaluateCentroid();
|
protected abstract Map<String,String> evaluateCentroid();
|
||||||
protected void publish() {
|
protected void publish() {
|
||||||
//TODO
|
//TODO
|
||||||
|
@ -214,99 +215,117 @@ public abstract class AbstractRecordManager<T extends Record> {
|
||||||
|
|
||||||
|
|
||||||
//*********** PERSISTENCE
|
//*********** PERSISTENCE
|
||||||
|
|
||||||
private static PersistenceUnitInfo archiverPersistenceUnitInfo() {
|
private static PersistenceUnitInfo archiverPersistenceUnitInfo() {
|
||||||
return new PersistenceUnitInfo() {
|
|
||||||
@Override
|
|
||||||
public String getPersistenceUnitName() {
|
|
||||||
return "ApplicationPersistenceUnit";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
final List<String> MANAGED_CLASSES=Arrays.asList(new String[] {
|
||||||
public String getPersistenceProviderClassName() {
|
"org.gcube.application.geoportal.model.Record",
|
||||||
return "org.hibernate.jpa.HibernatePersistenceProvider";
|
"org.gcube.application.geoportal.model.concessioni.Concessione",
|
||||||
}
|
"org.gcube.application.geoportal.model.concessioni.LayerConcessione",
|
||||||
|
"org.gcube.application.geoportal.model.concessioni.RelazioneScavo",
|
||||||
|
|
||||||
@Override
|
"org.gcube.application.geoportal.model.content.AssociatedContent",
|
||||||
public PersistenceUnitTransactionType getTransactionType() {
|
"org.gcube.application.geoportal.model.content.GeoServerContent",
|
||||||
return PersistenceUnitTransactionType.RESOURCE_LOCAL;
|
"org.gcube.application.geoportal.model.content.OtherContent",
|
||||||
}
|
"org.gcube.application.geoportal.model.content.PersistedContent",
|
||||||
|
"org.gcube.application.geoportal.model.content.UploadedImage",
|
||||||
|
"org.gcube.application.geoportal.model.content.WorkspaceContent",
|
||||||
|
|
||||||
@Override
|
"org.gcube.application.geoportal.model.gis.ShapeFileLayerDescriptor",
|
||||||
public DataSource getJtaDataSource() {
|
"org.gcube.application.geoportal.model.gis.SDILayerDescriptor"});
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DataSource getNonJtaDataSource() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
return new PersistenceUnitInfo() {
|
||||||
public List<String> getMappingFileNames() {
|
@Override
|
||||||
return Collections.emptyList();
|
public String getPersistenceUnitName() {
|
||||||
}
|
return "ApplicationPersistenceUnit";
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<URL> getJarFileUrls() {
|
public String getPersistenceProviderClassName() {
|
||||||
try {
|
return "org.hibernate.jpa.HibernatePersistenceProvider";
|
||||||
return Collections.list(this.getClass()
|
}
|
||||||
.getClassLoader()
|
|
||||||
.getResources(""));
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new UncheckedIOException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public URL getPersistenceUnitRootUrl() {
|
public PersistenceUnitTransactionType getTransactionType() {
|
||||||
return null;
|
return PersistenceUnitTransactionType.RESOURCE_LOCAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getManagedClassNames() {
|
public DataSource getJtaDataSource() {
|
||||||
return Collections.emptyList();
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean excludeUnlistedClasses() {
|
public DataSource getNonJtaDataSource() {
|
||||||
return false;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SharedCacheMode getSharedCacheMode() {
|
public List<String> getMappingFileNames() {
|
||||||
return null;
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ValidationMode getValidationMode() {
|
public List<URL> getJarFileUrls() {
|
||||||
return null;
|
try {
|
||||||
}
|
return Collections.list(this.getClass()
|
||||||
|
.getClassLoader()
|
||||||
|
.getResources(""));
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new UncheckedIOException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Properties getProperties() {
|
public URL getPersistenceUnitRootUrl() {
|
||||||
return new Properties();
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getPersistenceXMLSchemaVersion() {
|
public List<String> getManagedClassNames() {
|
||||||
return null;
|
return MANAGED_CLASSES;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ClassLoader getClassLoader() {
|
public boolean excludeUnlistedClasses() {
|
||||||
return null;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTransformer(ClassTransformer transformer) {
|
public SharedCacheMode getSharedCacheMode() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
@Override
|
||||||
|
public ValidationMode getValidationMode() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ClassLoader getNewTempClassLoader() {
|
public Properties getProperties() {
|
||||||
return null;
|
return new Properties();
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
@Override
|
||||||
|
public String getPersistenceXMLSchemaVersion() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ClassLoader getClassLoader() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addTransformer(ClassTransformer transformer) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ClassLoader getNewTempClassLoader() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue