Example usage for org.hibernate ScrollableResults close

List of usage examples for org.hibernate ScrollableResults close

Introduction

In this page you can find the example usage for org.hibernate ScrollableResults close.

Prototype

void close();

Source Link

Document

Release resources immediately.

Usage

From source file:org.opentaps.common.domain.order.SalesOrderLookupRepository.java

License:Open Source License

/** {@inheritDoc} */
public List<OrderViewForListing> findOrders() throws RepositoryException {

    // convert fromDateStr / thruDateStr into Timestamps if the string versions were given
    if (UtilValidate.isNotEmpty(fromDateStr)) {
        fromDate = UtilDate.toTimestamp(fromDateStr, timeZone, locale);
    }//from w  w  w . j  av a 2  s. c o  m
    if (UtilValidate.isNotEmpty(thruDateStr)) {
        thruDate = UtilDate.toTimestamp(thruDateStr, timeZone, locale);
    }
    Session session = null;
    try {
        // get a hibernate session
        session = getInfrastructure().getSession();
        Criteria criteria = session.createCriteria(OrderHeader.class);

        // always filter by the current organization
        criteria.add(Restrictions.eq(OrderHeader.Fields.billFromPartyId.name(), organizationPartyId));

        // filters by order type, we only want sales order
        criteria.add(Restrictions.eq(OrderHeader.Fields.orderTypeId.name(), OrderTypeConstants.SALES_ORDER));

        // set the from/thru date filter if they were given
        if (fromDate != null) {
            criteria.add(Restrictions.ge(OrderHeader.Fields.orderDate.name(), fromDate));
        }
        if (thruDate != null) {
            criteria.add(Restrictions.le(OrderHeader.Fields.orderDate.name(), thruDate));
        }

        // filter the role assoc, there is only one customer role per order
        Criteria roleCriteria = criteria.createAlias("orderRoles", "or");
        roleCriteria.add(Restrictions.eq("or.id." + OrderRole.Fields.roleTypeId.name(),
                RoleTypeConstants.BILL_TO_CUSTOMER));

        // filter orders created by the given user (TODO: what use is viewPref as a string here, should be a boolean flag instead ?)
        if (UtilValidate.isNotEmpty(viewPref)) {
            criteria.add(Restrictions.eq(OrderHeader.Fields.createdBy.name(), userLoginId));
        }

        // filter by order status
        if (findActiveOnly || findDesiredOnly) {
            List<String> statuses = UtilMisc.toList(StatusItemConstants.OrderStatus.ORDER_APPROVED,
                    StatusItemConstants.OrderStatus.ORDER_CREATED, StatusItemConstants.OrderStatus.ORDER_HOLD);
            if (findActiveOnly) {
                statuses.add(StatusItemConstants.OrderStatus.ORDER_PROCESSING);
            }

            criteria.add(Restrictions.in(OrderHeader.Fields.statusId.name(), statuses));
        }

        // filter by the given orderId string
        if (UtilValidate.isNotEmpty(orderId)) {
            criteria.add(Restrictions.ilike(OrderHeader.Fields.orderId.name(), orderId, MatchMode.START));
        }
        // filter by the given externalOrderId string
        if (UtilValidate.isNotEmpty(externalOrderId)) {
            criteria.add(
                    Restrictions.ilike(OrderHeader.Fields.externalId.name(), externalOrderId, MatchMode.START));
        }

        // filter by exact matching status, if a statusId was given
        if (UtilValidate.isNotEmpty(statusId)) {
            criteria.add(Restrictions.eq(OrderHeader.Fields.statusId.name(), statusId));
        }

        // filter by product store if given
        if (UtilValidate.isNotEmpty(productStoreId)) {
            criteria.add(Restrictions.eq(OrderHeader.Fields.productStoreId.name(), productStoreId));
        }

        // filter by the user who created the order if given
        if (UtilValidate.isNotEmpty(createdBy)) {
            criteria.add(Restrictions.eq(OrderHeader.Fields.createdBy.name(), createdBy));
        }

        // filter by the given orderName string
        if (UtilValidate.isNotEmpty(orderName)) {
            criteria.add(Restrictions.ilike(OrderHeader.Fields.orderName.name(), orderName, MatchMode.START));
        }

        // filter by the given customerPartyId string, from the OrderRole entity
        if (UtilValidate.isNotEmpty(customerPartyId)) {
            roleCriteria.add(Restrictions.ilike("or.id." + OrderRole.Fields.partyId.name(), customerPartyId,
                    MatchMode.START));
        }

        // filter by the given purchaseOrderId string, from the OrderItem entity
        criteria.createAlias("orderItems", "oi");
        if (UtilValidate.isNotEmpty(purchaseOrderId)) {
            criteria.add(Restrictions.ilike("oi." + OrderItem.Fields.correspondingPoId.name(), purchaseOrderId,
                    MatchMode.START));
        }

        // filter by the given productId string, from the OrderItem entity
        if (UtilValidate.isNotEmpty(productId)) {
            criteria.add(
                    Restrictions.ilike("oi." + OrderItem.Fields.productId.name(), productId, MatchMode.START));
        }

        // filter by the given shippingAddress string, from the OrderItemShipGroup entity
        criteria.createAlias("orderItemShipGroups", "oisg");
        Criteria address = criteria.createCriteria("oisg.postalAddress");
        if (UtilValidate.isNotEmpty(shippingAddress)) {
            address.add(Restrictions.ilike(PostalAddress.Fields.address1.name(), shippingAddress,
                    MatchMode.ANYWHERE));
        }

        if (UtilValidate.isNotEmpty(shippingCountry)) {
            address.add(Restrictions.ilike(PostalAddress.Fields.countryGeoId.name(), shippingCountry,
                    MatchMode.EXACT));
        }

        if (UtilValidate.isNotEmpty(shippingStateProvince)) {
            address.add(Restrictions.ilike(PostalAddress.Fields.stateProvinceGeoId.name(),
                    shippingStateProvince, MatchMode.EXACT));
        }

        if (UtilValidate.isNotEmpty(shippingCity)) {
            address.add(Restrictions.ilike(PostalAddress.Fields.city.name(), shippingCity, MatchMode.START));
        }

        if (UtilValidate.isNotEmpty(shippingPostalCode)) {
            address.add(Restrictions.ilike(PostalAddress.Fields.postalCode.name(), shippingPostalCode,
                    MatchMode.START));
        }

        if (UtilValidate.isNotEmpty(shippingToName)) {
            address.add(
                    Restrictions.ilike(PostalAddress.Fields.toName.name(), shippingToName, MatchMode.START));
        }

        if (UtilValidate.isNotEmpty(shippingAttnName)) {
            address.add(Restrictions.ilike(PostalAddress.Fields.attnName.name(), shippingAttnName,
                    MatchMode.START));
        }
        // filter by the given lotId and serialNumber, which may come either from
        // OrderItemShipGrpInvRes -> InventoryItem
        // or
        // ItemIssuance -> InventoryItem
        criteria.createCriteria("orderItemShipGrpInvReses", Criteria.LEFT_JOIN).createCriteria("inventoryItem",
                "rii", Criteria.LEFT_JOIN);
        criteria.createCriteria("itemIssuances", Criteria.LEFT_JOIN).createCriteria("inventoryItem", "iii",
                Criteria.LEFT_JOIN);
        if (UtilValidate.isNotEmpty(lotId)) {
            criteria.add(Restrictions.or(
                    Restrictions.ilike("rii." + InventoryItem.Fields.lotId.name(), lotId, MatchMode.START),
                    Restrictions.ilike("iii." + InventoryItem.Fields.lotId.name(), lotId, MatchMode.START)));
        }
        if (UtilValidate.isNotEmpty(serialNumber)) {
            criteria.add(Restrictions.or(
                    Restrictions.ilike("rii." + InventoryItem.Fields.serialNumber.name(), serialNumber,
                            MatchMode.START),
                    Restrictions.ilike("iii." + InventoryItem.Fields.serialNumber.name(), serialNumber,
                            MatchMode.START)));
        }

        criteria.createCriteria("trackingCodeOrders", "tco", Criteria.LEFT_JOIN);

        // specify the fields to return
        criteria.setProjection(Projections.projectionList()
                .add(Projections.distinct(Projections.property(OrderHeader.Fields.orderId.name())))
                .add(Projections.property(OrderHeader.Fields.orderName.name()))
                .add(Projections.property(OrderHeader.Fields.statusId.name()))
                .add(Projections.property(OrderHeader.Fields.grandTotal.name()))
                .add(Projections.property(OrderHeader.Fields.orderDate.name()))
                .add(Projections.property(OrderHeader.Fields.currencyUom.name()))
                .add(Projections.property("or.id." + OrderRole.Fields.partyId.name()))
                .add(Projections.property("oi." + OrderItem.Fields.correspondingPoId.name()))
                .add(Projections.property("tco." + TrackingCodeOrder.Fields.trackingCodeId.name())));
        Debug.logInfo("criteria.toString() : " + criteria.toString(), MODULE);
        // set the order by
        if (orderBy == null) {
            orderBy = Arrays.asList(OrderHeader.Fields.orderDate.desc());
        }
        // some substitution is needed to fit the hibernate field names
        // this also maps the calculated fields and indicates the non sortable fields
        Map<String, String> subs = new HashMap<String, String>();
        subs.put("partyId", "or.id.partyId");
        subs.put("partyName", "or.id.partyId");
        subs.put("orderDateString", "orderDate");
        subs.put("shipByDateString", null);
        subs.put("orderNameId", "orderId");
        subs.put("statusDescription", "statusId");
        subs.put("correspondingPoId", "oi.correspondingPoId");
        subs.put("trackingCodeId", "tco.trackingCodeId");
        HibernateUtil.setCriteriaOrder(criteria, orderBy, subs);

        ScrollableResults results = null;
        List<OrderViewForListing> results2 = new ArrayList<OrderViewForListing>();
        try {
            // fetch the paginated results
            results = criteria.scroll(ScrollMode.SCROLL_INSENSITIVE);
            if (usePagination()) {
                results.setRowNumber(getPageStart());
            } else {
                results.first();
            }

            // convert them into OrderViewForListing objects which will also calculate or format some fields for display
            Object[] o = results.get();
            int n = 0; // number of results actually read
            while (o != null) {
                OrderViewForListing r = new OrderViewForListing();
                r.initRepository(this);
                int i = 0;
                r.setOrderId((String) o[i++]);
                r.setOrderName((String) o[i++]);
                r.setStatusId((String) o[i++]);
                r.setGrandTotal((BigDecimal) o[i++]);
                r.setOrderDate((Timestamp) o[i++]);
                r.setCurrencyUom((String) o[i++]);
                r.setPartyId((String) o[i++]);
                r.setCorrespondingPoId((String) o[i++]);
                r.setTrackingCodeId((String) o[i++]);
                r.calculateExtraFields(getDelegator(), timeZone, locale);
                results2.add(r);
                n++;

                if (!results.next()) {
                    break;
                }
                if (usePagination() && n >= getPageSize()) {
                    break;
                }
                o = results.get();
            }
            results.last();
            // note: row number starts at 0
            setResultSize(results.getRowNumber() + 1);
        } finally {
            if (results != null) {
                results.close();
            }
        }

        return results2;

    } catch (InfrastructureException e) {
        Debug.logError(e, MODULE);
        throw new RepositoryException(e);
    } finally {
        if (session != null) {
            session.close();
        }
    }
}

