Демо-версии SymmetricDS Android регистрируются, но не синхронизируются

(x-post с форума SymmetricDS)

Есть ли у вас рабочий пример использования SymmetricDS 3.8 для синхронизации приложения Android с корневым узлом демонстрации? Я работал с обоими примерами JumpMind, и оба терпят неудачу с ECONNREFUSED против localhost:31415.

Похоже, даже если они знают, как зарегистрироваться в корневом узле на другом компьютере, вместо этого они пытаются синхронизироваться с ним на локальном хосте.

Вот пошаговое руководство о том, как собрать и (безуспешно) запустить оба существующих образца.

Образец 1:

В оригинальной демонстрации Jumpmind 2012 года использовалось приложение "Блокнот", и во многих шагах предполагается, что вы работаете в Eclipse и имеете свою версию Pro. Есть несколько обручей для его компиляции в современной Android Studio с бесплатной версией SymmetricDS.

  • в студии, новый проект -> Импорт из Android/Sdk/samples/android-23/legacy/NotePad
  • сделать тестовую компиляцию и запустить, чтобы убедиться, что она работает без изменений
  • скачать и извлечь образец 2, чтобы получить libs
  • распаковать библиотеки в Блокнот / app / libs /
  • отредактируйте правило gradle ваших приложений, добавьте зависимость компиляции, таким образом:

    dependencies { compile fileTree(dir: 'libs', include: '*.jar') }

  • Gradle Sync
  • вставьте рекомендуемый код из учебника во второй OnCreate в NotePadProvider.java.(первый находится в static class DatabaseHelper)
  • измените REGISTRATION_URL, чтобы он указывал на ваш корневой узел
  • измените NODE_GROUP_ID соответствующим образом. Если вы используете демонстрационный сервер, это должно быть "магазином".
  • Я использовал внешний идентификатор "android-003", потому что это то, что используется в образце № 2.
  • Не забудьте открыть регистрацию для вашего внешнего идентификатора. Что-то вроде

    symadmin --properties corp-000.properties открыт-магазин регистрации android-003

  • наблюдать сбой logcat

    Building transport url: http://localhost:31415/sync/corp-000/push?nodeId=android-003&securityToken=88b79dcc9617099aec015ae5ed800b&hostName=localhost&ipAddress=10.0.2.15 Could not communicate with node 'corp:000:000' at http://localhost:31415/sync/corp-000 because of unexpected error org.jumpmind.exception.IoException: java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 31415) after 20000ms: isConnected failed: ECONNREFUSED

Образец 2:

Более новый образец Jumpmind включает в себя поддержку синхронизации файлов, которая мне сейчас не нужна. Но он должен работать против демо узла corp-000 прямо из коробки. По крайней мере, для меня это не так.

Вот что вы должны сделать:

  • скачать источник
  • изменить REGISTRATION_URL (чтобы использовать нелокальный IP-адрес компьютера разработчика)
  • изменить манифест, как описано в руководстве
  • попытка запустить приложение не удастся с INSTALL_FAILED_CONFLICTING_PROVIDER Мне пришлось сменить провайдера, указанного в манифесте, на com.jumpmind.syncds3.DbProvider потому что на образе Android по умолчанию уже есть приложение, которое использует провайдера com.google.provider.NotePad,
  • открыть регистрацию на андроид-003 на сервере / root-узле
  • подтвердите регистрацию, просмотрев таблицу sym_node_security на сервере.
  • Интересно, что в этой строке нет initial_load_time, и он не показывает никаких признаков синхронизации.
  • Вернувшись в свое приложение Android, наблюдайте те же ошибки logcat при попытке синхронизации с узлом corp-000 на localhost.

1 ответ

Решение

Решаемые. Для любого, кто сталкивается с подобной проблемой, проблема двоякая.

  1. Клиент получает свой синхронизирующий URL-адрес с сервера. Демо-сервер указывает синхронизирующий URL-адрес на локальном хосте.
  2. (Плохой) URL-адрес синхронизации сохраняется в таблицах sym, по-видимому, как на клиенте, так и на сервере.

Решение:

Если вы работаете в Linux, не стесняйтесь использовать мой демонстрационный сервер со сценариями. Он устанавливает sync-url для первого IP-адреса в списке вместо localhost.

Иначе:

  1. Остановите свой клиент и сервер.
  2. Корневой узел демонстрации настроен с SYNC-URL на localhost в corp-000.properties. Это источник вашей проблемы. Измените его на значимый IP-адрес. Также используйте нестандартный порт, чтобы проиллюстрировать проблему - это будет означать добавление --port xxxx к команде, которую вы используете для запуска корневого узла.
  3. Удалите и заново создайте базу данных корневых узлов. Я не уверен, что здесь устарело, но перезапуска сервера по новому адресу, похоже, недостаточно. Может быть и другой способ обновить это, но начинать сначала проще всего.
  4. Удалите базу данных вашего узла Android. Я использовал "adb shell rm -rf /data/data/com.jumpmind.*"
  5. Перезапустите ваш сервер и клиент.
Другие вопросы по тегам