@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
 public void agregarEntidadesPoliticas(Long idRed, String[] idEntidades, String[] idCuentas)
     throws Exception {
   try {
     List<Entidad> lista = new ArrayList<Entidad>();
     Map<Long, String> mapaEntidadCuenta = new HashMap<Long, String>();
     for (int i = 0; i < idEntidades.length; i++) {
       Entidad entidad = new Entidad();
       entidad.setIdEntidad(new Long(idEntidades[i]));
       lista.add(entidad);
       mapaEntidadCuenta.put(entidad.getIdEntidad(), idCuentas[i]);
     }
     Red red = new Red(idRed);
     for (Entidad f : lista) {
       EntidadPolitica ep = new EntidadPolitica();
       ep.setEntidad(f);
       ep.setRed(red);
       ep.setNumeroCuenta(mapaEntidadCuenta.get(f.getIdEntidad()));
       epFacade.save(ep);
     }
   } catch (Exception e) {
     context.setRollbackOnly();
     e.printStackTrace();
     throw e;
   }
 }
 @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
 @WebMethod
 public Long[] getProximoRangoOrden(@WebParam Long idRecaudador) throws Exception {
   try {
     synchronized (RedFacadeImpl.bloqueo) {
       Recaudador rec = this.recaudadorFacade.getLocked(idRecaudador);
       Red red = this.getLocked(rec.getRed().getIdRed());
       Long rangoValores[] = new Long[2];
       rangoValores[0] = red.getNumeroOrdenProximo();
       // incluye el extremo
       rangoValores[1] = rangoValores[0] + (rec.getNumeroOrdenTamRango() - 1);
       red.setNumeroOrdenProximo(rangoValores[1] + 1);
       this.merge(red);
       RedRecaudadorNumeroOrden rrno = new RedRecaudadorNumeroOrden();
       rrno.setFechaHora(new Date());
       rrno.setNumeroInicial(rangoValores[0]);
       rrno.setNumeroFinal(rangoValores[1]);
       rrno.setRecaudador(rec);
       rrno.setRed(rec.getRed());
       this.redRecNumeroOrdenFacade.merge(rrno);
       return rangoValores;
     }
   } catch (Exception e) {
     context.setRollbackOnly();
     e.printStackTrace();
     return new Long[0];
   }
 }
  @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
  public void agregarFacturadores(Long idRed, String[] idFacturadores, String[] idCuentas)
      throws Exception {
    try {
      HabilitacionFactRed ejemplo = new HabilitacionFactRed();
      ejemplo.setRed(new Red(idRed));
      // se trae todos los facturadores de esta red
      List<Facturador> listaFacturadoresHabilitados = this.obtenerFacturadoresHabilitados(idRed);
      // aqui se cargara los facturadores recibidos
      List<Facturador> listaFacturadoresRecibidos = new ArrayList<Facturador>();
      // Map<Long, Long> mapaFacturadorCuenta = new HashMap();
      Map<Long, String> mapaFacturadorCuenta = new HashMap<Long, String>();
      for (int i = 0; i < idFacturadores.length; i++) {
        Facturador facturador = new Facturador();
        facturador.setIdFacturador(new Long(idFacturadores[i]));
        listaFacturadoresRecibidos.add(facturador);
        // mapaFacturadorCuenta.put(facturador.getIdFacturador(), new Long(idCuentas[i]));
        mapaFacturadorCuenta.put(facturador.getIdFacturador(), idCuentas[i]);
      }
      // en esta lista se cargara los que deberan agregarse
      // que dueron los recibidos y que no estan habilitados actualmente
      List<Facturador> listaFacturadoresParaAgregar = new ArrayList<Facturador>();
      // copiamos todos los recibidos
      listaFacturadoresParaAgregar.addAll(listaFacturadoresRecibidos);
      // sacamos los que ya estan habilitados
      // y la lista ya tendra solo aquellos que habra que agregar
      listaFacturadoresParaAgregar.removeAll(listaFacturadoresHabilitados);

      // en esta lista se cargara los que deberan borrarse
      // que estan habilitados actualmente pero que no estan entre los recibidos
      // por tanto hay que borrarlos
      List<Facturador> listaFacturadoresParaBorrar = new ArrayList<Facturador>();
      // copiamos todos los recibidos
      listaFacturadoresParaBorrar.addAll(listaFacturadoresHabilitados);
      // sacamos los que ya estan habilitados
      // y la lista ya tendra solo aquellos que habra que agregar
      listaFacturadoresParaBorrar.removeAll(listaFacturadoresRecibidos);

      // agregamos los nuevos
      for (Facturador f : listaFacturadoresParaAgregar) {
        HabilitacionFactRed hab = new HabilitacionFactRed();
        HabilitacionFactRedPK habPK = new HabilitacionFactRedPK();
        habPK.setRed(idRed);
        habPK.setFacturador(f.getIdFacturador());
        hab.setHabilitacionFactRedPK(habPK);
        // hab.setCuenta(new Cuenta(mapaFacturadorCuenta.get(f.getIdFacturador())));
        hab.setNumeroCuenta(mapaFacturadorCuenta.get(f.getIdFacturador()));
        habilitacionFacturadorRedFacade.save(hab);
      }

      // borramos los que ya no estan
      HabilitacionFactRedPK habPK = new HabilitacionFactRedPK();
      habPK.setRed(idRed);
      for (Facturador f : listaFacturadoresParaBorrar) {
        habPK.setFacturador(f.getIdFacturador());
        this.habilitacionFacturadorRedFacade.delete(habPK);
      }
    } catch (Exception e) {
      context.setRollbackOnly();
      e.printStackTrace();
      throw e;
    }
  }