标签: gwt-rpc

什么时候应该使用RequestFactory和GWT-RPC?

我试图找出是否应该将我的gwt-rpc调用迁移到新的GWT2.1 RequestFactory cals.

Google文档模糊地提到RequestFactory是一种更好的客户端 - 服务器通信方法,用于"面向数据的服务"

我可以从文档中提炼出来的是有一个新的Proxy类可以简化通信(你不会来回传递实际的实体而只是代理,所以它更轻,更容易管理)

这是重点吗?还是我在大局中遗漏了其他东西?

gwt gwt-rpc requestfactory

87
推荐指数
4
解决办法
3万
查看次数

GWT和Google Cloud端点

几天前,我开始使用Google App Engine和Google Cloud Endpoints开发移动应用后端.本教程将介绍如何自动生成端点,以及Android的客户端库.

所以我们有我们的实体:

@Entity
public class Person implements IsSerializable{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Key key;

    private String name;
//...
} 
Run Code Online (Sandbox Code Playgroud)

这个类的端点:

@Api(name = "personendpoint")
public class PersonEndpoint {

    @ApiMethod(name = "getPerson")
    public Person getPerson(@Named("id") Long id) {
...
Run Code Online (Sandbox Code Playgroud)

此外,使用生成的Android端点库(使用REST API)我想在服务器上添加用户界面,使用Google Web Toolkit(GWT)构建.但是我应该如何操作服务器端的日期?我可以看到不同的方法......

选项A1:在GWT中添加RPC服务

public interface PersonServiceAsync {

    void insertPerson(Person person, AsyncCallback<Person> callback);

}

@RemoteServiceRelativePath("api")
public interface PersonService extends RemoteService {

    public Person insertPerson(Person person);

}
public class PersonServiceImpl …
Run Code Online (Sandbox Code Playgroud)

google-app-engine gwt-rpc google-cloud-endpoints

50
推荐指数
1
解决办法
3871
查看次数

GWT - 偶尔会出现com.google.gwt.user.client.rpc.SerializationException

我们偶尔会遇到例外情况,例如:

com.google.gwt.user.client.rpc.SerializationException:类型"xxx"无法分配给"com.google.gwt.user.client.rpc.IsSerializable",并且没有自定义字段序列化程序.出于安全考虑,此类型不会序列化:com.google.gwt.user.client.rpc.impl中的com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:610)中的instance = xxx .AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:129)维持在com.google.gwt.user.server com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter $ ValueWriter $ 8.write(ServerSerializationStreamWriter.java:152). rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:534)位于com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.java:609)位于com.google.gwt.user.server.rpc.RPC.encodeResponseForSuccess(RPC.java:467)com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.的java:564)在com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:188)在de.softconex.travicemanager.server.TraviceManagerServiceImpl.processCall(TraviceManagerServiceImpl.java:615)在com.google .gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:224)在com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)在javax.servlet.http.HttpServlet .service(HttpServlet.java:710)位于org.apache.catalina.core.ApplicationFilterChain的javax.servlet.http.HttpServlet.service(HttpServlet.java:803).internalDoFilter(ApplicationFilterChain.java:290)在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)在org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)在组织位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)的.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve) .java:230)在org.jboss的org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179). org.apache.catalina上的web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84).core.StandardHostValve.invoke(StandardHostValve.java:127)在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)在org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve. java:157)org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)at org.apache.coyote.ajp .AjpAprProcessor.process(AjpAprProcessor.java:419)在org.apache.coyote.ajp.AjpAprProtocol $ AjpConnectionHandler.process(AjpAprProtocol.java:378)在org.apache.tomcat.util.net.AprEndpoint $ Worker.run(AprEndpoint .java:1508)在java.lang.Thread.run(Thread.java:619)调用(ErrorReportValve.java:102)在org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)在org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:419)在org.apache.coyote.ajp.AjpAprProtocol $ AjpConnectionHandler .process(AjpAprProtocol.java:378)atg.apache.tomcat.util.net.AprEndpoint $ Worker.run(AprEndpoint.java:1508)at java.lang.Thread.run(Thread.java:619)调用(ErrorReportValve.java:102)在org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)在org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:419)在org.apache.coyote.ajp.AjpAprProtocol $ AjpConnectionHandler .process(AjpAprProtocol.java:378)atg.apache.tomcat.util.net.AprEndpoint $ Worker.run(AprEndpoint.java:1508)at java.lang.Thread.run(Thread.java:619)connector.CoyoteAdapter.service(CoyoteAdapter.java:262)在org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:419)在org.apache.coyote.ajp.AjpAprProtocol $ AjpConnectionHandler.process(AjpAprProtocol.java: 378)atg.apache.tomcat.util.net.AprEndpoint $ Worker.run(AprEndpoint.java:1508)at java.lang.Thread.run(Thread.java:619)connector.CoyoteAdapter.service(CoyoteAdapter.java:262)在org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:419)在org.apache.coyote.ajp.AjpAprProtocol $ AjpConnectionHandler.process(AjpAprProtocol.java: 378)atg.apache.tomcat.util.net.AprEndpoint $ Worker.run(AprEndpoint.java:1508)at java.lang.Thread.run(Thread.java:619)

该应用程序通常正常运行.指示的类实现Serializable(整个对象图).

到目前为止,唯一的模式/观察是:

  • 我们似乎只有在iframe中使用应用程序时才会遇到问题

  • 当部署了新版本的应用程序时,似乎会出现问题

  • 在隐私模式下运行firefox(禁用所有缓存等)并不能解决问题

有任何想法吗?

