2011-02-01 2 views
2

У нас есть несколько экземпляров Ofbiz/Opentaps. Все экземпляры говорят с одной базой данных. Существует множество таблиц, которые редко обновляются, поэтому они кэшируются, и все экземпляры поддерживают отдельные копии кеша в качестве стандартного механизма кэширования Ofbiz. Но в редких случаях, когда мы обновляем какой-либо объект, используя один из многих экземпляров, все остальные экземпляры продолжают показывать грязные данные кэша. Поэтому для этого требуется ручное действие и очистка всех кеш-копий в других экземплярах.Как реализовать «Распределенный кеш-клиринг» в Ofbiz?

Я хочу, чтобы операция очистки кеша во всех случаях происходила автоматически. On Ofbiz confluence page here очень короткое упоминание о «Распределенной кеш-очистке». Он полагается на JMS, кажется, что всякий раз, когда кеш экземпляра очищается, он отправляет уведомление по JMS на тему, а другие экземпляры, подписавшиеся на тот же вопрос JMS, очищают свои соответствующие копии кеша при этом уведомлении. Но я не мог найти другую ссылку или документацию о том, как это сделать? Какие файлы необходимо обновить, чтобы установить все в Ofbiz. Пример страницы/ссылки - это то, что я ищу.

+5

@ Разрушители: Wow 2 downvotes в мин. На вопрос 2+ года. Пожалуйста, любезно предоставите комментарий, по крайней мере. – anubhava

ответ

2

Хорошо, я считаю, что я все понял. Я использовал ActiveMQ в качестве моего брокера JMS, чтобы настроить его, поэтому вот шаги в Ofbiz, чтобы заставить его работать:

1. Скопируйте файл activeemq-all.jar в папку framework/base/lib внутри вашего базового каталога Ofbiz. > Тег Добавить следующее определение в < JNDI-конфигурации::

2. база редактирования файлов/конфигурации/jndiservers.xml

<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. Редактирование файла базы/конфигурации/jndi.properties: Добавьте эту строку в конце:

topic.ofbiz-cache=ofbiz-cache 

4. службы редактирования файла/конфигурации/serviceengine.xml: Добавьте следующее определение внутри < сервис-двигатель> тег:

<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. entityengine.xml Редактирование файла: Изменение по умолчанию делегировал для того, чтобы распределенное кэширование:

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

6. Редактирование файла рамки/сервис/ЦСИ /org/ofbiz/service/jms/AbstractJmsListener.java: Вероятно, это ошибка в коде Ofbiz

Cha Нге следующая строка из:

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

To:

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

7. И, наконец, построить код serviceengine, выдавая следующую команду:

ant -f framework/service/build.xml 

С помощью этих данных объекта изменения в Ofbiz на одном экземпляре немедленно распространяются на все остальные Ofbiz экземпляры самостоятельно очищают позицию кеша без необходимости ручной очистки кеша.

Cheers.

3

У меня есть страница по этой теме в OFBiz wiki https://cwiki.apache.org/OFBIZ/distributed-entity-cache-clear-mechanism.html. Хотя здесь хорошо объяснено, страница wiki OFBiz добавляет другую важную информацию.

Обратите внимание, что ошибка сообщается здесь была установлена ​​так, а другой в настоящее время на рассмотрении, я должен исправить это в ближайшее время https://issues.apache.org/jira/browse/OFBIZ-4296

Жак

+0

Удивительный, большое спасибо за то, что он разместил его на официальных документах. Я должен был внести дополнительные изменения в механизм Ofbiz JMS Service, чтобы обрабатывать исключения изящно и, что более важно, асинхронно вести себя внутри метода 'runAsync'. Раньше код откатывал Заказы в случае недоступности провайдера JMS (строгое отсутствие-нет для любого сайта электронной коммерции, который, как я считаю, для очистки кеша). – anubhava

+0

@Jacques: Связанная страница теперь 404. –

+0

Спасибо Amal и не знаю, почему я не получил ваше сообщение из stackoverflow. Здесь актуализированная ссылка https://cwiki.apache.org/confluence/display/OFBIZ/Distributed+Entity+Cache+Clear+(DCC)+Mechanism – JacquesLeRoux

2

Да, я это исправил поведение иногда назад в http://svn.apache.org/viewvc?rev=1090961&view=rev. Но ему все еще нужно другое исправление, связанное с https://issues.apache.org/jira/browse/OFBIZ-4296.

патч ниже исправления этой проблемы на местном уровне, но все же создает 2 слушателей на кластерах, не знаю, почему ... Тем не менее исследования (не приоритет) ...

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; 

Пожалуйста, сообщите мне, используя @JacquesLeRoux в ваш пост, если когда-либо у вас есть что-то новое для обмена.

Смежные вопросы