SymmetricDS Android 演示都注册但不同步
SymmetricDS Android demos both register but do not sync
(来自 SymmetricDS 论坛的 x-post)
您是否有使用 SymmetricDS 3.8 将 Android 应用程序与演示根节点同步的工作示例?我已经完成了 JumpMind 的两个示例,但都以 ECONNREFUSED against localhost:31415.
失败
看起来即使他们知道如何在另一台机器上向根节点注册,他们也会尝试在本地主机上与其同步。
以下是如何构建和(未成功)运行 两个现有示例的演练。
示例 1:
Jumpmind's original demo from 2012 使用了记事本应用程序,许多步骤假设您正在 运行 正在使用 Eclipse 并拥有其 Pro 版本。在现代 Android Studio 中使用免费软件版本的 SymmetricDS 进行编译需要一些技巧。
- 在 Studio 中,新建项目 -> 从
Android/Sdk/samples/android-23/legacy/NotePad
导入
- 进行测试编译并运行确保它在未修改的情况下工作
- download and extract sample 2 获取库
- 将库提取到 Notepad/app/libs/
编辑你的应用gradle规则,添加编译依赖,因此:
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
}
- gradle同步
- 将教程中的推荐代码粘贴到NotePadProvider.java中的第二个 OnCreate中。(第一个在
static class DatabaseHelper
中)
- 修改REGISTRATION_URL指向你的根节点
- 适当修改NODE_GROUP_ID。如果您使用的是演示服务器,这应该是 "store".
- 我使用了 "android-003" 的外部 ID,因为这是示例 #2 中使用的。
不要忘记为您的外部 ID 打开注册。像
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's newer sample 包括对文件同步的支持,我现在不关心这个。但它应该开箱即用地对付演示节点 corp-000。至少对我来说,不是。
这是你必须做的:
- download the source
- 修改REGISTRATION_URL(使用开发机器的非本地主机IP地址)
- 按照教程中的说明修改清单
- 尝试 运行 应用程序将失败
INSTALL_FAILED_CONFLICTING_PROVIDER
,我必须将清单中定义的提供程序更改为 com.jumpmind.syncds3.DbProvider
,因为默认 [=] 上已经有一个应用程序113=] 使用提供商的图像 com.google.provider.NotePad
.
- 在服务器/根节点上为 android-003 打开注册
- 通过查看服务器的 sym_node_security table 来确认注册。
- 有趣的是,那一行没有 initial_load_time,也没有同步的迹象。
- 返回您的 Android 应用程序,观察尝试与本地主机上的 corp-000 节点同步的相同 logcat 错误。
已解决。对于遇到类似问题的任何人来说,问题是双重的。
- 客户端从服务器获取同步 url。演示服务器在本地主机上指定了一个 sync-url。
- (错误的)同步 URL 持续存在于 sym 表中,显然在客户端 和 服务器上。
解法:
如果您 运行 正在 Linux,请随时 use my scripted demo server。它将 sync-url 设置为列表中的第一个 IP 地址而不是 localhost。
否则:
- 停止您的客户端和服务器。
- 演示根节点在 corp-000.properties 的本地主机上配置了 SYNC URL。这是你问题的根源。将其更改为有意义的 IP 地址。也使用非标准端口,以帮助说明问题——这意味着将 --port xxxx 添加到您用于 运行 根节点的命令中。
- 删除并重新创建您的根节点数据库。我不确定这里有什么陈旧的东西,但在新地址上重新 运行 似乎还不够。可能有另一种方法来刷新它,但重新开始是最简单的。
- 删除您的 android 节点数据库。我用了 "adb shell rm -rf /data/data/com.jumpmind.*"
- 重新运行你的服务器和客户端。
(来自 SymmetricDS 论坛的 x-post)
您是否有使用 SymmetricDS 3.8 将 Android 应用程序与演示根节点同步的工作示例?我已经完成了 JumpMind 的两个示例,但都以 ECONNREFUSED against localhost:31415.
失败看起来即使他们知道如何在另一台机器上向根节点注册,他们也会尝试在本地主机上与其同步。
以下是如何构建和(未成功)运行 两个现有示例的演练。
示例 1:
Jumpmind's original demo from 2012 使用了记事本应用程序,许多步骤假设您正在 运行 正在使用 Eclipse 并拥有其 Pro 版本。在现代 Android Studio 中使用免费软件版本的 SymmetricDS 进行编译需要一些技巧。
- 在 Studio 中,新建项目 -> 从
Android/Sdk/samples/android-23/legacy/NotePad
导入
- 进行测试编译并运行确保它在未修改的情况下工作
- download and extract sample 2 获取库
- 将库提取到 Notepad/app/libs/
编辑你的应用gradle规则,添加编译依赖,因此:
dependencies { compile fileTree(dir: 'libs', include: '*.jar') }
- gradle同步
- 将教程中的推荐代码粘贴到NotePadProvider.java中的第二个 OnCreate中。(第一个在
static class DatabaseHelper
中) - 修改REGISTRATION_URL指向你的根节点
- 适当修改NODE_GROUP_ID。如果您使用的是演示服务器,这应该是 "store".
- 我使用了 "android-003" 的外部 ID,因为这是示例 #2 中使用的。
不要忘记为您的外部 ID 打开注册。像
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's newer sample 包括对文件同步的支持,我现在不关心这个。但它应该开箱即用地对付演示节点 corp-000。至少对我来说,不是。
这是你必须做的:
- download the source
- 修改REGISTRATION_URL(使用开发机器的非本地主机IP地址)
- 按照教程中的说明修改清单
- 尝试 运行 应用程序将失败
INSTALL_FAILED_CONFLICTING_PROVIDER
,我必须将清单中定义的提供程序更改为com.jumpmind.syncds3.DbProvider
,因为默认 [=] 上已经有一个应用程序113=] 使用提供商的图像com.google.provider.NotePad
. - 在服务器/根节点上为 android-003 打开注册
- 通过查看服务器的 sym_node_security table 来确认注册。
- 有趣的是,那一行没有 initial_load_time,也没有同步的迹象。
- 返回您的 Android 应用程序,观察尝试与本地主机上的 corp-000 节点同步的相同 logcat 错误。
已解决。对于遇到类似问题的任何人来说,问题是双重的。
- 客户端从服务器获取同步 url。演示服务器在本地主机上指定了一个 sync-url。
- (错误的)同步 URL 持续存在于 sym 表中,显然在客户端 和 服务器上。
解法:
如果您 运行 正在 Linux,请随时 use my scripted demo server。它将 sync-url 设置为列表中的第一个 IP 地址而不是 localhost。
否则:
- 停止您的客户端和服务器。
- 演示根节点在 corp-000.properties 的本地主机上配置了 SYNC URL。这是你问题的根源。将其更改为有意义的 IP 地址。也使用非标准端口,以帮助说明问题——这意味着将 --port xxxx 添加到您用于 运行 根节点的命令中。
- 删除并重新创建您的根节点数据库。我不确定这里有什么陈旧的东西,但在新地址上重新 运行 似乎还不够。可能有另一种方法来刷新它,但重新开始是最简单的。
- 删除您的 android 节点数据库。我用了 "adb shell rm -rf /data/data/com.jumpmind.*"
- 重新运行你的服务器和客户端。