From source file:org.opentaps.financials.domain.billing.invoice.InvoiceLookupRepository.java

License:Open Source License

/** {@inheritDoc} */
public List<InvoiceViewForListing> findInvoices() throws RepositoryException {

    // convert from / thru from String into Timestamps if the string versions were given
    if (UtilValidate.isNotEmpty(fromInvoiceDateString)) {
        fromInvoiceDate = UtilDate.toTimestamp(fromInvoiceDateString, timeZone, locale);
    }//from ww w.ja  va  2 s . c om
    if (UtilValidate.isNotEmpty(thruInvoiceDateString)) {
        thruInvoiceDate = UtilDate.toTimestamp(thruInvoiceDateString, timeZone, locale);
    }
    if (UtilValidate.isNotEmpty(fromDueDateString)) {
        fromDueDate = UtilDate.toTimestamp(fromDueDateString, timeZone, locale);
    }
    if (UtilValidate.isNotEmpty(thruDueDateString)) {
        thruDueDate = UtilDate.toTimestamp(thruDueDateString, timeZone, locale);
    }
    if (UtilValidate.isNotEmpty(fromPaidDateString)) {
        fromPaidDate = UtilDate.toTimestamp(fromPaidDateString, timeZone, locale);
    }
    if (UtilValidate.isNotEmpty(thruPaidDateString)) {
        thruPaidDate = UtilDate.toTimestamp(thruPaidDateString, timeZone, locale);
    }
    Session session = null;
    try {
        // get a hibernate session
        session = getInfrastructure().getSession();
        Criteria criteria = session.createCriteria(Invoice.class);

        // always filter by invoice type
        criteria.add(Restrictions.eq(Invoice.Fields.invoiceTypeId.name(), invoiceTypeId));

        // some id filters
        if (UtilValidate.isNotEmpty(partyId)) {
            criteria.add(Restrictions.eq(Invoice.Fields.partyId.name(), partyId));
        }
        if (UtilValidate.isNotEmpty(partyIdFrom)) {
            criteria.add(Restrictions.eq(Invoice.Fields.partyIdFrom.name(), partyIdFrom));
        }
        if (UtilValidate.isNotEmpty(invoiceId)) {
            criteria.add(Restrictions.eq(Invoice.Fields.invoiceId.name(), invoiceId));
        }
        if (UtilValidate.isNotEmpty(statusId)) {
            criteria.add(Restrictions.eq(Invoice.Fields.statusId.name(), statusId));
        }
        if (UtilValidate.isNotEmpty(processingStatusId)) {
            // this is a special case where we want an empty status
            if ("_NA_".equals(processingStatusId)) {
                criteria.add(Restrictions.eq(Invoice.Fields.processingStatusId.name(), null));
            } else {
                criteria.add(Restrictions.eq(Invoice.Fields.processingStatusId.name(), processingStatusId));
            }
        }

        // set the from/thru date filter if they were given
        if (fromInvoiceDate != null) {
            criteria.add(Restrictions.ge(Invoice.Fields.invoiceDate.name(), fromInvoiceDate));
        }
        if (thruInvoiceDate != null) {
            criteria.add(Restrictions.le(Invoice.Fields.invoiceDate.name(), thruInvoiceDate));
        }

        if (fromDueDate != null) {
            criteria.add(Restrictions.ge(Invoice.Fields.dueDate.name(), fromDueDate));
        }
        if (thruDueDate != null) {
            criteria.add(Restrictions.le(Invoice.Fields.dueDate.name(), thruDueDate));
        }

        if (fromPaidDate != null) {
            criteria.add(Restrictions.ge(Invoice.Fields.paidDate.name(), fromPaidDate));
        }
        if (thruPaidDate != null) {
            criteria.add(Restrictions.le(Invoice.Fields.paidDate.name(), thruPaidDate));
        }

        // set the from/thru amount filter if they were given
        if (fromAmount != null) {
            criteria.add(Restrictions.ge(Invoice.Fields.invoiceTotal.name(), fromAmount));
        }
        if (thruAmount != null) {
            criteria.add(Restrictions.le(Invoice.Fields.invoiceTotal.name(), thruAmount));
        }

        if (fromOpenAmount != null) {
            criteria.add(Restrictions.ge(Invoice.Fields.openAmount.name(), fromOpenAmount));
        }
        if (thruOpenAmount != null) {
            criteria.add(Restrictions.le(Invoice.Fields.openAmount.name(), thruOpenAmount));
        }

        // set the other like filters if they were given
        if (UtilValidate.isNotEmpty(referenceNumber)) {
            criteria.add(Restrictions.ilike(Invoice.Fields.referenceNumber.name(), referenceNumber,
                    MatchMode.ANYWHERE));
        }
        if (UtilValidate.isNotEmpty(message)) {
            criteria.add(Restrictions.ilike(Invoice.Fields.invoiceMessage.name(), message, MatchMode.ANYWHERE));
        }
        // order Id search needs a join with OrderItemBilling
        if (UtilValidate.isNotEmpty(orderId)) {
            criteria.createAlias("orderItemBillings", "oib");
            criteria.add(Restrictions.eq("oib." + OrderItemBilling.Fields.orderId.name(), orderId));
        }
        // item description search needs a join with InvoiceItem
        if (UtilValidate.isNotEmpty(itemDescription)) {
            criteria.createAlias("invoiceItems", "ii");
            criteria.add(Restrictions.ilike("ii." + InvoiceItem.Fields.description.name(), itemDescription,
                    MatchMode.ANYWHERE));
        }

        // TODO: accounting tags

        // specify the fields to return
        criteria.setProjection(Projections.projectionList()
                .add(Projections.distinct(Projections.property(Invoice.Fields.invoiceId.name())))
                .add(Projections.property(Invoice.Fields.partyId.name()))
                .add(Projections.property(Invoice.Fields.partyIdFrom.name()))
                .add(Projections.property(Invoice.Fields.statusId.name()))
                .add(Projections.property(Invoice.Fields.processingStatusId.name()))
                .add(Projections.property(Invoice.Fields.invoiceDate.name()))
                .add(Projections.property(Invoice.Fields.dueDate.name()))
                .add(Projections.property(Invoice.Fields.currencyUomId.name()))
                .add(Projections.property(Invoice.Fields.invoiceTotal.name()))
                .add(Projections.property(Invoice.Fields.openAmount.name()))
                .add(Projections.property(Invoice.Fields.referenceNumber.name())));

        // set the order by
        if (orderBy == null) {
            orderBy = Arrays.asList(Invoice.Fields.invoiceDate.desc());
        }
        // some substitution is needed to fit the hibernate field names
        // this also maps the calculated fields and indicates the non sortable fields
        Map<String, String> subs = new HashMap<String, String>();
        subs.put("partyName", "partyId");
        subs.put("partyNameFrom", "partyIdFrom");
        subs.put("invoiceDateString", "invoiceDate");
        subs.put("dueDateString", "dueDate");
        subs.put("statusDescription", "statusId");
        subs.put("processingStatusDescription", "processingStatusId");
        HibernateUtil.setCriteriaOrder(criteria, orderBy, subs);

        ScrollableResults results = null;
        List<InvoiceViewForListing> results2 = new ArrayList<InvoiceViewForListing>();
        try {
            // fetch the paginated results
            results = criteria.scroll(ScrollMode.SCROLL_INSENSITIVE);
            if (usePagination()) {
                results.setRowNumber(getPageStart());
            }

            // convert them into InvoiceViewForListing objects which will also calculate or format some fields for display
            Object[] o = results.get();
            int n = 0; // number of results actually read
            while (o != null) {
                InvoiceViewForListing r = new InvoiceViewForListing();
                r.initRepository(this);
                int i = 0;
                r.setInvoiceId((String) o[i++]);
                r.setPartyId((String) o[i++]);
                r.setPartyIdFrom((String) o[i++]);
                r.setStatusId((String) o[i++]);
                r.setProcessingStatusId((String) o[i++]);
                r.setInvoiceDate((Timestamp) o[i++]);
                r.setDueDate((Timestamp) o[i++]);
                r.setCurrencyUomId((String) o[i++]);
                r.setInvoiceTotal((BigDecimal) o[i++]);
                r.setOpenAmount((BigDecimal) o[i++]);
                r.setReferenceNumber((String) o[i++]);
                r.calculateExtraFields(getDelegator(), timeZone, locale);
                results2.add(r);
                n++;

                if (!results.next()) {
                    break;
                }
                if (usePagination() && n >= getPageSize()) {
                    break;
                }
                o = results.get();
            }
            results.last();
            // note: row number starts at 0
            setResultSize(results.getRowNumber() + 1);
        } finally {
            results.close();
        }

        return results2;

    } catch (InfrastructureException e) {
        throw new RepositoryException(e);
    } finally {
        if (session != null) {
            session.close();
        }
    }
}

