构建富客户端程序 GWT2.3 + Guice3.0 + hibernateJPA 程序代码。

构建富客户端程序 GWT2.3 + Guice3.0 + hibernateJPA 程序代码。

Created Thursday 05 May 2011

gwt2.3 是开发 web2.0 的最理想的技术框架。

但只有 MVC中的 显示 和控制。 而模型这部分 没有给出 相关的实现。

用 spring + hiberante 倒是可以。但是 太过重量级的了。本来 web2.0就是应该快速的。

用上 spring 的IOC 反而感觉会慢点了。启动慢,加载慢。所以选择了一个轻量级的IOC-guice

guice 从 2.0 的版本就开始关注。2.0的版本 还是一个IOC注入 框架。通过@Inject 标记注入bean。

我从 3.0的beta版本就开始关注了。发现里面有了持久层框架的实现 JpaPersistModule

开始的并没有太明白怎么使用这个Module。经过一段学习发现其实很简单。只要在模块启动时候new JpaPersistModule("XXX_unit")

就可以了。

废话少说。启动从 web.xml 开始配置下。

<!-- guice conf begin -->
    <listener>
        <listener-class>com.freewebsys.sns.guice.GuiceListener</listener-class>
    </listener>
    <filter>
        <filter-name>guice</filter-name>
        <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
    </filter>

<filter-mapping>
    <filter-name>guice</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<!-- guice conf end →

然后是GuiceListener类的实现

import com.freewebsys.core.dao.BaseDao;
import com.freewebsys.core.dao.JpaBaseDao;
import com.freewebsys.sns.server.GreetingServiceImpl;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Singleton;
import com.google.inject.persist.PersistFilter;
import com.google.inject.persist.jpa.JpaPersistModule;
import com.google.inject.servlet.GuiceServletContextListener;
import com.google.inject.servlet.ServletModule;

public class GuiceListener extends GuiceServletContextListener {

public Injector getInjector() {

return Guice.createInjector(new JpaPersistModule("jpa_unit"),
        new ServletModule() {
            protected void configureServlets() {
                // url重写
                // bind(UrlRewriteFilter.class).in(Singleton.class);
                // filter("/*").through(UrlRewriteFilter.class);
                // 先进行事物控制
                filter("/*").through(PersistFilter.class);
                // 不可以配置Singleton
                bind(BaseDao.class).to(JpaBaseDao.class);

                        bind(GreetingServiceImpl.class).in(Singleton.class);
                        serve("/freewebsys_gwt_sns/greet").with(GreetingServiceImpl.class);
                        // Service End
                    }
                });
    }
}

其中new JpaPersistModule("jpa_unit") 是加载 jpa实现的模块。配置在src/META-INF/persistence.xml
别忘记自己运行的时候修改 数据库连接用户名密码。还要创建数据库。表就不用创建了。用hibernate.hbm2ddl.auto" value="update创建。

<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
    version="1.0">

<!-- JPA "unit" -->
<persistence-unit name="jpa_unit" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <!-- Pojo Begin -->
    <class>com.freewebsys.sns.pojo.UserInfo</class>
    <!-- pojo End -->
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>

<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url"
    value="jdbc:mysql://127.0.0.1:3306/freewebsys?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf-8" />
<property name="hibernate.connection.username" value="freewebsys" />
<property name="hibernate.connection.password" value="freewebsys" />
<property name="hibernate.connection.pool_size" value="2" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hiberante.cache_provider" value="org.hibernate.cache.NoCacheProvider" />

<property name="hibernate.connection.autocommit" value="true" />
<property name="hibernate.cache.use_query_cache" value="false" />
<property name="hibernate.cache.use_second_level_cache"
    value="false" />

<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="false" />

<!-- <property name="cglib.use_reflection_optimizer" value="true"/> -->
<!-- hibernate的c3p0连接池配置(需要jar包:c3p0-0.9.0.4.jar) -->
<property name="hibernate.connection.provider_class"
    value="org.hibernate.connection.C3P0ConnectionProvider" />
<!-- 最小连接数 -->
<property name="hibernate.c3p0.min_size" value="5" />
<!-- 最大连接数 -->
<property name="hibernate.c3p0.max_size" value="30" />
<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 <property name="hibernate.c3p0.maxIdleTime"
    value="60" /> -->
