将GraniteDS与Java客户端一起使用

时间:2013-06-15 14:38:58

标签: java spring hibernate java-ee graniteds

是否有人使用普通Java客户端和延迟加载(真正的Java客户端或调用其他服务器的Java服务器应用程序)成功使用GraniteDS?

是否需要进行任何特殊的客户端初始化? (文档对此没有任何说明,所以我们认为没有必要,只需采用示例代码)

基于docs(3.0.M2),我们创建了一个Spring后端和一个Java客户端,它适用于简单的POJO,但是当需要返回加载Hibernate的POJO时失败(RemoteService和Tide版本都失败了相同的反序列化例外)。

目前,我们没有客户端GraniteDS配置文件,只有以下代码:

String baseURL = "http://localhost:8080/WebApp_Development_Client_Maven/";
URI uri = new URI(baseURL + "graniteamf/amf.txt");

Transport tr = new ApacheAsyncTransport();
tr.start();
AMFRemotingChannel ch = new AMFRemotingChannel(tr, "graniteamf", uri);

RemoteService srv = new RemoteService(ch, "userService");
List users = (List)srv.newInvocation("listUsers").invoke().get().getData();

反序列化异常:

Caused by: java.lang.RuntimeException: The ActionScript3 class bound to limes.core.model.security.User (ie: [RemoteClass(alias="limes.core.model.security.User")]) implements flash.utils.IExternalizable but this Java class neither implements java.io.Externalizable nor is in the scope of a configured externalizer (please fix your granite-config.xml)
    at org.granite.messaging.amf.io.AMF3Deserializer.readAMF3Object(AMF3Deserializer.java:500)
    at org.granite.messaging.amf.io.AMF3Deserializer.readObject(AMF3Deserializer.java:130)
    at org.granite.messaging.amf.io.AMF3Deserializer.readObject(AMF3Deserializer.java:92)
    ... 36 more

上下文:

我们有一个客户端 - 服务器Java / Swing应用程序,最初设计用于Intranet(使用Hibernate 3作为ORM)。它也可以通过互联网工作,但PostgreSQL数据库连接经常断开,这使得客户端不可靠(由于丢失/损坏的数据库连接而随机冻结)。这似乎无法正确解决(手动重新连接等简单措施已经实施)

我们需要通过互联网部署应用程序,因为复杂的逻辑已经重构为服务类,我们希望保持GUI基本不变并远程服务类。我们正在将持久层和服务类移动到Spring后端并且想要使用GraniteDS,因为透明的延迟加载在应用程序中被大量使用,因此用DTO使用和/或初始化器替换它将非常困难。 p>

我还没有找到普通的Java客户端示例,只有一个与JavaFX密切相关的JavaFX示例应用程序,似乎很难转换为普通的Java客户端(即使尝试它在Linux上也有点问题,因为它没有包含Webstart配置。)

1 个答案:

答案 0 :(得分:0)

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

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

理论上,它适用于JavaFX环境,但它的实现方式是普通Java客户端无法使用透明延迟加载。

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

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

相关问题