From source file:org.openvpms.component.business.dao.hibernate.im.IMObjectDAOHibernate.java

License:Open Source License

/**
 * Counts the total no. of rows that would be returned by a named query.
 *
 * @param name    the query name/*www .  jav a  2s  .c  o  m*/
 * @param params  the query parameters
 * @param session the session
 * @return the total no. of rows that would be returned by the query
 * @throws IMObjectDAOException a runtime exception, raised if the request
 *                              cannot complete.
 */
private int countNamedQuery(String name, Params params, Session session) {
    Query query = session.getNamedQuery(name);
    params.setParameters(query);

    int result = 0;
    ScrollableResults results = null;
    try {
        results = query.scroll(ScrollMode.FORWARD_ONLY);
        if (results.last()) {
            result = results.getRowNumber() + 1;
        }
    } finally {
        if (results != null) {
            results.close();
        }
    }
    return result;
}

From source file:org.paxle.data.db.impl.CommandDB.java

License:Open Source License

private List<ICommand> fetchNextCommands(int limit) {
    List<ICommand> result = new ArrayList<ICommand>();

    Session session = null;/*from ww w . ja  va 2s . c o m*/
    Transaction transaction = null;
    try {
        session = this.sessionFactory.openSession();
        session.setFlushMode(FlushMode.COMMIT);
        session.setCacheMode(CacheMode.IGNORE);
        transaction = session.beginTransaction();

        Query query = session.createQuery("FROM EnqueuedCommand as cmd");
        query.setFetchSize(limit); // this is important for derby because there is no limit support
        query.setMaxResults(limit); // restricting number of returned results
        query.setReadOnly(true); // read-only query
        ScrollableResults sr = query.scroll(ScrollMode.FORWARD_ONLY);

        final Key key = new Key();
        final DynamicBloomFilter bloomFilter = this.bloomFilter;
        final Cache urlExistsCache = this.urlExistsCache;

        // loop through the available commands
        while (sr.next() && result.size() < limit) {
            ICommand cmd = (ICommand) sr.get()[0];

            /* mark command as enqueued */
            session.delete("EnqueuedCommand", cmd);
            session.saveOrUpdate("CrawledCommand", cmd);

            // add command-location into caches
            key.set(cmd.getLocation().toString().getBytes(UTF8), 1.0);
            bloomFilter.add(key);
            Element element = new Element(cmd.getLocation(), null);
            urlExistsCache.put(element);

            result.add(cmd);
        }
        sr.close();

        transaction.commit();
    } catch (Exception e) {
        if (transaction != null && transaction.isActive())
            transaction.rollback();
        this.logger.error("Error while fetching commands", e);
    } finally {
        // closing session
        if (session != null)
            try {
                session.close();
            } catch (Exception e) {
                this.logger.error(
                        String.format("Unexpected '%s' while closing session.", e.getClass().getName()), e);
            }
    }

    return result;
}