<!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
<property name="hibernate.c3p0.timeout" value="1800" />
<!-- 最大的PreparedStatement的数量 -->
<property name="hibernate.c3p0.max_statements" value="50" />
<!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒 -->
<property name="hibernate.c3p0.idle_test_period" value="120" />
<!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->
<property name="hibernate.c3p0.acquire_increment" value="1" />
<!-- 是否每次都验证连接是否可用 <property name="c3p0.validate" value="false" /> -->

    </properties>
</persistence-unit>

</persistence>

其中POJO类配置

@Entity
public class UserInfo implements java.io.Serializable {

public static final String USER_SESSION = "userInfoSession";// 用户session常量

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;//

private Date createTime;// 创建时间

@Column(length = 100)
private String email;// 电子邮件

@Column(length = 100)
private String name;// 真实姓名

@Column(length = 100)
private String passwd;// 密码

@Column(length = 1)
private Integer sex;// 性别

@Column(length = 10)
private String birthday;// 生日

@Column(length = 10)
private String bloodType;// 血型

private Integer currentProvince;// 所在省

private Integer currentCity;// 所在城市

@Column(length = 100)
private String currentArea;// 所在地区

private Integer adminLevel;// 管理员级别

private Integer active;// 是否激活

    private Integer score;// 积分
.....省略get set 方法

这个是使用 hibernate JPA + c3p0 数据源的配置文件。
// 先进行事物控制
filter("/*").through(PersistFilter.class);
// 不可以配置Singleton,否则事物有问题
bind(BaseDao.class).to(JpaBaseDao.class);
配置一个通用dao的实现。

接下来就是gwt的servlet配置。在guice下面配置就不用在web.xml下面单独进行配置了。效果是一样的。
bind(GreetingServiceImpl.class).in(Singleton.class);//一定要配置成但立模式
serve("/freewebsys_gwt_sns/greet").with(GreetingServiceImpl.class);

接下来就是GreetingServiceImpl

@Inject
    private BaseDao baseDao;

    public String greetServer(String input) throws IllegalArgumentException {
        List<UserInfo> userList = baseDao.find("from UserInfo ");
        for (UserInfo userInfo : userList) {
            System.out.println("userInfo:getId:/t" + userInfo.getId());
        }
        return "yes";
    }
没执行复杂查询。就是将userInfo 全部查询并显示Id

gwt这里没有进行太复杂的代码就是 默认 创建的 一个 heloworld。点击一个按钮执行后台。
要运行这个程序需要 安装 google gwt 插件。并且需要修改 appengine本地运行的白名单。
在工程目录/doc/appengine-tools-api.jar下替换${appengine_home}/lib/appengine-tools-api.jar
然后就可以跑通程序了。

 

运行效果:

 

代码下载地址:

 

http://freewebsys.googlecode.com/files/freewebsys_gwt_sns.2011.05.tar.gz

时间: 2024-09-10 16:42:32

构建富客户端程序 GWT2.3 + Guice3.0 + hibernateJPA 程序代码。的相关文章

构建富客户端程序 GWT2.3 + Guice3.0 + hibernateJPA 程序代码

