Domanda

Abbiamo più istanze di OFBIZ/Opentaps in esecuzione. Tutte le istanze parlano con lo stesso database. Esistono molte tabelle che raramente vengono aggiornate, quindi sono memorizzate nella cache e tutte le istanze mantengono le loro singole copie della cache come meccanismo standard della cache del bizzarro. Ma in situazioni rare in cui aggiorniamo alcune entità utilizzando una delle tante istanze, quindi tutte le altre istanze continuano a mostrare i dati della cache sporca. Quindi richiede un'azione manuale per andare e cancellare tutte le copie della cache anche su altri casi.

Voglio che questa operazione di cancellazione della cache su tutte le istanze avvenga automaticamente. Su Ofbiz Pagina di confluenza qui C'è una breve menzione di "cancellazione della cache distribuita". Si basa su JMS, sembra che ogni volta che viene cancellata la cache di un'istanza, invia una notifica su JMS a un argomento e altre istanze che si abbonano allo stesso argomento JMS cancella le loro copie corrispondenti della cache su questa notifica. Ma non sono riuscito a trovare nessun altro riferimento o documentazione su come farlo? Quali sono i file che devono essere aggiornati per impostare tutto in Ofbiz. Un esempio di pagina/link è quello che sto cercando.

È stato utile?

Soluzione 3

Va bene credo di aver capito tutto. Ho usato ActiveMQ come broker JMS per configurarlo, quindi ecco i passaggi di Ofbiz per farlo funzionare:

1. Copia ActiveMq-All.jar su Framework/Base/Lib Cartella all'interno della directory di base OfBiz.

2. Modifica file base/config/jndiservers.xml: aggiungi la seguente definizione all'internou003Cjndi-config> etichetta:

   <jndi-server name="activemq"
     context-provider-url="failover:(tcp://jms.host1:61616,tcp://jms.host2:61616)?jms.useAsyncSend=true&amp;timeout=5000"
     initial-context-factory="org.apache.activemq.jndi.ActiveMQInitialContextFactory"
     url-pkg-prefixes=""
     security-principal=""
     security-credentials=""/>

3. Modifica File Base/config/jndi.properties: aggiungi questa riga alla fine:

topic.ofbiz-cache=ofbiz-cache

4. Modifica file service/config/serviceengine.xml: aggiungi la seguente definizione all'internou003Cservice-engine> etichetta:

    <jms-service name="serviceMessenger" send-mode="all">
       <server jndi-server-name="activemq"
       jndi-name="ConnectionFactory"
       topic-queue="ofbiz-cache"
       type="topic"
       listen="true"/>
    </jms-service>

5. Modifica file entityengine.xml: modifica il delegatore predefinito per abilitare la memorizzazione nella cache distribuita:

<delegator name="default" entity-model-reader="main" entity-group-reader="main" entity-eca-reader="main" distributed-cache-clear-enabled="true">

6. Modifica File Framework/Service/SRC/Org/Ofbiz/Service/JMS/AbstractJMSlistener.java: questo è probabilmente un bug nel codice OFBIZ

Modifica la seguente riga da:

this.dispatcher = GenericDispatcher.getLocalDispatcher("JMSDispatcher", null, null, this.getClass().getClassLoader(), serviceDispatcher);

Per:

this.dispatcher = GenericDispatcher.getLocalDispatcher("entity-default", null, null, this.getClass().getClassLoader(), serviceDispatcher);

7. e infine costruire il codice ServiceEngine emettendo il comando seguente:

ant -f framework/service/build.xml

Con questa entità, i dati dei dati in OfBiz su un caso vengono immediatamente propagati a tutte le altre istanze di Biz che cancellano l'elemento della linea della cache da sola senza alcuna necessità di cancellare la cache manuale.

Saluti.

Altri suggerimenti

Ho aggiunto una pagina su questo argomento in Ofbiz Wiki https://cwiki.apache.org/ofbiz/distribued-enty-cache-learmechanism.html. Anche se è ben spiegato qui, la pagina Wiki di Biz aggiunge altre informazioni importanti.

Si noti che il bug riportato qui è stato risolto da allora, ma un altro è attualmente in corso, dovrei risolverlo presto https://issues.apache.org/jira/browse/ofbiz-4296

Jacques

Sì, ho risolto questo comportamento a volte a http://svn.apache.org/viewvc?rev=1090961&view=rev. Ma ha ancora bisogno di un'altra soluzione relativa a https://issues.apache.org/jira/browse/ofbiz-4296.

La patch di seguito risolve questo problema a livello locale, ma crea ancora 2 ascoltatori su cluster, non sono sicuro del perché ... ancora indagare (non una priorità) ...

Index: framework/entity/src/org/ofbiz/entity/DelegatorFactory.java
===================================================================
--- framework/entity/src/org/ofbiz/entity/DelegatorFactory.java (revision 1879)
+++ framework/entity/src/org/ofbiz/entity/DelegatorFactory.java (revision 2615)
@@ -39,10 +39,10 @@

             if (delegator != null) {
+                // setup the distributed CacheClear
+                delegator.initDistributedCacheClear();
+
                 // setup the Entity ECA Handler
                 delegator.initEntityEcaHandler();
                 //Debug.logInfo("got delegator(" + delegatorName + ") from cache", module);
-                
-                // setup the distributed CacheClear
-                delegator.initDistributedCacheClear();



             return delegator;

Si prega di avvisarmi usando @jacquesleroux nel tuo post, se mai hai qualcosa di nuovo da condividere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top