From source file:org.sacredscripturefoundation.commons.entity.dao.HibernateVendorHelper.java

License:Apache License

@Override
public Count<List<T>> page(Query query, int beginRow, int endRow) {
    // Get total result count
    int total;/*  w  w w . j a  v  a 2 s.c o m*/
    ScrollableResults scroll = query.unwrap(org.hibernate.Query.class).scroll();
    try {
        scroll.last();
        total = scroll.getRowNumber();
    } finally {
        scroll.close();
    }

    // Get page of data
    query.setFirstResult(beginRow);
    query.setMaxResults(endRow - beginRow + 1);

    @SuppressWarnings("unchecked")
    List<T> results = query.getResultList();
    return new CountImpl<List<T>>(total, results);
}

From source file:org.shredzone.cilla.core.repository.impl.SearchDaoHibImpl.java

License:Open Source License

@Override
public int count(Query query, Criteria crit) {
    assertCriteriaEntity(crit);//  ww w . j  ava  2s .  c  o m

    int count = 0;

    FullTextSession fullTextSession = getFullTextSession();
    FullTextQuery fq = fullTextSession.createFullTextQuery(query, Page.class);
    fq.setCriteriaQuery(crit != null ? crit : pageDao.criteria());

    ScrollableResults sr = fq.scroll(ScrollMode.FORWARD_ONLY);
    if (sr.last()) {
        count = sr.getRowNumber();
    }
    sr.close();

    return count;
}

