标签: requestfactory

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

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

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

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

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

gwt gwt-rpc requestfactory

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

错误的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
查看次数

Spring + GWT或Spring与GWT

背景

我正在使用GWT,Java和EclipseLink开发Web应用程序.这些选择中的每一个都是我为实现该程序而做出的选择.GWT是唯一没有牢牢把握它与Spring之类的东西相比的选择.现在我使用GWT小部件来实现客户端和GWT RequestFactory来实现EclipseLink中实体的服务器 - 客户端通信.

查看

所以我认为GWT主要是一个小部件库,它有一个简单的服务器 - 客户端通信框架.这与我查看Spring的方式大致相同,Spring是一个小部件库,具有更高级和更复杂的框架,用于控制服务器 - 客户端通信 - 有可能它不像GWT那样方便地实现AJAX.

因此,考虑到这些,我认为GWT是理解并最终与Spring合作的垫脚石.但是,谷歌,荷兰国际集团再次对这个话题,我已经遇到几个主题这样一个一个,似乎违背原来的概念是什么春天是,和这意味着什么了GWT.

问题

  1. 关于GWT和Spring的观点有误解吗?如果是这样,我们将非常感谢您的一些简要指导!
  2. Spring Framework中GWT小部件的反对部分是什么?
  3. Spring Framework中GWT RequestFactory的反对部分是什么?

java gwt spring requestfactory

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

GWT RequestFactory示例?

你知道在哪里可以找到新的GWT 2.1 RequestFactory的代码示例吗?谷歌的教程还不够好.

gwt requestfactory

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

使用具有复杂用例的GWT编辑器

我正在尝试创建一个与Google表单创建页面非常相似的页面.

在此输入图像描述

这就是我尝试使用GWT MVP框架(地点和活动)和编辑器对其进行建模的方式.

CreateFormActivity(活动和演示者)

CreateFormView(用于视图的界面,具有嵌套的Presenter界面)

CreateFormViewImpl(实现CreateFormView和Editor <FormProxy>

CreateFormViewImpl具有以下子编辑器:

  • TextBox标题
  • TextBox描述
  • QuestionListEditor questionList

QuestionListEditor实现IsEditor <ListEditor <QuestionProxy,QuestionEditor >>

QuestionEditor实现编辑器<QuestionProxy> QuestionEditor具有以下子编辑器:

  • TextBox questionTitle
  • TextBox helpText
  • ValueListBox questionType
  • 以下每种问题类型的可选子编辑器.

每种问题类型的编辑器:

TextQuestionEditor

ParagraphTextQuestionEditor

MultipleChoiceQuestionEditor

CheckboxesQuestionEditor

ListQuestionEditor

ScaleQuestionEditor

GridQuestionEditor


具体问题:

  1. 从表单添加/删除问题的正确方法是什么? (见后续问题)
  2. 我应该如何为每种问题类型创建编辑器?我试图听取questionType值的变化,我不知道该怎么办.(BobV回答)
  3. 每个特定于问题类型的编辑器是否应该使用optionalFieldEditor包装?由于一次只能使用其中一种.(BobV回答)
  4. 如何最好地管理在对象层次结构深处创建/删除对象.例)指定问题编号3的答案,该问题是多项选择题的类型.(见后续问题)
  5. 可以使用OptionalFieldEditor编辑器来包装ListEditor吗?(BobV回答)

基于答案的实施

问题编辑

