package com.fp.common.fin; import java.text.DecimalFormat; import java.text.SimpleDateFormat; /** * Clase que se encarga de generar un numero de mensaje para procesar transacciones financieras. * @author Jorge Vaca * @version 2.1 */ public class MessageGenerator { /*Almacena una instancia de MessageGenerator.*/ public static MessageGenerator cache; /*Monitor para sincronizar la obtencion del numero de mensaje.*/ private boolean monitor=false; /*Formato para obtener la fecha del servidor de aplicaciones.*/ private SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMMdd-HH:mm:ss.SSSSSS"); /** * Entrega una instancia de MessageGenerator. * @return MessageGenerator * @throws Exception */ public static MessageGenerator getInstance() throws Exception { synchronized (MessageGenerator.class) { if(cache == null){ cache = new MessageGenerator(); } } return cache; } /** * Entrega un numero de mensaje dado un prefijo. * @param pPrefix Prefijo del numero de mensaje. * @return String * @throws Exception */ public synchronized String generateId(String pPrefix) throws Exception{ while(monitor){ wait(); } try{ monitor=true; Double d = Math.floor((Math.random() * 100000)); DecimalFormat df = new DecimalFormat("00000"); return pPrefix+"-"+sdf.format(System.currentTimeMillis()) +"-"+ df.format(d); }finally{ monitor=false; notifyAll(); } } }