From source file:org.xerela.provider.devices.DeviceResolutionElf.java

License:Mozilla Public License

/**
 * Populates a {@link PageData} with the results for the given criteria.
 * @param pageData The page to retrieve.
 * @param criteria The query.//from   w  w w.  j av a  2s . co  m
 * @param sortColumn The sort column or <code>null</code>
 * @param descending <code>true</code> for descending sort, <code>false</code> otherwise.
 * @return The populated page.
 */
public static PageData populatePageData(PageData pageData, Criteria criteria, String sortColumn,
        boolean descending) {
    if (LOGGER.isDebugEnabled()) {
        LOGGER.debug("populatePageData from criteria: " + criteria.toString()); //$NON-NLS-1$
    }

    criteria.scroll(ScrollMode.SCROLL_INSENSITIVE);

    if (pageData.getOffset() == 0) {
        // Set the total result size into the page data.
        criteria.setProjection(Projections.count(ATTR_DEVICE_ID));
        Object uniqueResult = criteria.uniqueResult();
        if (uniqueResult instanceof Integer) {
            pageData.setTotal((Integer) uniqueResult);
        } else if (uniqueResult instanceof Long) {
            pageData.setTotal(((Long) uniqueResult).intValue());
        } else {
            pageData.setTotal(((BigInteger) uniqueResult).intValue());
        }

        criteria.setProjection(null);
    }

    if (sortColumn != null) {
        if (sortColumn.equals(ATTR_IP_ADDRESS)) {
            criteria.addOrder(descending ? Order.desc(ATTR_IP_HIGH) : Order.asc(ATTR_IP_HIGH))
                    .addOrder(descending ? Order.desc(ATTR_IP_LOW) : Order.asc(ATTR_IP_LOW));
        } else {
            criteria.addOrder((descending ? Order.desc(sortColumn.trim()) : Order.asc(sortColumn.trim())));
        }
    }

    List<ZDeviceLite> list = new ArrayList<ZDeviceLite>();
    ScrollableResults scroll = criteria.scroll();
    while (scroll.next()) {
        Object[] objects = scroll.get();
        list.add((ZDeviceLite) objects[0]);
    }
    scroll.close();

    pageData.setDevices(list.toArray(new ZDeviceLite[0]));

    return pageData;
}