  构建富客户端程序 GWT2.3 + Guice3.0 + hibernateJPA 程序代码. Created Thursday 05 May 2011 gwt2.3 是开发 web2.0 的最理想的技术框架. 但只有 MVC中的 显示 和控制. 而模型这部分 没有给出 相关的实现. 用 spring + hiberante 倒是可以.但是 太过重量级的了.本来 web2.0就是应该快速的. 用上 spring 的IOC 反而感觉会慢点了.启动慢,加载慢.所以选择了一个轻量级的IOC-gui

Javascript + Servlet的鸿沟如何抹平以构建富客户端应用?[SOS]

在Silverlight的世界中,RIA Service + Silverlight可以无缝的进行集成,如有一个实体对象和关联的复杂子对象,在这里可以非常简便的实现: 1.构建公用的Domain Class定义 2.Silverlight客户端可以使用双向绑定和以上的对象关联 3.服务端可以使用以上的Domain Class进行存储 因此非常方便,WCF框架已经提供了WCF Trackable支持,如某个对象内容的变化内容可以跟踪,等等..   Flex中配合BlazDS也可以非常方便的处理这个

使用Grails构建富Internet应用程序,第2部分

相关文章: 使用Grails构建富Internet应用程序,第1部分:使用Grails和Flex构建Web应用程序 Grails和Google Web Toolkit 简介:在这个共 2 部分的系列的第 2 部分中,将基于您在 第 1 部分 中用 Grails 创建的 Web 服 务创建新的服务.您将创建一个新的搜索页面,但这一次使用 Google Web Toolkit (GWT) 来创建这个 应用程序.此外,您还将使用 Ext GWT 库中的一些更丰富的 UI 小部件. 关于本系列 这个系列

构建富Internet应用程序 :使用OpenLaszlo、Eclipse Laszlo IDE和Web Tools

开始之前 本教程演示如何使用 OpenLaszlo 平台和 Web 服务来开发.打包和 部署一个已编写好的富 Internet 客户机.富客户端利用了后端的服务(这些后端服务是 通过使用 SOAP Web 服务的通用 SOA 方法提供).还将了解如何有效地使用 Eclipse Laszlo IDE 和 Eclipse Web Tools 来使得开发更加容易且富有生产效率. 关于 本教程 由于大多数 Web 应用程序都构建于 HTML 和 HTTP 之上,所以 Web 对于 用户经常使用的应用程序

OData的实际应用-通过开放数据协议构建富Internet应用程序

在 PDC09 期间,Microsoft WCF 数据服务团队(以前称为 ADO.NET 数据服务团队)首次推出 OData,即开放数据协议.这一消息是在会议第二天的主题演讲中宣布的,但实际上 OData 早就开始了.自从 Microsoft .NET Framework 3.5 SP1 中提供 ADO.NET 数据服务以来,熟悉 ADO.NET 数据服务的用户已经使用 OData 作为数据传输协议开发基于资源的应用程序.本文将介绍富 Internet 应用程序 (RIA) 的开发人员如何使用

什么是富客户端互联网应用程序

原稿:Rich Internet Applications with Adobe Flex & Java 28-30 章节:Architecture of Rich Internet Applications 作者:Yakov Fain,Dr.Vector Rasputnis,Anatole Tartakovsky 时间:2008-4-27 翻译者:刘锦行(whizen) 修订:   什么是富客户端互联网应用程序? 在软件工业的历史已经发生了惊人的改变.我们从单机时代进入了客户端/服务器端的时代

JavaFX深入浅出(一)富客户端应用程序RIAs

每当我们要学习一种新的技术,首先要搞明白他是干什么的,对自己有什么用处,把相关情况弄清楚以后,才能决定去不去学习他.在学习JavaFX之前,下面几个问题我觉得应该先搞清楚: 一.什么是 Rich Internet Applications ? Rich Internet Applications ,缩写RIAs,翻译过来是富客户端应用程序,或者富互联网应用程序.他是从网络下载到本机,可以在浏览器中运行的一种应用程序.当然也可以脱离浏览器,直接在操作系统下运行.相对于传统的的Web应用,富客户端应

AJAX:Java Pet Store 2.0应用程序简介

使用 Ajax 创建用于无缝数据交互的 Web 2.0 web 应用程序是一项复杂的任务,Ajax 是一种包含( 但不仅限于)Asynchronous JavaScript 和 XML 的技术.为了帮助您准确理解什么是 Web 2.0,以及 Ajax 如何改善用户体验,Java BluePrints 程序 小组开发了 Java Pet Store 2.0 参考应用程序.通过 探索 Pet Store 2.0 应用程序的用例.设计和实现,您将了解构建具有类似功能的应用程序的更多信息 . Java

使用Eclipse富客户端平台和RAD V6创建EJB客户端(一)

使用Eclipse 富客户端平台和Rational Application Developer V6创建EJB 客户端(一) 引言 最近几年来,作为编写交互式开发环境(IDE)工具的框架 -- Eclipse 平台的流行程度显著增长.关于 Eclipse 3.0 版本,同样的技术已经扩展为支持富客户端的开发,给予 Java 开发者使用有自身感观的可扩展平台编写富客户端代码的能力. 开发富客户端的平台通称 Eclipse Rich Client Platform (RCP).为什么着重强调富客户端