有没有人通过普通的 Java 客户端和延迟加载(真正的 Java 客户端或调用另一台服务器的 Java 服务器应用程序)成功使用 GraniteDS?
是否需要任何特殊的客户端初始化?(文档对此只字未提,所以我们认为没有必要,只是拿了示例代码)
基于文档(3.0.M2),我们创建了一个 Spring 后端和一个 Java 客户端,它们适用于简单的 POJO,但在需要返回 Hibernate 加载的 POJO 时失败(RemoteService 和 Tide 版本都失败并出现相同的反序列化异常)。
目前,我们没有客户端 GraniteDS 配置文件,只有这段代码:
字符串 baseURL = "http://localhost:8080/WebApp_Development_Client_Maven/"; URI uri = 新 URI(baseURL + "graniteamf/amf.txt"); 传输 tr = new ApacheAsyncTransport(); tr.start(); AMFRemotingChannel ch = new AMFRemotingChannel(tr, "graniteamf", uri); RemoteService srv = new RemoteService(ch, "userService"); 列出用户 = (List)srv.newInvocation("listUsers").invoke().get().getData();
反序列化异常:
原因:java.lang.RuntimeException:绑定到limes.core.model.security.User 的ActionScript3 类(即:[RemoteClass(alias="limes.core.model.security.User")])实现了flash.utils。 IExternalizable 但这个 Java 类既不实现 java.io.Externalizable 也不在配置的外部化器的范围内(请修复您的 granite-config.xml) 在 org.granite.messaging.amf.io.AMF3Deserializer.readAMF3Object(AMF3Deserializer.java:500) 在 org.granite.messaging.amf.io.AMF3Deserializer.readObject(AMF3Deserializer.java:130) 在 org.granite.messaging.amf.io.AMF3Deserializer.readObject(AMF3Deserializer.java:92) ... 36 更多
语境:
我们有一个客户端-服务器 Java/Swing 应用程序,它最初是为 Intranet 使用而设计的(使用 Hibernate 3 作为 ORM)。它也可以通过互联网工作,但 PostgreSQL 数据库连接经常中断,这使得客户端不可靠(由于丢失/断开的数据库连接而随机冻结)。这似乎无法正确解决(手动重新连接等简单措施已经实施)
我们需要通过 Internet 部署应用程序,并且由于复杂的逻辑已经被重构为服务类,我们希望 GUI 大部分保持不变并远程服务类。我们正在将持久层和服务类移动到 Spring 后端,并希望使用 GraniteDS,因为透明延迟加载在应用程序中被大量使用,因此很难用 DTO 使用和/或初始化程序来替换它。
我还没有找到纯 Java 客户端示例,只有一个 JavaFX 示例应用程序,它与 JavaFX 紧密相关,似乎很难转换为纯 Java 客户端(即使在 Linux 上尝试它也有一点问题,因为它没有 Webstart包括配置)。