33
EmpWeb – ABCD plugin Curso de capacitación para transferencia tecnológica Sección explicativa sobre el engine, secciones de código fuente, pipelines y groovy Emiliano Marmonti Febrero 2010 [email protected]

EmpWeb – ABCD plugin

  • Upload
    jui

  • View
    44

  • Download
    0

Embed Size (px)

DESCRIPTION

EmpWeb – ABCD plugin. Curso de capacitación para transferencia tecnológica Sección explicativa sobre el engine, secciones de código fuente, pipelines y groovy Emiliano Marmonti Febrero 2010 [email protected]. Que es el engine de EmpWeb?. - PowerPoint PPT Presentation

Citation preview

Page 1: EmpWeb – ABCD plugin

EmpWeb – ABCD plugin

Curso de capacitación para transferencia tecnológica

Sección explicativa sobre el engine, secciones de código fuente, pipelines y groovy

Emiliano MarmontiFebrero [email protected]

Page 2: EmpWeb – ABCD plugin

Que es el engine de EmpWeb?

Un conjunto de servlets que implementan la lógica de negocio del proceso de circulación y efectúa de pegamento entre todas las piezas de las que empweb se compone.

engine engineconf.xml

GUI

SOAP

edbWS

SOAPmySql

ew15db

Page 3: EmpWeb – ABCD plugin

Análisis de engineconf.xml

<transactions>

<transaction name="loan" path="/engine/WEB-INF/conf/trans-pipes/loan.xml" /> <transaction name="return" path="/engine/WEB-INF/conf/trans-pipes/return.xml" /> <transaction name="renewal" path="/engine/WEB-INF/conf/trans-pipes/renewal.xml" /> <transaction name="suspension" path="/engine/WEB-INF/conf/trans-pipes/suspension.xml" /> <transaction name="fine" path="/engine/WEB-INF/conf/trans-pipes/fine.xml" /> <transaction name="wait" path="/engine/WEB-INF/conf/trans-pipes/wait.xml" /> <transaction name="cancelwait" path="/engine/WEB-INF/conf/trans-pipes/cancelwait.xml" /> <transaction name="cancelsuspension" path="/engine/WEB-INF/conf/trans-pipes/cancelsuspension.xml" /> <transaction name="cancelfine" path="/engine/WEB-INF/conf/trans-pipes/cancelfine.xml" />

<!-- config pipelines --> <transaction name="globalenvironment" path="/engine/WEB-INF/conf/conf-pipes/globalenvironment.xml" /> <transaction name="conf-getLibraries" path="/engine/WEB-INF/conf/conf-pipes/conf-getLibraries.xml" />

<!-- statistic pipelines --> <transaction name="stat-status-counts" path="/engine/WEB-INF/conf/stat-pipes/stat-status-counts.xml" /> <transaction name="stat-trans-by-ids" path="/engine/WEB-INF/conf/stat-pipes/stat-trans-by-ids.xml" />

</transactions>Listado de transacciones reconocidas y el path al XML que define las mismas, simil interface e implementation

Page 4: EmpWeb – ABCD plugin

Análisis de engineconf.xml

engine

Préstamo

Devolución

Reserva

Cancelación

.

.

.

Transacción nGUI

SOAP

Loan.xml(pipeline)

Page 5: EmpWeb – ABCD plugin

Análisis de engineconf.xml

<base name="corporate" type="users"> <uri>http://localhost:9090/central/bridge/endpointusers.php</uri> <wsdlFile>/dbws/users/v1/empweb-users-service-1-0.wsdl</wsdlFile> </base>

<base name="isis" type="users"> <uri>http://127.0.0.1:8085/ewdbws/services/ABCDUsersService</uri> <wsdlFile>/dbws/users/v1/empweb-users-service-1-0.wsdl</wsdlFile> </base>

<base name="objetos" type="objects"> <uri>http://127.0.0.1:8085/ewdbws/services/ABCDMarcObjectsService</uri> <wsdlFile>/dbws/objects/v1/empweb-objects-service-1-0.wsdl</wsdlFile> </base>

URL de atención de ewdbWS para usuarios

URL de atención de ewdbWS para objetos

Page 6: EmpWeb – ABCD plugin

Análisis de engineconf.xml

<empweb class="net.kalio.empweb.engine.db.ew15db.Empweb15DB">

