`
reverocean
  • 浏览: 195508 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

搭建GAE+Flex+Spring

阅读更多
一、搭建开发环境

1.给Eclipse安装Flex Builder插件(Flex4.0之后改为叫Flash Builder)
2.给Eclipse安装Google App Engine的插件,这个在Google App Engine官方网站上能找到相关的文档。

二、新建GAE项目

略过,这个没什么好说的

三、给GAE项目加Flex的Nature

在项目名上右键==》Flex Project Nature==》Add Flex Project Nature
然后服务器选择J2EE和BlazeDS

添加完Flex的Nature之后需要设置Flex Server(在项目的属性里)里的
Root folder:选择GAE项目里的war子文件夹
Root URL: http://localhost:8888/(注意,这里和普通的Flex+J2EE的项目不一样)
Context Root:/(这里也不一样,普通的Flex+J2EE项目,这里需要设定为项目名称,要不然Flex在编译之后,运行时找不到BlazeDS的服务器)

项目上的配置到此结束。

四、配置BlazeDS

在网上有关于如何配置Google App Engine项目里使用的文章BlazeDS,上Google搜索一下就o了

五、配置Spring+BlazeDS

有两种Spring+BlazeDS的配置方式。
第一种就是在BlazeDS的service-config.xml文件里配置一个factory,factory里设置需要的bean从Spring上下文里去找。这种方法我以前就这么使用,想尝试一下新的方式,所以放弃这种方法。这种方法在BlazeDS的文档里的倒数第二章里有奖,需要的可以去那里查。

第二种就是Spring提供的Spring+BlazeDS配置方式(Spring FLex Homehttp://www.springsource.org/spring-flex,想详细了解的可以去看这里的文档)。

1.拷贝Spring相关的lib包
2.配置web.xml
<context-param>
    	<param-name>contextConfigLocation</param-name>
     	<param-value>
     	WEB-INF/config/service-context.xml
     	</param-value>
    </context-param>
     
	<listener>
		<listener-class>
		org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener> 
	<servlet>
		<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/config/web-application-config.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<!--
		Map all /messagbroker requests to the DispatcherServlet for handling
	-->
	<servlet-mapping>
		<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
		<url-pattern>/messagebroker/*</url-pattern>
	</servlet-mapping>


熟悉Spring的应该很清楚这些都干什么的
设置一下Spring配置文件的位置
添加一个加载Spring的Listener
为BlazeDS配置servlet以及url-mapping

其实从本质上讲这种方法和第一种方法没有什么区别的,唯一的区别就是第一种方法是使用BlazeDS自己提供的servlet,这里是使用Spring的MVC框架的Servlet而已。

3.配置web-application-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:flex="http://www.springframework.org/schema/flex"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/flex http://www.springframework.org/schema/flex/spring-flex-1.0.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
	<flex:message-broker />
</beans>


这个文件里就一行有用,其他都是Spring的命名空间声明。这里虽然简单,其实是Spring2.5之后提供的自定义命名空间帮我们做了很多事情,很多都是默认的。比如说到哪里去找flex的配置文件(默认在WEB-INF\flex目录下)。

4.配置service-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:flex="http://www.springframework.org/schema/flex"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/flex http://www.springframework.org/schema/flex/spring-flex-1.0.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"
	default-autowire="byName">
	[color=red]<import resource="jdo-context.xml" />
	<context:component-scan base-package="com.rever.gae.service" />
	<context:component-scan base-package="com.rever.gae.dao.jdo" />[/color]
	<bean id="velocityEngine"
		class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
		<property name="resourceLoaderPath">
			<value>WEB-INF/velocity</value>
		</property>
		<property name="velocityProperties">
			<props>
				<prop key="input.encoding">UTF-8</prop>
				<prop key="output.encoding">UTF-8</prop>
				<prop key="contentType">text/html;charset=UTF-8</prop>
				<prop key="file.resource.loader.cache">false</prop>
				<prop key="file.resource.loader.modificationCheckInterval">1</prop>
				<!-- <prop key="runtime.log">velocity.log</prop> -->
				<prop key="runtime.log.logsystem.class">org.apache.velocity.runtime.log.CommonsLogLogChute
				</prop>
				<prop key="velocimacro.library.autoreload">true</prop>

				<prop key="velocimacro.max.depth">200</prop>
			</props>
		</property>
		<property name="overrideLogging">
			<value>false</value>
		</property>
	</bean>

	<bean id="messageSource"
		class="org.springframework.context.support.ResourceBundleMessageSource">
		<property name="basename" value="ApplicationResources" />
	</bean>
</beans>


重要配置在红色地方标出来了。第一行是引入jdo配置文件,第二行是告诉Spring去哪里找service。这里我用Spring3.0里提供的Annotation来暴露Spring的service给BlazeDS的(我觉的这一点比第一种方法更方便一些,第一种方法如果重构service的名字或者添加一个新的service,需要改两处配置文件才能生效,而且修改也是拷贝粘贴)。第三行是告诉Spring到哪里去找DAO的实现,这里跟BlazeDS没有多少关系。

5.配置jdo-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:flex="http://www.springframework.org/schema/flex"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/flex http://www.springframework.org/schema/flex/spring-flex-1.0.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
	[color=darkred]<bean id="persistenceManagerFactory"
		class="org.springframework.orm.jdo.LocalPersistenceManagerFactoryBean">
		<property name="jdoProperties">
			<props>
				<prop key="javax.jdo.PersistenceManagerFactoryClass">
					org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory
				</prop>
				<prop key="javax.jdo.option.ConnectionURL">
					appengine 
                </prop>
				<prop key="javax.jdo.option.NontransactionalRead">
					true 
                </prop>
				<prop key="javax.jdo.option.NontransactionalWrite">
					true 
                </prop>
				<prop key="javax.jdo.option.RetainValues">
					true 
                </prop>
				<prop key="datanucleus.appengine.autoCreateDatastoreTxns">
					true 
                    </prop>
			</props>
		</property>
	</bean>
[/color]
	[color=blue]<bean id="jdoTransactionManager" class="org.springframework.orm.jdo.JdoTransactionManager">
		<property name="persistenceManagerFactory" ref="persistenceManagerFactory" />
	</bean>[/color]
	[color=violet]<bean id="transactionInterceptor"
		class="org.springframework.transaction.interceptor.TransactionInterceptor">
		<property name="transactionAttributes">
			<props>
				<prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="delete*">
					PROPAGATION_REQUIRED,-Exception
				</prop>
				<prop key="update*">
					PROPAGATION_REQUIRED,-Exception
				</prop>
				<prop key="*">PROPAGATION_REQUIRED,readOnly
				</prop>
			</props>
		</property>
	</bean>[/color]
	[color=cyan]<bean
		class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
		<property name="proxyTargetClass" value="true"/>
		<property name="beanNames">
			<value>*Service</value>
		</property>
		<property name="interceptorNames">
			<list>
				<value>transactionInterceptor</value>
			</list>
		</property>
	</bean>[/color]
</beans>

深红色的bean是Google App Engine里关于JDO的配置,从自动生成的文件里改过来就ok了,其余的是自动管理事务的配置。

六、编写Service

如何编写Service就看自己的业务了,这里主要说一下Spring的Annotation的使用。

@Service("systemStatusService")
@RemotingDestination(channels = {
	"my-amf"
})
public class SystemStatusService {
        @RemotingInclude
	public void addTotal() {
        ..............................
        ..............................
        ..............................
        }
}

第一个:@Service("systemStatusService") 注明该类需要暴露为bean,并且该bean的id是systemStatusService(当然你也可以使用他默认的命名策略)。
第二个:@RemotingDestination(channels = {
"my-amf"
})  用来注明该bean被BlazeDS暴露为service。这里的my-amf在flex的配置文件里配置,表明用那个序列化。
第三个:@RemotingInclude 注明该方法暴露给BlazeDS,你可以在Flex能够调用该方法。

这其实也是第一种配置方法里加一个service的三个步骤。

----------------------------------华丽的分割线----------------------------------
关于GAE+Flex+Spring的配置到此结束。


分享到:
评论

相关推荐

    spring+gae+hibernate

    标题“spring+gae+hibernate”所提及的是一个技术集成项目,主要涉及Spring框架、Google App Engine(GAE)和Hibernate三个关键组件。让我们详细探讨这三个技术以及它们的集成。 Spring是一个开源的Java企业级应用...

    spring+gae

    【标题】"Spring+GAE"揭示了将Google App Engine(GAE)与Spring框架集成的主题,这是一个在云端运行Java应用程序的关键技术组合。Spring是一个广泛使用的开源Java框架,提供了依赖注入、面向切面编程和MVC(模型-...

    flex + spring + BlazeDS + google App JDO 实现一个CRUD.

    总结来说,这个项目展示了如何利用Flex构建用户界面,Spring处理业务逻辑,BlazeDS作为数据通信中介,以及GAE的JDO进行数据存储,形成一个完整的客户端-服务器端应用。这种架构结合了富客户端的交互体验和云计算的可...

    spring3+springmvc+jpa2+gae

    标题 "spring3+springmvc+jpa2+gae" 指的是一个集成开发环境,它结合了Spring框架的三个核心组件以及Google App Engine (GAE)。这个项目旨在展示如何在GAE上运行一个基于Spring 3、Spring MVC和JPA 2.0的应用程序。...

    gae strus2 spring 整合

    【gae strus2 spring 整合】是一种在Google App Engine(GAE)平台上将Struts2和Spring框架集成的技术方案。这种整合旨在充分利用Struts2的MVC架构和Spring的依赖注入(DI)以及面向切面编程(AOP)能力,以构建高效...

    Struts2,Spring,JDO,AJAX on GAE

    这篇博客“Struts2,Spring,JDO,AJAX on GAE”可能探讨了如何在Google App Engine (GAE)平台上整合这些技术来构建高效且可扩展的Web应用。 1. Struts2:Struts2是一个基于MVC(Model-View-Controller)设计模式的...

    基于GAE的Demo

    【基于GAE的Demo】是一个使用Eclipse集成开发环境构建的项目,主要展示了如何在Google App Engine(GAE)平台上整合Struts2、Spring和Tiles框架。GAE是Google提供的一个云计算平台,允许开发者在Google的基础设施上...

    gea 整合struts2+jpa+spring实例

    在本实例中,我们将探讨如何将Google App Engine (GAE) 与三个强大的Java框架——Struts2、JPA(Java Persistence API)以及Spring进行整合,以构建一个高效的Web应用程序。GAE是一个由Google提供的云平台,允许...

    wallproxy-plus

    利用GAE+WallProxy-plugins搭建个人代理服务器

    GAE搭建个人网站图文详细教程

    ### GAE搭建个人网站知识点详解 #### 一、GAE简介 - **定义与特性**:GAE(Google App Engine)是Google推出的一种基于云端的应用程序托管服务,它允许开发者在其上部署各种Web应用程序。GAE自2008年发布以来,已经...

    gae-pytorch-master_pytorch_pytorchgae_GAE_自编码器_gaepytorchmaster_

    【标题】"gae-pytorch-master_pytorch_pytorchgae_GAE_自编码器_gaepytorchmaster_" 提供的信息表明,这是一个使用PyTorch实现的图自编码器(Graph Autoencoder, GAE)项目,其核心是将自编码器的概念应用于图数据。...

    GAE使用规则

    GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则

    小学期GAE项目 python+Django框架实现的博客

    【标题】:“小学期GAE项目 python+Django框架实现的博客” 【描述】:“小学期的项目,一组人用了三周连学习再开发,文档齐全,适合对GAE感兴趣的人入门使用” 这个项目是一个教育实践项目,目标是构建一个基于...

    gae_in_pytorch-master_GAE_

    **图形自动编码器(GAE)在PyTorch中的实现** **一、GAE概述** 图形自动编码器(Graph Autoencoder, GAE)是一种应用于图数据的深度学习模型,它结合了自动编码器(Autoencoder)的思想与图神经网络(Graph Neural...

    GAE-Spring-Boot

    mvn install)$ git clone https://github.com/scratches/spring-boot-sample-gae$ cd spring-boot-sample-gae$ mvn gae:deploy也作为部署在 WTP 或常规 Tomcat 容器中的 WAR 运行。 main()应用程序(普通的 Spring ...

    GAE入门教程

    pass之GAE入门教程, 学习GAE

    GAE blog安装

    通常,Python博客应用可能会使用Django或Flask框架,而Java可能使用Spring Boot。 4. **源码管理**:在部署前,源代码应该被组织在一个版本控制系统中,如Git。这有助于跟踪更改,并确保团队合作时的一致性。 5. *...

Global site tag (gtag.js) - Google Analytics