2017-05-22 3 views

Antwort

0

Sie können Cache pflegen, um mehrere Aufrufe an das ERP-System zu vermeiden.

Hier ist ein Beispielcode, die Sie versuchen können, Cache zu implementieren -

CustomCache.java

public class CustomCache 
{ 

    @Resource(name = customCacheRegion) 
    protected CacheAccess customCacheAccess; 

    //Fetch result from cache 
    public ResultData readCachedData(final B2BUnitModel customer, final Date date) 
    { 
     return (ResultData) customCacheAccess.get(createCacheKey(customer, date)); 
    } 

    //Update result to cache 
    public void cacheResult(final B2BUnitModel customer, final Date date, 
     final ResultData resultData) 
    { 

     try 
     { 
      customCacheAccess.put(createCacheKey(customer, date), resultData); 

     } 
     catch (final SAPHybrisCacheException e) 
     { 
     //error 
     } 
    } 

    protected CustomCacheKey createCacheKey(final B2BUnitModel customer, final Date date) 
    { 
     return new CustomCacheKey(customer, date); 
    } 

} 

Cache KEY -

public class CustomCacheKey extends AbstractCacheKey 
    { 
     private final B2BUnitModel customer; 

     private final Date date; 

     @Override 
     public int hashCode() 
     { 
      final int prime = 31; 
      int result = super.hashCode(); 
      result = prime * result + ((customer == null) ? 0 : customer.hashCode()); 
      return result; 
     } 

     @Override 
     public boolean equals(final Object obj) 
     { 
      if (obj == null) 
      { 
       return false; 
      } 

      if (!super.equals(obj)) 
      { 
       return false; 
      } 

      final CustomCacheKey customCacheKey = (CustomCacheKey) obj; 
      if (customer == null) 
      { 
       if (customCacheKey.customer != null) 
       { 
        return false; 
       } 
      } 
      else if (!customer.equals(customCacheKey.customer)) 
      { 
       return false; 
      } 

      if (date == null) 
      { 
       if (customCacheKey.date != null) 
       { 
       return false; 
      } 
     } 
     else if (!DateUtils.isSameDay(date, customCacheKey.date)) 
     { 
      return false; 
     } 

     return true; 
    } 
} 

* -spring.xml -

<bean id="customCacheRegion" parent="sapCoreCacheRegion"> 
    <constructor-arg name="name" 
     value="customCacheRegion" /> 
    <constructor-arg name="maxEntries" value="10000" /> 
    <constructor-arg name="evictionPolicy" value="FIFO" /> 
    <constructor-arg name="statsEnabled" value="true" /> 
    <constructor-arg name="exclusiveComputation" value="false" /> 
    <constructor-arg name="ttlSeconds" value="300" /> 
</bean> 

<bean 
    class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
    <property name="targetObject" ref="cacheRegionsList" /> 
    <property name="targetMethod" value="add" /> 
    <property name="arguments"> 
     <ref bean="customCacheRegion" /> 
    </property> 
</bean> 

So Cache ist eine Art Karte, wo Sie Schlüsselwertpaar und holen den zwischengespeicherten Wert aus dem Schlüssel selbst definieren können.

Schließlich in Ihrer Service-Schicht, bevor Sie ERP-System aufrufen, nur überprüfen, ob für bestimmte Kunden (oder eine andere Bedingung in Ihrem Fall) Daten im Cache verfügbar sind oder nicht. Wenn es verfügbar ist, holen Sie es einfach direkt aus dem Cache, ansonsten rufen Sie das ERP-System auf und aktualisieren Sie das Ergebnis in den Cache.

+0

Danke Shreshtt Bhatt. Es hilft mir wirklich. – racha11

+0

@ racha11 Würden Sie bitte diese Antwort akzeptieren, wenn es funktioniert :) –

+0

Was wäre, wenn der gleiche Benutzer die Einträge/Produkt ändern würde, wie würde unterscheiden, ob es die letzten im Cache gespeicherten Preise zurückgeben soll oder ERP aufrufen soll? –

Verwandte Themen