Демо-версии 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 ответ
Решаемые. Для любого, кто сталкивается с подобной проблемой, проблема двоякая.
- Клиент получает свой синхронизирующий URL-адрес с сервера. Демо-сервер указывает синхронизирующий URL-адрес на локальном хосте.
- (Плохой) URL-адрес синхронизации сохраняется в таблицах sym, по-видимому, как на клиенте, так и на сервере.
Решение:
Если вы работаете в Linux, не стесняйтесь использовать мой демонстрационный сервер со сценариями. Он устанавливает sync-url для первого IP-адреса в списке вместо localhost.
Иначе:
- Остановите свой клиент и сервер.
- Корневой узел демонстрации настроен с SYNC-URL на localhost в corp-000.properties. Это источник вашей проблемы. Измените его на значимый IP-адрес. Также используйте нестандартный порт, чтобы проиллюстрировать проблему - это будет означать добавление --port xxxx к команде, которую вы используете для запуска корневого узла.
- Удалите и заново создайте базу данных корневых узлов. Я не уверен, что здесь устарело, но перезапуска сервера по новому адресу, похоже, недостаточно. Может быть и другой способ обновить это, но начинать сначала проще всего.
- Удалите базу данных вашего узла Android. Я использовал "adb shell rm -rf /data/data/com.jumpmind.*"
- Перезапустите ваш сервер и клиент.