Skip to content

Commit 7617df5

Browse files
committed
Se agrego metodo para ejecutar store procedure.
1 parent 3af519a commit 7617df5

File tree

3 files changed

+60
-11
lines changed

3 files changed

+60
-11
lines changed

business/src/main/java/org/javabeanstack/data/AbstractDAO.java

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@
3939
import javax.persistence.EntityManager;
4040
import javax.persistence.NoResultException;
4141
import javax.persistence.Parameter;
42+
import javax.persistence.ParameterMode;
4243
import javax.persistence.Query;
44+
import javax.persistence.StoredProcedureQuery;
4345
import javax.persistence.Table;
4446
import javax.persistence.criteria.CriteriaQuery;
4547
import javax.transaction.Status;
@@ -122,18 +124,18 @@ protected EntityManager getEntityManager(String keyId) {
122124
return dbManager.getEntityManager(keyId);
123125
}
124126

125-
protected final Query createQuery(String sessionId, String queryString, Map<String, Object> parameters){
127+
protected final Query createQuery(String sessionId, String queryString, Map<String, Object> parameters) {
126128
IDBLinkInfo dbLinkInfo = getDBLinkInfo(sessionId);
127129
EntityManager em = getEntityManager(getEntityManagerId(dbLinkInfo));
128-
130+
129131
parameters = addQueryParams(queryString, parameters);
130132
Query query = em.createQuery(queryString);
131133
if (parameters != null && !parameters.isEmpty()) {
132134
populateQueryParameters(query, parameters, queryString);
133135
}
134136
return query;
135137
}
136-
138+
137139
/**
138140
* Agrega valores de parametros constantes (ej. :true=true, :false=false
139141
* etc, :idempresa)
@@ -160,7 +162,7 @@ protected final Map<String, Object> addQueryParams(String queryString, Map<Strin
160162
}
161163
return parameters;
162164
}
163-
165+
164166
/**
165167
* Recupera todos los registros de una tabla
166168
*
@@ -765,6 +767,39 @@ public IErrorReg sqlExec(String sessionId, String sqlString,
765767
return error;
766768
}
767769

770+
/**
771+
* Ejecuta un procedimiento almacenado
772+
*
773+
* @param sessionId identificador de la sesión del usuario
774+
* @param procedureName procedimiento almacenado
775+
* @param params parámetros de la sentencia.
776+
* @throws java.lang.Exception
777+
*/
778+
@Override
779+
public void execSqlProcedure(String sessionId, String procedureName, Map<String, Object> params) throws Exception {
780+
LOGGER.debug(Strings.replicate("-", 50));
781+
LOGGER.debug("execSqlProcedure");
782+
783+
IDBLinkInfo dbLinkInfo = getDBLinkInfo(sessionId);
784+
String persistUnit;
785+
if (dbLinkInfo == null) {
786+
persistUnit = IDBManager.CATALOGO;
787+
} else {
788+
persistUnit = dbLinkInfo.getPersistUnit();
789+
}
790+
procedureName = Strings.textMerge(procedureName, getQueryConstants(persistUnit));
791+
EntityManager em = getEntityManager(getEntityManagerId(dbLinkInfo));
792+
793+
StoredProcedureQuery procedure = em.createStoredProcedureQuery(procedureName);
794+
if (params != null) {
795+
for (Map.Entry<String, Object> entry : params.entrySet()) {
796+
procedure.registerStoredProcedureParameter(entry.getKey(), entry.getValue().getClass(), ParameterMode.IN);
797+
procedure.setParameter(entry.getKey(), entry.getValue());
798+
}
799+
}
800+
procedure.execute();
801+
}
802+
768803
/**
769804
*
770805
* @param sessionId identificador de la sesión que permite realizar las
@@ -868,7 +903,7 @@ public IDataResult update(String sessionId, IDataSet dataSet) {
868903
IDBLinkInfo dbLinkInfo = getDBLinkInfo(sessionId);
869904
//Si es por una sesión normal o por dispositivo movil a travez de un
870905
//un webservice.
871-
if (Fn.nvl(dbLinkInfo.getUuidDevice(),"").isEmpty()){
906+
if (Fn.nvl(dbLinkInfo.getUuidDevice(), "").isEmpty()) {
872907
appUser = dbLinkInfo.getAppUserId();
873908
} else {
874909
appUser = left(dbLinkInfo.getUuidDevice(), 32);
@@ -888,7 +923,7 @@ public IDataResult update(String sessionId, IDataSet dataSet) {
888923
if (event != null) {
889924
event.beforeSave(sessionId, ejb);
890925
}
891-
auditable = ejb.isAuditAble();
926+
auditable = ejb.isAuditAble();
892927
lastEjb = ejb;
893928
switch (ejb.getAction()) {
894929
case IDataRow.INSERT:
@@ -929,7 +964,7 @@ public IDataResult update(String sessionId, IDataSet dataSet) {
929964
event.afterSave(sessionId, ejb);
930965
}
931966
//Auditoria
932-
auditSave(em, sessionId, ejb, auditable);
967+
auditSave(em, sessionId, ejb, auditable);
933968
}
934969
for (IDataRow ejb : ejbsRes) {
935970
if (ejb.getAction() != IDataRow.DELETE) {
@@ -1132,7 +1167,7 @@ public <T extends IDataRow> List<T> getData(String sessionId,
11321167
}
11331168
Query q;
11341169
q = createQuery(sessionId, queryString, null);
1135-
1170+
11361171
if (maxRows >= 0) {
11371172
q.setMaxResults(maxRows);
11381173
}
@@ -1234,7 +1269,6 @@ public Long getCount(String sessionId, String queryString, Map<String, Object> p
12341269
return result;
12351270
}
12361271

1237-
12381272
/**
12391273
* Calcula la cantidad de registros que devolveria una sentencia sql
12401274
*
@@ -1379,7 +1413,6 @@ protected final void populateQueryParameters(Query query, Map<String, Object> pa
13791413
});
13801414
}
13811415

1382-
13831416
/**
13841417
* Setea valores predeterminados de ciertas constantes en los queries.
13851418
*
@@ -1602,7 +1635,7 @@ public IErrorReg getErrorMessage(int messageNumber, String alternativeMsg, Strin
16021635
}
16031636
return errorReturn;
16041637
}
1605-
1638+
16061639
@Override
16071640
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
16081641
public List<Object[]> findListObjsByQuery(String sessionId,

business/src/main/java/org/javabeanstack/data/services/AbstractDataService.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,6 +1100,11 @@ public IErrorReg sqlExec(String sessionId, String queryString, Map<String, Objec
11001100
throw new UnsupportedOperationException("Not supported");
11011101
}
11021102

1103+
@Override
1104+
public void execSqlProcedure(String sessionId, String procedureName, Map<String, Object> parameters) throws Exception {
1105+
throw new UnsupportedOperationException("Not supported");
1106+
}
1107+
11031108
@Override
11041109
public IErrorReg jpqlExec(String sessionId, String queryString, Map<String, Object> parameters) throws Exception {
11051110
throw new UnsupportedOperationException("Not supported");

interfaces/src/main/java/org/javabeanstack/data/IGenericDAO.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,17 @@ public interface IGenericDAO extends Serializable {
362362
* @throws java.lang.Exception
363363
*/
364364
public IErrorReg sqlExec(String sessionId, String sqlCommand, Map<String, Object> parameters) throws Exception;
365+
366+
/**
367+
* Ejecuta un procedimiento almacenado
368+
*
369+
* @param sessionId identificador de la sesión del usuario
370+
* @param procedureName procedimiento almacenado
371+
* @param params parámetros de la sentencia.
372+
* @throws java.lang.Exception
373+
*/
374+
public void execSqlProcedure(String sessionId, String procedureName, Map<String, Object> params) throws Exception;
375+
365376
/**
366377
* Ejecuta una sentencia (select, insert, update, remove) sobre la base de
367378
* datos

0 commit comments

Comments
 (0)