<base name="TRANSA" type="transa"> <uri>jdbc:mysql://localhost/transa</uri> <user>root</user> <password>Emi1802</password> <schema>ew15db-schema.sql</schema> <!-- It's a resource inside ew15db.jar --> <backupDir>C:/ABCD/empweb/db</backupDir> <poolSettings> <driverClassName>com.mysql.jdbc.Driver</driverClassName> <minPoolSize>3</minPoolSize> <maxPoolSize>20</maxPoolSize> <initialPoolSize>3</initialPoolSize> <acquireIncrement>2</acquireIncrement> <idleConnectionTestPeriod>30</idleConnectionTestPeriod> <testConnectionOnCheckin>false</testConnectionOnCheckin> <automaticTestTable>ew_test_table</automaticTestTable> <maxIdleTime>30</maxIdleTime> </poolSettings> <collation></collation> </base>

Definición del pool de conexiones JDBC con mysql para el storage de las transacciones

Page 7: EmpWeb – ABCD plugin

Transacciones como Pipelines

Pipeline concept (example simplified)

End of transaction

Lock User Lock

Object

See if there are reservations confirmed

See if the user is suspended or not

Update DB

Unlock

New steps (rules or processes) in the pipeline could be inserted

Steps

Begin CommitRollback

Begin of transaction

Page 8: EmpWeb – ABCD plugin

Funcionamiento de los pipelines

Pr1 Pr2 Pr3 Rule 1 Pr4

Finalización transacción. Informe al usuarioEspacio común de memoria

Lectura / Escritura

Reglas o procesos

ProcessResult

Page 9: EmpWeb – ABCD plugin

Ejemplo del uso del espacio intermedio de memoria. Clase GetUser

TransactionContext.USER_ID=01TransactionContext.USER_DB=*TransactionContext.COPY_ID=10012TransactionContext.OBJECT_DB=objetosTransactionContext.OPERATOR_ID=1

Invocación a GetUser

Webservice DBParámetrosDel proceso

TransactionContext.USER_ID=01TransactionContext.USER_DB=isisTransactionContext.COPY_ID=10012TransactionContext.OBJECT_DB=objetosTransactionContext.OPERATOR_ID=1TransactionContext.USER_DOM=”…<user><name>Guilárte, Rosa…”TransactionContext.USER_CLASS=Directores….

Status pre-getUser

Status post-getUser

Page 10: EmpWeb – ABCD plugin

Tipos de pipeline implementados por empweb. Configuración, Transacciones y Estadísticos.

Page 11: EmpWeb – ABCD plugin

Ubicación de los Pipelines

Page 12: EmpWeb – ABCD plugin

Análisis del pipeline de Préstamos (loan.xml)

<rule class="net.kalio.empweb.engine.rules.GetUser" name="GetUser"> <doc>Get User DOM from (userId, userDb)</doc> <params> <!-- checks for expired or disabled user --> <param name="checkValidity">true</param> </params></rule>

<rule class="net.kalio.empweb.engine.rules.ExtractUserClass" name="ExtractUserClass"> <doc>Extract the user class from the user XML and store it in the TransactionContext.</doc> <params> <!-- If "useDefault" is true, it will return "*" when a user class can't be found --> <!--<param name="useDefault">true</param>--> </params></rule>

<rule> …</rule>

<process>…</process>

Cada una de las divisiones en rules o procesos definen una “casilla” del pipeline. Si en la clase se define algo distinto de Groovy, es que la clase se halla precompilada y no es alterable. Caso contrario es posible modificarla

Page 13: EmpWeb – ABCD plugin

Análisis del pipeline de Préstamos (loan.xml)

Loan.xml

Groovy script

Clases compiladas como parte del engine(Ej: • GetUser• ExtractUserClass• GetObject• ExtractObjectCategory•…)

usa

usa

Page 14: EmpWeb – ABCD plugin

¿Cómo es una clase compilada de reglas o procesos en EmpWeb?

