GWT编辑器和GAE数据存储区

时间:2012-10-21 00:48:53

标签: java google-app-engine gwt google-cloud-datastore jdo

GWT有一个Editor Framework,经过粗略的检查,看起来非常像Spring MVC / Forms如何处理后端数据对象和前端UI组件之间的数据绑定。

我正在编写我的第一个GWT / GAE应用程序,并想知道是否有任何方法可以将此编辑框架 GAE的JDO / Atomic库结合使用,这是您编写的针对O的API / R在您的应用和基础数据存储区之间映射。

这两个框架是互补的还是相互排斥的?如果他们可以一起工作,有人可以提供一个小代码示例,说明如何使用它们来填充一个带有名单列表的HTML <select>框,或者其他基本但实用的东西。

我认为这可能涉及Person POJO代表一个人(并且具有String name属性),也许某种PersonDAO使用JDO / Atomic到CRUD {{1}来自/来自数据存储区的实例,然后是可以将Person个实例映射到前端Editor<Person>的某种Person

如果我能看到一个有效的例子,我想这一切都会为我而来。并且,如果这些是彼此排斥的并且不能一起使用,那么为什么非常赞赏的可靠解释!提前谢谢!

2 个答案:

答案 0 :(得分:1)

我希望这会有所帮助,这是一些将数据存储在GAE数据存储中的示例代码,一个简单的查询来获取数据并使用内容填充GWT下拉列表。

这是一个持久存储到app引擎数据存储的JDO ORM:

https://github.com/bsautner/com.nimbits/blob/master/nimbits-tds/src/com/nimbits/server/orm/EntityStore.java

以下是查询数据存储以获取对象列表的示例

@Override
    public List<Entity> getEntityByName(final User user, final String name) 
{
        final PersistenceManager pm = pmf.getPersistenceManager();

        try {
            final Query q1 = pm.newQuery(EntityStore.Class);
            final List<Entity> c;

                q1.setFilter("name==b");
                q1.declareParameters("String b");
                q1.setRange(0, 1);
                c = (List<Entity>) q1.execute(name);

            if (c.isEmpty()) {
                return Collections.emptyList();
            } else {

                final Entity result = c.get(0);
                return createModel(user, result);

            }

        } finally {
            pm.close();
        }
    }

这是一个基于GWT(GXT)的组合框,填充了从ORM模型创建的POJO

https://github.com/bsautner/com.nimbits/blob/master/nimbits-tds/src/com/nimbits/client/ui/controls/EntityCombo.java

答案 1 :(得分:0)

在IE6和HTML4时代,没有办法像GMail那样编写酷炫的网络应用程序。这就是为什么推出GWT并实现目标的原因:GMail能够在任何浏览器中工作。

在我们的日子里,看起来GWT失去了领导力。 jQuery变得更受欢迎,因为它使用硬件加速并且工作得更快......但是忘记GWT还为时尚早。

如果你想使用编辑器框架和JDO,我们需要强调它们之间存在瓶颈:GWT RPC。 RPC每次都会对POJO进行序列化和反序列化,并且您可以通过非常有限的方式自定义此序列化/反序列化。

GWT RPC的这个缺点迫使大多数开发人员维护两个相同的POJO层次结构:一个用于JDO / Hibernate,另一个用于GWT。通常老板会批准这个解决方案,因为它比黑客攻击每个RPC调用更快更容易。在大多数现实世界的项目中,我看到有两个等级......

另一方面,jQuery根本不需要定义任何POJO。显然,这是发展速度不同的原因。

对不起,我没有提供任何答案。我希望即使只是你在死胡同里,我的想法也会有用。而且我已经多次看到非常有经验的建筑师决定使用GWT并进入这个死胡同。而现在他们花费时间和金钱来编写两个相同的POJO层次结构来为这个错误付出代价。