0

有没有人通过普通的 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包括配置)。

4

1 回答 1

0

似乎延迟加载在此版本的 GraniteDS (3.0.0.M2) 中与纯 Java 客户端不起作用。

https://groups.google.com/forum/#!topic/graniteds/KDWNY31lG0I

理论上,它可以在 JavaFX 环境中工作,但它的实现方式是纯 Java 客户端无法使用透明延迟加载。

此外,GraniteDS 不支持对单个实体进行延迟加载,仅在集合上支持,这使得它不适合使用此类关系的项目。就个人而言,我认为这是一个明显的遗漏,特别是因为他们经常将他们的延迟加载支持称为“完整”。

不幸的是,文档没有说明延迟加载的限制,也没有区分带有 JavaFX 的 GraniteDS 和普通 Java 的功能。

于 2013-06-25T13:01:50.950 回答