public class QuestionDataEditor extends Composite implements
CompositeEditor<QuestionDataProxy, QuestionDataProxy, Editor<QuestionDataProxy>>,
LeafValueEditor<QuestionDataProxy>, HasRequestContext<QuestionDataProxy> {

interface Binder extends UiBinder<Widget, QuestionDataEditor> {}

private CompositeEditor.EditorChain<QuestionDataProxy, Editor<QuestionDataProxy>> chain;

private QuestionBaseDataEditor subEditor …
Run Code Online (Sandbox Code Playgroud)

gwt requestfactory gwt-editors

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

GWT 2.1编辑器框架

我正在寻找有关如何使用GWT 2.1 Editor框架的一些文档或示例.谷歌的文档是呃,有点缺乏.

从可用的有限文档中,我已经能够理解编辑器(理论上)将允许您更轻松地将GUI元素绑定到数据模型.这将缓解将数据复制到TextArea/ListBox/CheckBox,然后将用户的更改复制回底层模型(最终是数据库)的常见任务.

如果确实能够实现这一目标,那将非常受欢迎.就目前而言,我对如何实施其中任何一个都感到很头疼.任何指向文档或示例的指针都将受到高度赞赏.

java gwt requestfactory

11
推荐指数
2
解决办法
3234
查看次数

GWT Spring安全集成(PURE GWT,无JSP)

我正在使用GWT 2.4Spring 3.1,我想用Spring Security保护我的应用程序.我一直在寻找一个没有单独的JSP登录页面的GWT解决方案.我发现只有使用JSP进行登录的旧站点,因此该线程可以产生一种解决方案,以标准方式将GWT与Spring Security完全集成.无论如何,如果有一个已成功完成此操作的引用,则可以使用指向该引用的链接关闭该线程.

到目前为止,这是我的第一个方法:

ApplicationContext的-security.xml文件:

<http auto-config="false" use-expressions="true" entry-point-ref="customAuthenticationEntryPoint">
    <intercept-url pattern="/ApplicationScaffold.html" access="permitAll" />
    <intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
</http>

<beans:bean id="customAuthenticationEntryPoint" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint" 
    c:loginFormUrl="/ApplicationScaffold.html" />

<!-- Configure Authentication mechanism -->
<authentication-manager alias="authenticationManager">
    <authentication-provider>
        ...
    </authentication-provider>
</authentication-manager>
Run Code Online (Sandbox Code Playgroud)

ApplicationScaffold.html(我的应用程序是使用Spring Roo创建的)是包含GWT登录页面的起始页面.

web.xml中:

<display-name>securitytest</display-name>

<description>Roo generated application</description>

<!-- Enable escaping of form submission contents -->
<context-param>
    <param-name>defaultHtmlEscape</param-name>
    <param-value>true</param-value>
</context-param>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:META-INF/spring/applicationContext*.xml</param-value>
</context-param>

<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter>
    <filter-name>HttpMethodFilter</filter-name> …
Run Code Online (Sandbox Code Playgroud)

gwt spring login spring-security requestfactory

11
推荐指数
2
解决办法
5760
查看次数

RestyGWT与RequestFactory

我正在考虑将基于GWT-RPC的当前服务层迁移到其他地方.它是大约10个服务接口,每个接口有5个方法,涉及大约20个不同的域实体,因此您可以了解更改整个事物所需的工作量,这显然是我想要最小化的.我也使用Gilead和基于Guice的集中式Servlet来处理所有RPC请求.

改变的主要原因是:

  • TypeSerializers消耗了应用程序代码大小的最大部分.
  • 客户端的序列化/反序列化特别是在开发模式下SLOW,这似乎是GWT-RPC的常见事实.
  • 显然,我想尽量减少在线有效载荷,但这并不是一项艰难的要求.

我正在考虑的选项是:

  • RequestFactory,被提升为更快的野兽.但是我担心将域对象的客户端代码中的所有引用替换为它们的代理对应物会是很多工作,而且我也懒得实际构建所有代理.

  • 一个完整的JSON/REST方法使用RestyGWT,看起来它会让我仍然使用域对象,但我担心它最终会导致更慢的反序列化?我不是基于任何事实,但找不到任何基准.这只是一种印象.

我真的很想得到建议.

谢谢!

performance gwt rpc json requestfactory

10
推荐指数
1
解决办法
2381
查看次数

如何撤消RequestFactory更新

通过GWT RPC更新对象可以轻松撤消.我们需要在内存中克隆先前的实体状态并在撤消时应用它.

但是当我们使用RequestFactory时,没有具体的更新操作.RequestFactory将实体修改发送到服务器并更新存储库实体本身.我们无法拦截更新过程.

如何对使用RequestFactory进行的更新实现撤消?

gwt undo requestfactory

10
推荐指数
1
解决办法
419
查看次数

GWT Requestfactory性能建议

在使用GWT requestfactory时,我观察到非常糟糕的性能.例如,将我的服务层花费2秒到fullfil的请求将GWT花费20秒来序列化.我的服务正在返回~100将是EntityProxies.这些对象中的每一个都将成为4个ValueProxies和2个EntityProxies(100个根级EntityProxies,400个ValueProxies和200个额外的EntityProxies).但是,我发现在更小的数据集上,性能降低了10倍.

日志片段示例:

D 2012-10-18 22:42:39.546 ServiceLayerDecorator invoke: Inoking service layer took 2265 ms
D 2012-10-18 22:42:58.957 RequestFactoryServlet doPost: Entire request took 22870 ms
Run Code Online (Sandbox Code Playgroud)

我在ServiceLayerDecorator#invoke方法中添加了一些分析代码,并将整个servlet包装在一个计时器中.我已经自己分析了服务,它确实在~2s内返回结果.

我正在使用GWT 2.4,但已经在GWT 2.5rc1和GWT 2.5rc2上进行了测试.我的后端是GAE,但我不认为这是在这里发挥作用.

我发现这个针对2.4的错误,这似乎是非常相关的.我已经手动应用了这个谷歌群组的补丁而没有任何运气.

我的域名模型如下:

class Trip {
  protected Address origin; // becomes ValueProxy
  protected Address destination; becomes ValueProxy
  protected Set<TripPassenger> tripPassengers; // Set of ValueProxies
}

class TripPassenger {
  protected Passenger passenger;
}

class Passenger {
  protected Account account;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • 我是否正确分析了代码并将问题隔离到GWT序列化?
  • 我可能做错会导致这种行为吗?
  • 如何更好地分析GWT序列化代码以试图找出原因?

gwt gwt2 requestfactory

10
推荐指数
1
解决办法
777
查看次数