`

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

阅读更多
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
分享到:
评论

相关推荐

    GSH:spring3.1.0M2+Hibernate3.5+GWT2.4+JPA+Annotation+Spring4gwt0.0.1亲手整合

    GSH:spring3.1.0M2+Hibernate3.5+GWT2.4+JPA+Annotation+Spring4gwt0.0.1亲手整合,也可以上新浪博客去看 http://blog.sina.com.cn/s/blog_687dfecb0100yrmf.html

    gwt+spring+hibernate

    综上所述,"gwt+spring+hibernate"的整合旨在展示如何在Java Web应用中同时利用GWT的富客户端特性、Spring的架构优势和Hibernate的数据持久化能力。通过这样的整合,开发者可以构建出用户体验良好、业务逻辑清晰且...

    GWT2.3_API.zip_GWT 2.3.0 api_Validator gwt2.3_gwt api chm_gwt ap

    GWT(Google Web Toolkit)是Google推出的一款开源的JavaScript开发框架,它允许开发者使用Java语言来编写Web应用程序,然后自动编译成优化过的JavaScript代码。GWT 2.3.0是该框架的一个版本,发布于2011年,带来了...

    GWT+Spring2+Spring Security2+Hibernate3实例

    一个GWT+Spring2+Spring Security2+Hibernate3的实例,数据库为mssql.在/GwtWeb/WebRoot/WEB-INF/lib 目录下RequiredJar.txt有需要用到的库说明 修改一下applicationContext.xml的数据库设定就可以使用

    smartgwt + spring + hibernate

    总的来说,这个项目展示了如何使用SmartGWT构建富客户端界面,通过Spring实现松耦合的架构,并利用Hibernate处理数据持久化。对于初学者,这是一个很好的学习案例,可以帮助理解如何将这三个强大工具结合在一起,...

    GWT1.7+Spring2.5+Hibernate3集成(保证能用!)

    完整代码,绝对能用:Spring和Hibernate部分实现了一个权限管理系统。GWT部分集成了Spring的Service(网上的例子很少,要不代码不全,要不不能使用,这个保证完全可以使用)。请注意各个配置文件,程序所用的包都在...

    富客户端工作流程

    通过学习这个名为“富客户端工作过程.ppt”的演示文稿,新手可以深入了解富客户端的工作原理,掌握如何使用SmartGWT框架来构建这样的应用,并通过图片效果讲解更好地理解和学习。这种实践导向的学习方法有助于开发者...

    gwt2.0.4+eclipse3.6创建web application project项目后无法运行的原因分析

    GWT是一个用于构建富互联网应用程序(RIA)的Java开发框架,而Eclipse是一个广泛使用的开源集成开发环境。当开发者遇到这种问题时,通常是因为配置不当或环境冲突导致的。 首先,我们需要了解GWT 2.0.4和Eclipse ...

    GWT+EXT+STRUTS2+Eclipse完整范例.rar

    GWT(Google Web Toolkit)是Google提供的一个开源Java SDK,用于构建和部署富互联网应用程序(RIA)。它允许开发者使用Java语言来编写前端代码,然后通过编译器将其转换为优化过的JavaScript,以在浏览器上运行。...

    GWT 2.3.0 api

    GWT 2.3 api ,chm GWT 2.3 api ,chm GWT 2.3 api ,chm

    基于富客户端的电子商务应用与实现.pdf

    基于富客户端的电子商务应用与实现 本文总结了基于富客户端的电子商务应用的...使用GWT可以快速构建富客户端电子商务应用系统,但是需要注意富客户端电子商务应用系统的缺点,如安装不便、操作不易、没有通用性等。

    smartgwt+mybatis+spring的整合

    在SmartGwt+Mybatis+Spring的项目中,Mybatis主要负责与数据库的交互,Spring可以管理Mybatis的SqlSessionFactory和Mapper接口。 3. **Spring**:Spring框架是Java开发的基石,它提供了众多企业级特性,如依赖注入...

    Ext + Gwt + Struts2.0开发5

    整合ExtJS到这种架构中,ExtJS可以用来构建富客户端界面,通过Ajax请求与GWT服务进行通信。ExtJS组件如Grid、Form等可以利用GWT服务获取数据或提交用户输入。通过这种方式,你可以构建一个既具有强大UI功能,又具备...

    hibernate+gwt2.4

    GWT是一种用于构建高性能、富客户端Web应用的开发工具,而Hibernate则是一个流行的Java对象关系映射(ORM)框架,它简化了Java应用对关系数据库的访问。 在GWT和Hibernate的集成中,开发者通常会将业务逻辑和数据...

    gwt+WebService,构建中国股票实时查看面板

    在本项目中,“gwt+WebService,构建中国股票实时查看面板”是一个利用GWT(Google Web Toolkit)技术和Web服务(WebService)来开发的应用程序,旨在实现实时展示中国股票市场的数据。GWT是一个开放源码的Java框架...

    gwt+spring

    GWT是一个用于构建富互联网应用程序(RIA)的开源工具包,它允许开发者使用Java语言编写客户端代码,然后由GWT编译器转换成优化过的JavaScript,从而在浏览器上运行。Spring则是一个强大的后端框架,提供依赖注入、...

    smartGWT3.0

    SmartGWT 3.0 是一个强大的开源Java框架,用于构建富互联网应用程序(Rich Internet Applications,RIA)。这个框架是基于Google Web Toolkit (GWT) 的,它为开发人员提供了丰富的组件库,使得创建复杂的、交互性强...

    GWT+Spring demo- springgwt_sudoku

    【标题】"GWT+Spring demo- springgwt_sudoku" 涉及的主要知识点是Google Web Toolkit (GWT) 和Spring框架的整合应用。这是一个实际的项目示例,展示了如何将GWT的客户端能力与Spring的服务器端功能相结合,以创建一...

    GWT入门教程+实例代码

    Google Web Toolkit(GWT)是Google推出的一款用于构建高性能、跨浏览器的Web应用程序的开源开发工具。它基于Java语言,通过编译Java源代码为JavaScript,使得开发者可以利用Java的强大功能来编写前端应用,同时避免...

    Ext + Gwt + Struts2.0开发4

    **Ext** 是一个JavaScript库,用于构建富客户端应用程序,提供了丰富的用户界面组件和数据管理功能。它允许开发者创建高度交互的、桌面级的Web应用体验。 **Google Web Toolkit (GWT)** 是一套用于构建和优化复杂...

Global site tag (gtag.js) - Google Analytics