Прослушиватель кеша области Gemfire/gemstone gfsh

Я пытаюсь создать регион с определенным прослушивателем кеша через gfsh с помощью следующей команды:

gfsh>create region --name=exampleRegion --type=REPLICATE --enable-statistics=true --cache-listener=com.example.RegionChangeListener

Класс com.example.RegionChangeListener развернут (>deploy --jar=lib.jar) внутри jar, но, похоже, он не работает - я получаю:

Could not process command due to GemFire error. java.lang.ClassNotFoundException cannot be cast to com.gemstone.gemfire.management.internal.cli.functions.CliFunctionResult

Похоже, что класс не найден/не распознан - где и как его «зарегистрировать», чтобы gemfire мог правильно его инициализировать? Класс просто расширяет CacheListenerAdapter и реализует Declarable.


person m52509791    schedule 10.10.2016    source источник


Ответы (1)


>deploy --jar= используется только для развертывания функций, а не обработчиков событий, таких как слушатели, загрузчики или писатели.

Сделайте это вместо этого:

gfsh>create region --cp=<path to cache listener jar> --name=exampleRegion --type=REPLICATE --enable-statistics=true --cache-listener=com.example.RegionChangeListener

person Wes Williams    schedule 10.10.2016
comment
Я попробовал это, но получил: Parameter "name" is required. Use "help <command name>" for assistance. Parameter cp is not applicable for create region (хотя у меня указан параметр имени). - person m52509791; 11.10.2016
comment
Позвольте мне быть более точным. Существует проблема: 1) как вы развертываете свою банку и 2) как вы создаете свой регион. Ваш регион создания выглядит нормально. Не используйте deploy --jar=lib.jar для загрузки прослушивателя кеша. Вместо этого добавьте --classpath=./lib.jar к вашей команде gfsh>start server --name=server1 --classpath=./lib.jar ... - person Wes Williams; 12.10.2016
comment
Спасибо, но я все еще делаю что-то не так. Я пробовал gfsh>start server --name=server1 --classpath=./lib.jar и даже gfsh>start locator --name=loc1 -- classpath=./lib.jar перед запуском сервера, а затем создание региона с помощью моей начальной команды (без --cp), но все равно получаю ту же ошибку. - person m52509791; 13.10.2016
comment
Ваш синтаксис выглядит великолепно (за исключением пробела между -- и classpath в локаторе). Теперь вопрос: в каком каталоге находится lib.jar? Одна вещь, о которой следует помнить при запуске сервера с использованием gfsh, это то, что текущий каталог устанавливается на имя вашего сервера. В вашем случае текущий каталог — ./server1. Итак, lib.jar должен находиться внутри ./server1. Если lib.jar находится в ., тогда ваш --classpath должен быть --classpath=../lib.jar. Вам не нужен --classpath в локаторе, так как локатор никогда не используется для выполнения кода. - person Wes Williams; 13.10.2016
comment
Спасибо. Пожалуйста, игнорируйте пробел между -- и classpath. Я даже пытался добавить полный путь к банке, и я вижу путь, включенный в путь к классам, после запуска сервера: Class-Path: c:\dev\Pivotal_GemFire_821_b18207_Windows\lib\gemfire.jar;c:\dev\my_gemfire\lib.jar;c:\dev\Pivotal_GemFire_821_b18207_Windows\lib\server-dependencies.jar, но получаю ту же начальную ошибку. Пробовал также поместить lib.jar в папку сервера... без изменений. Хм. - person m52509791; 13.10.2016
comment
Поскольку банка есть и находится в пути к классам GemFire, проблема больше не в банке. Теперь мы ищем другие вещи. На ум приходят две вещи: 1) трижды проверьте, что класс находится в банке, а имя пакета/класса — com.example.RegionChangeListener. Во-вторых, у меня нет компьютера с Windows для тестирования, но я предлагаю вам попробовать опубликовать сообщение в списке пользователей по адресу: geode.apache.org/сообщество - person Wes Williams; 14.10.2016