From source file:org.xerela.provider.scheduler.Scheduler.java

License:Mozilla Public License

/** {@inheritDoc} */
public PageData getExecutionData(PageData pageData, String sortColumn, boolean descending) {
    Session session = SchedulerActivator.getSessionFactory().getCurrentSession();

    Criteria criteria = session.createCriteria(ExecutionData.class).add(Restrictions.isNotNull("startTime"))
            .setFirstResult(pageData.getOffset()).setMaxResults(pageData.getPageSize());

    if (pageData.getOffset() == 0) {
        // Set the total result size into the page data.
        criteria.setProjection(Projections.count("id"));

        Integer total = (Integer) criteria.uniqueResult();
        pageData.setTotal(total);/*  w w  w  .  j a  v a  2s.c  o  m*/

        criteria.setProjection(null);
    }

    if (sortColumn != null) {
        criteria.addOrder((descending ? Order.desc(sortColumn.trim()) : Order.asc(sortColumn.trim())));
    }

    List<ExecutionData> list = new ArrayList<ExecutionData>();
    ScrollableResults scroll = criteria.scroll(ScrollMode.SCROLL_INSENSITIVE);
    while (scroll.next()) {
        list.add((ExecutionData) scroll.get(0));
    }
    scroll.close();

    pageData.setExecutionData(list);

    return pageData;
}

