package net.codjo.segmentation.server.plugin; import net.codjo.aspect.AspectManager; import net.codjo.aspect.util.PointRunner; import net.codjo.aspect.util.PointRunnerException; import net.codjo.aspect.util.TransactionalPoint; import net.codjo.sql.server.ConnectionPool; import net.codjo.sql.server.JdbcServiceUtil; import net.codjo.workflow.common.message.JobAudit; import net.codjo.workflow.common.message.JobAudit.Anomaly; import net.codjo.workflow.common.message.JobException; import net.codjo.workflow.common.message.JobRequest; import net.codjo.workflow.common.protocol.JobProtocolParticipant; import java.sql.Connection; class SegmentationAspectParticipant extends JobProtocolParticipant { private final JdbcServiceUtil jdbcServiceUtil; private final AspectManager aspectManager; SegmentationAspectParticipant(JdbcServiceUtil jdbcServiceUtil, AspectManager aspectManager) { this.jdbcServiceUtil = jdbcServiceUtil; this.aspectManager = aspectManager; } @Override protected void handlePRE(final JobRequest request) { transactionalPointCreate(request, createPreAudit(request)); } @Override protected void handlePOST(JobRequest request, JobException failure) { transactionalPointCreate(request, createPostAudit(request, failure)); } private void transactionalPointCreate(final JobRequest request, final JobAudit audit) { try { ConnectionPool connectionPool = null; Connection connection = null; try { connectionPool = jdbcServiceUtil.getConnectionPool(getAgent(), getRequestMessage()); connection = connectionPool.getConnection(); SegmentationAspectContext segmentationAspectContext = new SegmentationAspectContext(); segmentationAspectContext.setConnection(connection); segmentationAspectContext.setArguments(request.getArguments()); segmentationAspectContext.setAudit(audit); segmentationAspectContext.setRequestId(request.getId()); segmentationAspectContext.setUserId(getRequestMessage().decodeUserId()); segmentationAspectContext.setAgentContainer(getAgent().getAgentContainer()); String pointId = "segmentation." + String.valueOf(audit.getType()).toLowerCase(); TransactionalPoint transactionalPoint = new TransactionalPoint(pointId, aspectManager); transactionalPoint.run(segmentationAspectContext.toAspectContext(), new PointRunner() { public void run() throws PointRunnerException { sendAudit(audit); } }); } finally { if (connectionPool != null && connection != null) { connectionPool.releaseConnection(connection); } } } catch (Exception ex) { StringBuilder buffer; if(null == ex.getMessage()) { buffer = new StringBuilder(ex.getClass().getName()); } else { buffer = new StringBuilder(ex.getMessage()); } if (audit.hasError()) { buffer.append("\n"); Anomaly error = audit.getError(); buffer.append(error.getMessage()); buffer.append(error.getDescription()); } Anomaly anomaly = new Anomaly("Erreur durant l'execution d'un aspect", buffer.toString()); JobAudit auditError = new JobAudit(audit.getType()); auditError.setError(anomaly); sendAudit(auditError); } } }