1 / 33

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 Marmonti Febrero 2010 emarmonti@gmail.com. Que es el engine de EmpWeb?.

jui
Download Presentation

EmpWeb – ABCD plugin

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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 emarmonti@gmail.com

  2. 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 ew15db mySql SOAP SOAP edbWS GUI

  3. 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

  4. Análisis de engineconf.xml Préstamo engine Devolución Reserva Loan.xml (pipeline) Cancelación . . . SOAP GUI Transacción n

  5. 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

  6. 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

  7. Transacciones como Pipelines • Pipeline concept (example simplified) Rollback Begin Commit See if there are reservations confirmed Unlock Steps Begin of transaction End of transaction Lock User See if the user is suspended or not Lock Object Update DB New steps (rules or processes) in the pipeline could be inserted

  8. Pr1 Pr2 Pr3 Rule 1 Pr4 Lectura / Escritura Finalización transacción. Informe al usuario Espacio común de memoria Funcionamiento de los pipelines Reglas o procesos ProcessResult

  9. Ejemplo del uso del espacio intermedio de memoria. Clase GetUser Status pre-getUser TransactionContext.USER_ID=01 TransactionContext.USER_DB=* TransactionContext.COPY_ID=10012 TransactionContext.OBJECT_DB=objetos TransactionContext.OPERATOR_ID=1 Invocación a GetUser Status post-getUser TransactionContext.USER_ID=01 TransactionContext.USER_DB=isis TransactionContext.COPY_ID=10012 TransactionContext.OBJECT_DB=objetos TransactionContext.OPERATOR_ID=1 TransactionContext.USER_DOM=”…<user><name>Guilárte, Rosa…” TransactionContext.USER_CLASS=Directores …. Parámetros Del proceso Webservice DB

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

  11. Ubicación de los Pipelines

  12. 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

  13. Análisis del pipeline de Préstamos (loan.xml) Loan.xml usa • Clases compiladas como parte del engine • (Ej: • GetUser • ExtractUserClass • GetObject • ExtractObjectCategory • … • ) usa Groovy script

  14. ¿Cómo es una clase compilada de reglas o procesos en EmpWeb? publicclass 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? returnnew ProcessResult(true); } // execute } // GetObjectStatus

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

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

  17. Paso 3. Edición de la regla o proceso Documentación Límites del proceso Parámetros

  18. 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>

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

  20. Parámetros La misma clase usada en diferentes pipes, se puede parametrizar Loan.xml <params> <param name="transactionKeys">paymentFine,pendingFine</param><param name="ignoreTransactionNotFound">true</param><param name="storeUserStatus">true</param><param name="storeObjectStatus">false</param> </params> usa Groovy script Caso especial de parametrización

  21. ¿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

  22. 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>

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

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

  25. Objetos usables desde EmpWeb

  26. Objetos usables desde EmpWeb

  27. 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

  28. 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; }elsereturn true; //Siempre debe devolver un valor por la salida positiva ]]></param></params>

  29. Políticas Complejas en EmpwebMundo de Objetos Transaction Context The object Loans Reserves The user Current Loans Suspensions Fees Reserves The location (library) The calendar Fees, Suspensions Scripting solutions Using each object we can make a new step In a pipeline that checks for complex rules or add new objects (fee, suspensions) to the Transaction Context

  30. 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.

  31. 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>

  32. 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.

  33. 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.

More Related