From source file:org.yes.cart.dao.impl.GenericDAOHibernateImpl.java

License:Apache License

private Runnable createIndexingRunnable(final boolean async, final int batchSize, final IndexFilter<T> filter) {
    return new Runnable() {
        @Override/*  w  w  w.java 2s . c  o m*/
        public void run() {
            int index = 0;
            final Logger log = LOGFTQ;
            try {

                if (persistentClassIndexble) {

                    currentIndexingCount.set(0);

                    if (log.isInfoEnabled()) {
                        log.info("Full reindex for {} class", persistentClass);
                    }
                    FullTextSession fullTextSession = Search.getFullTextSession(
                            async ? sessionFactory.openSession() : sessionFactory.getCurrentSession());
                    fullTextSession.setFlushMode(FlushMode.MANUAL);
                    fullTextSession.setCacheMode(CacheMode.IGNORE);
                    if (filter == null) { // only purge global full reindex because this clears all entries
                        fullTextSession.purgeAll(getPersistentClass());
                    }
                    ScrollableResults results = fullTextSession.createCriteria(persistentClass)
                            .setFetchSize(batchSize).scroll(ScrollMode.FORWARD_ONLY);

                    try {
                        while (results.next()) {

                            final T entity = (T) HibernateHelper.unproxy(results.get(0));

                            if (filter != null && filter.skipIndexing(entity)) {
                                continue; // skip this object
                            }

                            if (entityIndexingInterceptor != null) {
                                if (IndexingOverride.APPLY_DEFAULT == entityIndexingInterceptor
                                        .onUpdate(entity)) {
                                    fullTextSession.index(entity);
                                }
                            } else {
                                fullTextSession.index(entity);
                            }
                            index++;

                            if (index % batchSize == 0) {
                                fullTextSession.flushToIndexes(); //apply changes to indexes
                                fullTextSession.clear(); //clear since the queue is processed
                                if (log.isInfoEnabled()) {
                                    log.info("Indexed {} items of {} class", index, persistentClass);
                                }
                            }
                            currentIndexingCount.compareAndSet(index - 1, index);
                        }
                    } finally {
                        results.close();
                    }
                    fullTextSession.flushToIndexes(); //apply changes to indexes
                    fullTextSession.clear(); //clear since the queue is processed
                    if (log.isInfoEnabled()) {
                        log.info("Indexed {} items of {} class", index, persistentClass);
                    }
                    fullTextSession.getSearchFactory().optimize(getPersistentClass());
                }
            } catch (Exception exp) {
                LOGFTQ.error("Error during indexing", exp);
            } finally {
                asyncRunningState.set(COMPLETED);
                if (async) {
                    try {
                        if (persistentClassIndexble) {
                            sessionFactory.getCurrentSession().close();
                        }
                    } catch (Exception exp) {
                    }
                }
                if (log.isInfoEnabled()) {
                    log.info("Full reindex for {} class ... COMPLETED", persistentClass);
                }
            }
        }
    };
}

From source file:org.zanata.search.HTextFlowTargetIndexingStrategy.java

License:Open Source License

private static void reindexScrollableResultSet(FullTextSession session, ScrollableResults scrollableResults,
        AsyncTaskHandle handle) {/*from  ww  w . j  a v  a  2 s . c o m*/

    session.setFlushMode(FlushMode.MANUAL);
    session.setCacheMode(CacheMode.IGNORE);
    int rowNum = 0;
    try {
        while (scrollableResults.next()) {

            rowNum++;
            HTextFlowTarget entity = (HTextFlowTarget) scrollableResults.get(0);
            // TODO pahuang do I need to purge first then reindex?
            session.index(entity);
            if (handle != null) {
                handle.increaseProgress(1);
            }

            if (rowNum % sessionClearBatchSize == 0) {
                log.info("periodic flush and clear for HTextFlowTarget (n={})", rowNum);
                session.flushToIndexes(); // apply changes to indexes
                session.clear(); // clear since the queue is processed
            }
        }
    } finally {
        if (scrollableResults != null) {
            scrollableResults.close();
        }
    }
    session.flushToIndexes(); // apply changes to indexes
    session.clear(); // clear since the queue is processed
}