public class GetObjectStatus implements Process{ public ProcessResult execute(TransactionContext tc) throws EngineException, Exception { String objectDb= (String)tc.get(TransactionContext.OBJECT_DB); String recordId= (String)tc.get(TransactionContext.RECORD_ID); EmpwebDB ewdb= WSBroker.getEwdb();

ObjectStatus oStat= ewdb.getRecordStatus(recordId, objectDb); tc.put(TransactionContext.OBJECT_STATUS, oStat);

// Nothing special to return, should always get OserStatus object, or an EngineException. BBB right? return new ProcessResult(true); } // execute

} // GetObjectStatus

Page 15: EmpWeb – ABCD plugin

Paso 1. Creación de una nueva regla o proceso

Page 16: EmpWeb – ABCD plugin

Paso 2. Ubicación de la regla o proceso en el lugar adecuado de la lista que compone el pipe

Page 17: EmpWeb – ABCD plugin

Paso 3. Edición de la regla o proceso

Documentación

Límites del proceso

Parámetros

Page 18: EmpWeb – ABCD plugin

Diferencia entre Límites y parámetros

Límites publican un valor en particular para un perfil, es decir que una regla o proceso que usa límites generará un nuevo valor profile-dependent

<limits> <limit name="nombre">valor por defecto</limit></limits>

Page 19: EmpWeb – ABCD plugin

Donde se cargan los valores de los límites publicados en las distintas reglas o procesos?

Page 20: EmpWeb – ABCD plugin

Parámetros

Loan.xml

Groovy script

usa

<params><param name="transactionKeys">paymentFine,pendingFine</param><param name="ignoreTransactionNotFound">true</param><param name="storeUserStatus">true</param><param name="storeObjectStatus">false</param></params>

La misma clase usada en diferentes pipes, se puede parametrizar

Caso especial de parametrización

Page 21: EmpWeb – ABCD plugin

¿Que es Groovy?

Groovy...

is an agile and dynamic language for the Java Virtual Machine builds upon the strengths of Java but has additional power features

inspired by languages like Python, Ruby and Smalltalk makes modern programming features available to Java developers

with almost-zero learning curve supports Domain-Specific Languages and other compact syntax so

your code becomes easy to read and maintain makes writing shell and build scripts easy with its powerful processing

primitives, OO abilities and an Ant DSL increases developer productivity by reducing scaffolding code when

developing web, GUI, database or console applications simplifies testing by supporting unit testing and mocking out-of-the-

box seamlessly integrates with all existing Java objects and libraries compiles straight to Java bytecode so you can use it anywhere you can

use Java

Page 22: EmpWeb – ABCD plugin

Ejemplo de un script en Groovy<rule class="net.kalio.empweb.engine.rules.GroovyInterpreter" name="PucvObjetoEsDeBiblioteca"> <doc>Verifica si el objeto pertenece a la biblioteca donde se estra realizando la transaccion. La biblioteca viene en el elemento "copyLocation" del holdingsInfo y lo compara contra el "operatorLocation" que viene en el transactionExtras. </doc> <params> <param name="script"><![CDATA[

copyId= tc.get(TransactionContext.COPY_ID);biblioteca= tc.getObjectValue("//hold:copy[hold:copyId='${copyId}']/hold:copyLocation");

transExtras= tc.get(TransactionContext.TRANSACTION_EXTRAS);operatorLocation= transExtras != null ? transExtras.get("operatorLocation") : "";

if (operatorLocation != biblioteca) { msg.setText("Este objeto no pertenece a la biblioteca, sino que pertenece a la biblioteca:"+biblioteca); return false; }else return true;]]> </param> </params></rule>

Page 23: EmpWeb – ABCD plugin

¿Como se compone el espacio intermedio de memoria? Transaction Context

Clave Tipo de valor

LOCAL_ENV Entorno de parámetros locales al proceso. Lista de valores.

GLOBAL_ENV Entorno de parámetros globales al proceso. Lista de valores.

USER_DOM DOM del usuario. Objeto.

OBJECT_DOM DOM del objeto. Objeto.

USER_ID ID del usuario corriente. String.

USER_DB Base de datos del usuario corriente. String.

COPY_ID Identificación de la copia del objeto corriente. String.

VOLUME_ID Volúmen de copia corriente. String.

RECORD_ID Identificación del registro corriente. String.

OBJECT_DB Base de datos de objetos corriente. String.

OPERATOR_ID Identificación del operador que realiza la transacción. String.

DESK_OR_WS Solo para reservas. Si proviene la transacción desde empWeb o desde el mySite

OBJECT_LOCATION Identificación de la biblioteca de la copia corriente

Page 24: EmpWeb – ABCD plugin

¿Como se compone el espacio intermedio de memoria? Transaction Context

OBS Observaciones ingresadas por el usuario en el formulario. Solo aplicable a transacciones tales como Suspensiones o multas.

FINE_AMOUNT Monto de multa corriente. Valor real.

PAID_AMOUNT Monto ingresado por el operador para el pago de la multa. Valor real.

DAYS_SUSPENDED Cantidad de días de suspensión para el usuario.

USER_CLASS Tipo del usuario sobre el cual se va a realizar la transacción.

OBJECT_CATEGORY Tipo de objeto sobre el cual se va a realizar la transacción.String.

USER_STATUS

USER_CLASS Tipo de usuario para la transacción corriente. String.

OBJECT_STATUS

PROFILE Contiene el objeto de la clase Profile de la transacción corriente. Define la categoría del usuario y el tipo de objeto para la transacción corriente.

Page 25: EmpWeb – ABCD plugin

Objetos usables desde EmpWeb

Page 26: EmpWeb – ABCD plugin

Objetos usables desde EmpWeb

Page 27: EmpWeb – ABCD plugin

Variables mágicas con las que contamos en el marco de un script de Groovy

…. Binding binding= new Binding();

binding.setVariable("tc", tc);

/* transaction context , desde groovy invocado como tc.getValue(“”);

*/

binding.setVariable("ewdb", WSBroker.getEwdb());

binding.setVariable("params", params); binding.setVariable("defaultLimits", defaultLimits); binding.setVariable("msg", msg); binding.setVariable("result", result);

net.kalio.empweb.engine.rules.GroovyInterpreter.java

Page 28: EmpWeb – ABCD plugin

Ejemplo de una regla simple en Groovy

<params><param name="script"><![CDATA[ copyId= tc.get(TransactionContext.COPY_ID); biblioteca= tc.getObjectValue ("//hold:copy[hold:copyId='${copyId}']/hold:copyLocation");

transExtras= tc.get(TransactionContext.TRANSACTION_EXTRAS); operatorLocation= transExtras != null ? transExtras.get("operatorLocation") : "";

if (operatorLocation != biblioteca) { msg.setText("Este objeto no pertenece a la biblioteca"); return false; } else return true; //Siempre debe devolver un valor por la salida positiva]]></param></params>

Page 29: EmpWeb – ABCD plugin

Políticas Complejas en EmpwebMundo de Objetos

The userCurrent LoansSuspensionsFeesReserves

The objectLoans Reserves

Transaction Context

Fees, SuspensionsThe calendar

The location(library)

Using each object we can make a new stepIn a pipeline that checks for complex rulesor add new objects (fee, suspensions) to the Transaction Context

Scripting solutions

Page 30: EmpWeb – ABCD plugin

Actividad con ayuda

Crear una regla para que todo aquel usuario cuyo nombre incluya el substring ‘Josefa’ se le emita un mensaje impidiendo el préstamo.

La biblioteca de Ingeniería quiere implementar una regla por la cual los CDs solo se prestan a alumnos de esa facultad. Aprovechando los ejercicios anteriores de inclusión del dato de facultad del usuario, implementar esta regla.

Page 31: EmpWeb – ABCD plugin

Ayuda

<rule class="net.kalio.empweb.engine.rules.GroovyInterpreter" name="CheckValidityDateIsNotNull">  <doc>Check null values in User cards</doc> <params><param name="script"> <![CDATA[ username= tc.getUserValue("//u:name"); if (username.indexOf(“Josefa”)>=0) { msg.addText('en', “I don’t make loans to Josefas"); msg.addText('es', “No le presto a Josefas"); return false; }   ]]>   </param>  </params>  </rule>

Page 32: EmpWeb – ABCD plugin

Actividad

La biblioteca de AGR no acepta reservas en línea para aquellos usuarios cuya expiración del carnet se produce en los próximos tres meses.

Ante la cancelación de una reserva, todas las bibliotecas acuerdan imponer una regla de funcionamiento por la que si la publicación tiene otras reservas, se le imputa una multa de $5 a excepción que la categoría del usuario sea Coordinadores en cuyo caso se impone una multa de $10.

Page 33: EmpWeb – ABCD plugin

Actividad En el análisis de funcionamiento de EmpWeb, la

biblioteca de ING detecta que las suspensiones no aplican ningún efecto multiplicador. Esto es decir que se suspende con igual cantidad de días a alguien que devuelve con 1 día de atraso que a alguien que se atrasa 2 meses. Solicita entonces implementar la siguiente tabulación para suspensiones:

1-10 días, hasta 3 suspensiones anteriores -> 4 dias 1-10 días, mas de 3 suspensiones anter -> 10 dias 11-40 días, hasta 3 suspensiones anter -> 25 dias 11-40 días, mas de 3 suspensiones anter -> 90 días 41 -60 días de atraso, multa de $200 y suspensión por

un año. Mas de 60 días, costo de la publicación como multa y

suspensión permanente.