霍尔格

gwt serializable gwt-rpc

39
推荐指数
5
解决办法
5万
查看次数

我应该为GWT应用程序构建REST后端

我正在计划一个新的应用程序,并一直在试验GWT作为可能的前端.我面临的设计问题是这个.

我应该使用选项A:GWT-RPC并快速构建应用程序

选项B:使用Spring MVC 3.0和所有优秀的@Controller,@ Service,@ Repository注释构建REST后端,并使用GWT覆盖功能和GWT请求构建器构建客户端库以与后端通信?

我对这种设计的所有优点和缺点以及人们的经验感兴趣?

rest gwt spring spring-mvc gwt-rpc

33
推荐指数
3
解决办法
1万
查看次数

GWT中的超级开发模式

我是gwt的新手.我不知道如何启动Super Dev模式.我需要一步一步详细说明.

我已经尝试通过添加来编辑gwt.xml文件

<add-linker name="xsiframe"/>
  <set-configuration-property name="devModeRedirectEnabled" value="true"/>
  <set-property name="compiler.useSourceMaps" value="true" />
Run Code Online (Sandbox Code Playgroud)

但我无法理解这一点.

gwt eclipse-plugin gwt-rpc gwt2 gwt-super-dev-mode

29
推荐指数
3
解决办法
6万
查看次数

SerializationException:类型不包含在可序列化类型集中

在我的Google Web Toolkit项目中,我收到以下错误:

com.google.gwt.user.client.rpc.SerializationException:类型'your.class.Type'未包含在可由此SerializationPolicy序列化的类型集中,或者无法加载其Class对象.出于安全考虑,此类型不会被序列化.

导致此错误的可能原因是什么?

serialization gwt-rpc

28
推荐指数
1
解决办法
2万
查看次数

错误的GWT请求对象列表的工厂性能

我正在通过GWT Request Factory将对象列表传输到客户端.对象只包含几个字符串,列表只包含20个对象.要传输这个小数据列表,需要一秒钟.首先,我认为需要优化查询.但测量显示:

从数据库中检索对象只需要

300ms

转移到客户端总共需要一秒钟

1136ms

所以这似乎是请求工厂开销.我已经使用了自己的ServiceLayerDecorator并且已经覆盖了isLive()函数,所以它总是返回true.我可以采取任何其他措施加快速度并将性能提升到可接受的范围吗?

更新:

我创建了将我的实体对象数据复制到DTO并使用RPC传输它们以比较RPC和Request工厂性能的逻辑.如您所见,RPC逻辑要快得多.现在我想知道这是设计还是我的申请中存在缺陷.

20个转移对象:

Request factory: 1252 ms

RPC: 420 ms

28个转移对象:

Request factory: 1654 ms

RPC: 460 ms

78个转移对象:

Request factory: 3963 ms

RPC: 769 ms

================================================== ==========

UPDATE2

所以我编写了一个非常简单的示例应用程序,以确保我的应用程序没有任何过滤器或其他干扰组件.应用程序从服务器加载10个带有4个String字段的对象.我使用Request工厂和RPC完成了它并停止了时间.

代码可以在这里找到:https: //github.com/jan10101/requstFactoryVSRPC

这里的生活演示:http: //requestfactorytest.appspot.com/

测试应用程序证实了我的观察结果:与RPC性能相比,请求工厂性能非常糟糕.在开发模式下,RPC的性能大约高出40倍,在生产模式下仍然是4倍.我是第一个注意到性能问题的人吗?

以下屏幕截图显示了测试结果,如果您不想自己尝试.

开发模式下的结果:

在此输入图像描述

生产代码的结果(在app引擎上): 在此输入图像描述

java performance gwt gwt-rpc requestfactory

25
推荐指数
1
解决办法
862
查看次数

GWT中IsSerializable接口的用途是什么(关于RPC机制)

GWT中IsSerializable接口的用途是什么(关于RPC机制).我从来没有找到一个很好的解释,为什么它是这样的,以及为什么默认的Java Serializable标记接口不起作用.

java gwt gwt-rpc

22
推荐指数
2
解决办法
8943
查看次数

从GWT应用程序中执行RPC时出现SerializationPolicy错误

我收到以下异常:

com.google.gwt.user.client.rpc.SerializationException:类型'java.lang.Long'未包含在可由此SerializationPolicy序列化的类型集中,或者无法加载其Class对象.出于安全考虑,此类型不会被序列化

使用GWT 2.1和内置的Jetty服务器.根据文档,这种类型绝对是可序列化的...如何将它包含在SerializationPolicy中?

java gwt serialization rpc gwt-rpc

22
推荐指数
3
解决办法
2万
查看次数

通过GWT-RPC发送持久化JDO实例

我刚开始学习Google Web Toolkit并完成了Stock Watcher教程应用程序的编写工作.

我想正确的,如果一个人想坚持业务对象(如股票)使用JDO并将其发送从客户端来回/ 通过RPC那么就必须为该对象创建两个单独的类:一是与JDO注解用于在服务器上保留它以及另一个可序列化并在RPC上使用的服务器?

我注意到Stock Watcher有单独的类,我可以理解为什么:

  • 否则gwt编译器会尝试为持久化类引用的所有内容生成javascript,如JDO和com.google.blah.users.User等
  • 此外,服务器端类可能存在不适用于客户端的逻辑,反之亦然.

我只是想确保我正确地理解这一点.我不想创建我想要在RPC上使用的所有业务对象类的两个版本,如果我不需要的话.

gwt gwt-rpc jdo

21
推荐指数
1
解决办法
4443
查看次数