transactional refactoring

This commit is contained in:
2023-02-13 11:47:52 -05:00
parent 7900841d4a
commit 2bb68c6039
15 changed files with 119 additions and 75 deletions

View File

@@ -2,12 +2,6 @@ package com.poststats.golf.api;
public class Constants extends com.poststats.api.Constants {
public static final String DATASOURCE_PROVIDER_GOLF = "dbds-golf";
public static final String CONNECTION_PROVIDER_GOLF = "dbcon-golf";
public static final String CONNECTION_PROVIDER_GOLF_TX = "dbcon-golf-tx";
public static final String STATEMENT_PROVIDER_GOLF = "dbstmt-golf";
public static final String STATEMENT_PROVIDER_GOLF_TX = "dbstmt-golf-tx";
public static final String BUDDY_ROLE = "buddy";
public static final String EVENT_ROLE = "event";
public static final String EVENT_SERIES_ROLE = "series";

View File

@@ -1,14 +1,14 @@
package com.poststats.golf.api.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.LinkedList;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* @author brian.long@poststats.com
*/
public abstract class BasePhoto<ConcreteT extends BasePhoto<ConcreteT>> extends com.poststats.api.model.BasePhoto<ConcreteT> {
public abstract class BasePhoto<ConcreteT extends BasePhoto<ConcreteT>>
extends com.poststats.api.model.BasePhoto<ConcreteT> {
@JsonProperty
private List<Integer> courseIds;

View File

@@ -0,0 +1,18 @@
package com.poststats.golf.provider;
import jakarta.inject.Qualifier;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Qualifier
@Target({
ElementType.TYPE, ElementType.PARAMETER, ElementType.FIELD
})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface GolfProvider {
}

View File

@@ -1,21 +1,22 @@
package com.poststats.golf.provider.impl;
import com.poststats.golf.api.Constants;
import com.poststats.golf.provider.GolfProvider;
import com.poststats.provider.ConnectionProvider;
import com.poststats.provider.DataSourceProvider;
import com.poststats.provider.NonTransactionalProvider;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import jakarta.enterprise.context.RequestScoped;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import java.sql.Connection;
@RequestScoped
@Named(Constants.CONNECTION_PROVIDER_GOLF)
@ApplicationScoped
@NonTransactionalProvider
@GolfProvider
public class DefaultConnectionProvider implements ConnectionProvider {
@Inject
@Named(Constants.DATASOURCE_PROVIDER_GOLF)
@GolfProvider
private DataSourceProvider dsp;
private Connection dbcon;

View File

@@ -1,14 +1,13 @@
package com.poststats.golf.provider.impl;
import com.brianlong.sql.DataSource;
import com.poststats.golf.api.Constants;
import com.poststats.golf.provider.GolfProvider;
import com.poststats.golf.sql.GolfDataSource;
import com.poststats.provider.impl.AbstractDataSourceProvider;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Named;
@ApplicationScoped
@Named(Constants.DATASOURCE_PROVIDER_GOLF)
@GolfProvider
public class DefaultDataSourceProvider extends AbstractDataSourceProvider {
public DataSource createDataSource() {

View File

@@ -1,19 +1,21 @@
package com.poststats.golf.provider.impl;
import com.poststats.golf.api.Constants;
import com.poststats.golf.provider.GolfProvider;
import com.poststats.golf.sql.GolfSQL;
import com.poststats.provider.ConnectionProvider;
import com.poststats.provider.NonTransactionalProvider;
import com.poststats.provider.impl.AbstractStatementProvider;
import jakarta.enterprise.context.Dependent;
import jakarta.inject.Inject;
import jakarta.inject.Named;
@Dependent
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
public class DefaultStatementProvider extends AbstractStatementProvider {
@Inject
@Named(Constants.CONNECTION_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
private ConnectionProvider cp;
@Override

View File

@@ -1,33 +1,35 @@
package com.poststats.golf.provider.impl;
import com.poststats.golf.api.Constants;
import com.poststats.golf.provider.GolfProvider;
import com.poststats.provider.ConnectionProvider;
import com.poststats.provider.DataSourceProvider;
import com.poststats.provider.TransactionalProvider;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import jakarta.enterprise.context.RequestScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import jakarta.transaction.TransactionScoped;
import java.io.Serializable;
import java.sql.Connection;
@RequestScoped
@Named(Constants.CONNECTION_PROVIDER_GOLF_TX)
public class TxConnectionProvider implements ConnectionProvider {
@TransactionScoped
@TransactionalProvider
@GolfProvider
public class TxConnectionProvider implements ConnectionProvider, Serializable {
@Inject
@Named(Constants.DATASOURCE_PROVIDER_GOLF)
@GolfProvider
private DataSourceProvider dsp;
private Connection dbcon;
@PostConstruct
public void acquire() {
this.dbcon = this.dsp.get().acquireTX(true);
this.dbcon = this.dsp.get().acquire(true);
}
@PreDestroy
public void release() {
this.dsp.get().releaseTX(this.dbcon);
this.dsp.get().release(this.dbcon);
}
@Override

View File

@@ -1,19 +1,21 @@
package com.poststats.golf.provider.impl;
import com.poststats.golf.api.Constants;
import com.poststats.golf.provider.GolfProvider;
import com.poststats.golf.sql.GolfSQL;
import com.poststats.provider.ConnectionProvider;
import com.poststats.provider.TransactionalProvider;
import com.poststats.provider.impl.AbstractStatementProvider;
import jakarta.enterprise.context.Dependent;
import jakarta.inject.Inject;
import jakarta.inject.Named;
@Dependent
@Named(Constants.STATEMENT_PROVIDER_GOLF_TX)
@TransactionalProvider
@GolfProvider
public class TxStatementProvider extends AbstractStatementProvider {
@Inject
@Named(Constants.CONNECTION_PROVIDER_GOLF_TX)
@TransactionalProvider
@GolfProvider
private ConnectionProvider cp;
@Override

View File

@@ -6,8 +6,9 @@ import com.brianlong.sql.FlexPreparedStatement;
import com.brianlong.sql.ResultSubSetFeature;
import com.brianlong.util.FlexMap;
import com.brianlong.util.SubList;
import com.poststats.golf.api.Constants;
import com.poststats.golf.provider.GolfProvider;
import com.poststats.golf.service.CourseService;
import com.poststats.provider.NonTransactionalProvider;
import com.poststats.provider.Statement;
import com.poststats.provider.StatementProvider;
import com.poststats.service.FacilityService;
@@ -16,7 +17,6 @@ import com.poststats.service.db.CacheableServiceDAO;
import com.poststats.sql.PostStatsSQL;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Map;
@@ -67,7 +67,8 @@ public class CourseServiceDAO extends CacheableServiceDAO<Integer> implements Co
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(
feature = ResultSubSetFeature.class,
sql = "SELECT C.courseID, C.course, C.access, CP.prefix, "
@@ -100,7 +101,8 @@ public class CourseServiceDAO extends CacheableServiceDAO<Integer> implements Co
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(
feature = ResultSubSetFeature.class,
sql = "SELECT C.courseID, C.course, C.access, CP.prefix, "
@@ -139,7 +141,8 @@ public class CourseServiceDAO extends CacheableServiceDAO<Integer> implements Co
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(
feature = ResultSubSetFeature.class,
sql = "SELECT C.courseID, C.course, C.access, CP.prefix, "
@@ -171,7 +174,8 @@ public class CourseServiceDAO extends CacheableServiceDAO<Integer> implements Co
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(
sql = "SELECT CP.*, C.* "
+ "FROM ~g~.Course C "
@@ -191,7 +195,8 @@ public class CourseServiceDAO extends CacheableServiceDAO<Integer> implements Co
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(
sql = "SELECT CP.*, C.* "
+ "FROM ~g~.Course C "

View File

@@ -2,14 +2,14 @@ package com.poststats.golf.service.db;
import com.brianlong.sql.DataSet;
import com.brianlong.sql.FlexPreparedStatement;
import com.poststats.golf.api.Constants;
import com.poststats.golf.provider.GolfProvider;
import com.poststats.golf.service.EventFinanceService;
import com.poststats.provider.NonTransactionalProvider;
import com.poststats.provider.Statement;
import com.poststats.provider.StatementProvider;
import com.poststats.service.ServiceException;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import java.sql.SQLException;
import java.util.List;
@@ -33,7 +33,8 @@ public class EventFinanceServiceDAO implements EventFinanceService {
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(
sql = "SELECT P.personID, P.prefix, P.fname, P.lname, P.suffix, "
+ " TT.epersonID, SUM(TT.expenses) expenses, SUM(TT.paid) paid, (SUM(TT.paid)-SUM(TT.expenses)) balance "

View File

@@ -3,16 +3,16 @@ package com.poststats.golf.service.db;
import com.brianlong.cache.CacheRetrievalException;
import com.brianlong.sql.FlexPreparedStatement;
import com.brianlong.util.FlexMap;
import com.poststats.golf.api.Constants;
import com.poststats.golf.provider.GolfProvider;
import com.poststats.golf.service.EventPersonService;
import com.poststats.golf.service.PersonService;
import com.poststats.provider.NonTransactionalProvider;
import com.poststats.provider.Statement;
import com.poststats.provider.StatementProvider;
import com.poststats.service.ServiceException;
import com.poststats.sql.PostStatsDataSource;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import java.math.BigInteger;
import java.sql.Connection;
import java.sql.SQLException;
@@ -41,7 +41,8 @@ public class EventPersonServiceDAO implements EventPersonService {
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(
sql = "SELECT epersonID, personID FROM ~g~.EventPerson WHERE eventID=? "
+ "UNION "
@@ -67,7 +68,8 @@ public class EventPersonServiceDAO implements EventPersonService {
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(sql = "SELECT epersonID, personID FROM ~g~.EventPerson WHERE eventID=?")
private StatementProvider sqlSelectParticipantIds;
@@ -88,7 +90,8 @@ public class EventPersonServiceDAO implements EventPersonService {
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(
sql = "SELECT DISTINCT EP2.personID "
+ "FROM ~g~.EventPerson EP1 "

View File

@@ -3,15 +3,15 @@ package com.poststats.golf.service.db;
import com.brianlong.sql.DataSet;
import com.brianlong.sql.FlexPreparedStatement;
import com.brianlong.util.FlexMap;
import com.poststats.golf.api.Constants;
import com.poststats.golf.provider.GolfProvider;
import com.poststats.golf.service.EventRoundService;
import com.poststats.provider.NonTransactionalProvider;
import com.poststats.provider.Statement;
import com.poststats.provider.StatementProvider;
import com.poststats.service.ServiceException;
import com.poststats.service.db.CacheableServiceDAO;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import java.sql.SQLException;
import java.time.LocalDateTime;
import java.util.Collection;
@@ -49,7 +49,8 @@ public class EventRoundServiceDAO extends CacheableServiceDAO<Long> implements E
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(
sql = "SELECT TF.*, ER.* "
+ "FROM ~g~.EventRound ER "
@@ -74,7 +75,8 @@ public class EventRoundServiceDAO extends CacheableServiceDAO<Long> implements E
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(
sql = "SELECT TF.*, ER.* "
+ "FROM ~g~.EventRound ER "
@@ -100,7 +102,8 @@ public class EventRoundServiceDAO extends CacheableServiceDAO<Long> implements E
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(
sql = "SELECT TF.*, ER.* "
+ "FROM ~g~.EventRound ER "
@@ -120,7 +123,8 @@ public class EventRoundServiceDAO extends CacheableServiceDAO<Long> implements E
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(
sql = "SELECT TF.*, ER.* "
+ "FROM ~g~.EventRound ER "

View File

@@ -3,15 +3,15 @@ package com.poststats.golf.service.db;
import com.brianlong.sql.DataSet;
import com.brianlong.sql.FlexPreparedStatement;
import com.brianlong.util.FlexMap;
import com.poststats.golf.api.Constants;
import com.poststats.golf.provider.GolfProvider;
import com.poststats.golf.service.EventService;
import com.poststats.provider.NonTransactionalProvider;
import com.poststats.provider.Statement;
import com.poststats.provider.StatementProvider;
import com.poststats.service.ServiceException;
import com.poststats.service.db.CacheableServiceDAO;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import java.sql.SQLException;
import java.util.Collection;
import java.util.HashSet;
@@ -44,7 +44,8 @@ public class EventServiceDAO extends CacheableServiceDAO<Long> implements EventS
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(sql = "SELECT eventId FROM ~g~.Event WHERE seriesID=? ")
private StatementProvider sqlSelectIdsBySeriesId;
@@ -64,7 +65,8 @@ public class EventServiceDAO extends CacheableServiceDAO<Long> implements EventS
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(sql = "SELECT * FROM ~g~.Event WHERE seriesID=? ORDER BY liveline DESC ")
private StatementProvider sqlSelectBySeriesId;
@@ -88,7 +90,8 @@ public class EventServiceDAO extends CacheableServiceDAO<Long> implements EventS
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(sql = "SELECT seriesID FROM ~g~.Event WHERE eventID=? ")
private StatementProvider sqlSelectSeriesId;
@@ -109,7 +112,8 @@ public class EventServiceDAO extends CacheableServiceDAO<Long> implements EventS
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(
sql = "SELECT EF.*, E.* "
+ "FROM ~g~.Event E "
@@ -129,7 +133,8 @@ public class EventServiceDAO extends CacheableServiceDAO<Long> implements EventS
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(
sql = "SELECT EF.*, E.* "
+ "FROM ~g~.Event E "

View File

@@ -7,10 +7,11 @@ import com.brianlong.sql.DataSet;
import com.brianlong.sql.FlexPreparedStatement;
import com.brianlong.sql.FlexStatement;
import com.brianlong.util.FlexMap;
import com.poststats.golf.api.Constants;
import com.poststats.golf.provider.GolfProvider;
import com.poststats.golf.security.AuthenticatedPerson;
import com.poststats.golf.service.PersonService;
import com.poststats.golf.sql.GolfDataSource;
import com.poststats.provider.NonTransactionalProvider;
import com.poststats.provider.Statement;
import com.poststats.provider.StatementProvider;
import com.poststats.service.ServiceException;
@@ -18,7 +19,6 @@ import com.poststats.service.db.CacheableServiceDAO;
import jakarta.annotation.PostConstruct;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
@@ -126,7 +126,8 @@ public class PersonServiceDAO extends CacheableServiceDAO<Long> implements Perso
};
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(
sql = "SELECT PS1.personID "
+ "FROM ~g~.PersonSpectator PS1 "
@@ -136,7 +137,8 @@ public class PersonServiceDAO extends CacheableServiceDAO<Long> implements Perso
private StatementProvider sqlSelectBuddyIds;
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(
sql = "SELECT AC.acSID "
+ "FROM ~g~.PersonAccessControl PAC "
@@ -146,7 +148,8 @@ public class PersonServiceDAO extends CacheableServiceDAO<Long> implements Perso
private StatementProvider sqlSelectAcs;
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(
sql = "SELECT EPAC.eventID, AC.acSID "
+ "FROM ~g~.EventPersonAccessControl EPAC "
@@ -167,7 +170,8 @@ public class PersonServiceDAO extends CacheableServiceDAO<Long> implements Perso
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(sql = "SELECT GP.* FROM ~g~.Person GP WHERE GP.personID=?")
private StatementProvider sqlSelectPerson;
@@ -182,7 +186,8 @@ public class PersonServiceDAO extends CacheableServiceDAO<Long> implements Perso
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(sql = "SELECT GP.* FROM ~g~.Person GP WHERE GP.personID IN (??)")
private StatementProvider sqlSelectPersons;

View File

@@ -3,15 +3,15 @@ package com.poststats.golf.service.db;
import com.brianlong.sql.DataSet;
import com.brianlong.sql.FlexPreparedStatement;
import com.brianlong.util.FlexMap;
import com.poststats.golf.api.Constants;
import com.poststats.golf.provider.GolfProvider;
import com.poststats.golf.service.SeriesService;
import com.poststats.provider.NonTransactionalProvider;
import com.poststats.provider.Statement;
import com.poststats.provider.StatementProvider;
import com.poststats.service.ServiceException;
import com.poststats.service.db.CacheableServiceDAO;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Map;
@@ -42,7 +42,8 @@ public class SeriesServiceDAO extends CacheableServiceDAO<Integer> implements Se
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(sql = "SELECT * FROM ~g~.Series WHERE eventID=? ")
private StatementProvider sqlSelectByEventId;
@@ -63,7 +64,8 @@ public class SeriesServiceDAO extends CacheableServiceDAO<Integer> implements Se
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(sql = "SELECT S.* FROM ~g~.Series S WHERE seriesID=? ")
private StatementProvider sqlSelectSeries;
@@ -78,7 +80,8 @@ public class SeriesServiceDAO extends CacheableServiceDAO<Integer> implements Se
}
@Inject
@Named(Constants.STATEMENT_PROVIDER_GOLF)
@NonTransactionalProvider
@GolfProvider
@Statement(sql = "SELECT S.* FROM ~g~.Series S WHERE seriesID IN (??) ")
private StatementProvider sqlSelectSerieses;