[ https://issues.apache.org/jira/browse/OFBIZ-11208?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Nicolas Malin closed OFBIZ-11208. --------------------------------- Fix Version/s: Upcoming Branch Resolution: Done It's that, I prefer in first step load this improvement but keep in mind the next ;) Done on trunk at 1867590. > OrderReadHelper.getOrderItemAttributes as non static function > ------------------------------------------------------------- > > Key: OFBIZ-11208 > URL: https://issues.apache.org/jira/browse/OFBIZ-11208 > Project: OFBiz > Issue Type: Improvement > Components: order > Affects Versions: Trunk > Reporter: Nicolas Malin > Assignee: Nicolas Malin > Priority: Minor > Fix For: Upcoming Branch > > > Currenlty if we use the java helper class OrderReadHelper to resolve the > orderItemAttributes, it didn't use the a local cache and call each time the > delegator throw a static function. > I propose to use also as non static function optimise database calling when > you have multiple get to do. > Origin: On customer site we have a huge table orderItemAttributes (8M tuples) > with several call. Use a local cache throw OrderReadHelper divide by nine the > calling. > {code:java} > public String getOrderItemAttribute(String orderItemSeqId, String > attributeName) { > GenericValue orderItemAttribute = null; > if (orderHeader != null) { > if (orderItemAttributes == null) { > try{ > orderItemAttributes = > EntityQuery.use(orderHeader.getDelegator()) .from("OrderItemAttribute") > .where("orderId", getOrderId()) .queryList(); > } catch (GenericEntityException e) { Debug.logError(e, module); } > } > orderItemAttribute = EntityUtil.getFirst( > EntityUtil.filterByAnd(orderItemAttributes, > UtilMisc.toMap("orderItemSeqId", orderItemSeqId, "attrName", > attributeName))); > } > return orderItemAttribute != null ? > orderItemAttribute.getString("attrValue"): null; > } > {code} > At the first call, we populate the OrderReadHelper with all > orderItemAttributes liked to an order, and after just filter with the > orderItemSeqId and the attribute name wanted > Example: > {code:java} > OrderReadHelper orh = new OrderReadHelper(orderHeader) > ... > for (GenericValue orderItem : orh.getOrderItems()) { > listAttr << > [startValue : > orh.getOrderItemAttribute(orderItem.orderItemSeqId, "MyStartValue"), > endValue : > orh.getOrderItemAttribute(orderItem.orderItemSeqId, "MyEndValue")] > } > {code} > We request only for the first passage, after for all other line we use the > local OrderReadHelper cache. -- This message was sent by Atlassian Jira (v8.3.4#803005)