`

终于在Google App Engine/Java(GAE/J)上成功部署运行Flex+BlazeDS

阅读更多

http://www.iteye.com/topic/428326

 

话说近日Google App Engine终于开始了对Java的支持,让在下这个懒于学习Python的怂人,也有了一试GAE/J的可能。恰逢刚刚开始学习和接触Flex,因此有了将Flex+BlazeDS部署到GAE上的冲动,百度、谷歌了一下发现,尽管网上Flex+BlazeDS+Tomcat的配置方法已经泛滥成灾,但是在GAE/J上部署Flex特别是BlazeDS还没有动静。 
  没办法,只好自己动手,丰衣足食了。不罗嗦了,首先配置好GAE/J的开发环境,在下用的是标准的eclipse ganymede-SR2和GAE的eclipse plugin,接下来是下载安装Abobe官方提供的Flex Builder 3 Plug-in For eclipse,同时下载BlazeDS-bin待用。 
  首先建立Google的Web Application Project,然后手工往项目中添加Flex与BlazeDS需要的元素: 
  (1)将BlazeDS需要的jar文件(blazeds.war\WEB-INF\lib,共12个jar包)拷到工程的lib目录下,并添加到项目的Java Build Path下。 
  (2)然后要加入Flex BlazeDS需要的配置文件。在WEB-INF下新建一个名为flex的文件夹,将blazeds.war\WEB-INF\flex下的4个xml文件拷到该文件夹下。 
  (3)修改web.xml文件,加入Flex的配置。 

Java代码  收藏代码
  1. <context-param>  
  2.     <param-name>flex.class.path</param-name>  
  3.     <param-value>/WEB-INF/flex/hotfixes,/WEB-INF/flex/jars</param-value>  
  4. </context-param>  
  5.   
  6. <!-- Http Flex Session attribute and binding listener support -->  
  7. <listener>  
  8.     <listener-class>flex.messaging.HttpFlexSession</listener-class>  
  9. </listener>  
  10.   
  11. <!-- MessageBroker Servlet -->  
  12. <servlet>  
  13.     <servlet-name>MessageBrokerServlet</servlet-name>  
  14.     <servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>  
  15.     <init-param>  
  16.         <param-name>services.configuration.file</param-name>  
  17.         <param-value>/WEB-INF/flex/services-config.xml</param-value>  
  18.     </init-param>  
  19.     <init-param>  
  20.         <param-name>flex.write.path</param-name>  
  21.         <param-value>/WEB-INF/flex</param-value>  
  22.     </init-param>  
  23.     <load-on-startup>1</load-on-startup>  
  24. </servlet>  
  25.   
  26. <servlet-mapping>  
  27.     <servlet-name>MessageBrokerServlet</servlet-name>  
  28.     <url-pattern>/messagebroker/*</url-pattern>  
  29. </servlet-mapping>  

  作为一个几乎完全不懂Flex的怂人,在下在网上搜到了一个调用amf的简单例子,就马上Copy过来试试: 
引用

  1)新建一个java类:Hello.java 
Java代码  收藏代码
  1. package com;  
  2. public class Hello {  
  3.     public String hello(String name){  
  4.         System.out.println("flex调用我了,真好~~~~");  
  5.         return "hello "+name;  
  6.     }  
  7. }  

  2)为flex配置这个要调用的对象,修改WEB-INF/flex下remoting-config.xml 
加入: 
Xml代码  收藏代码
  1. <destination id="hello"> <properties> <source> com.Hello </source> </properties> </destination>  

  3)编写一个Flex程序 
Xml代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">  
  3.     <mx:Script>  
  4.         <![CDATA[ 
  5.             import mx.rpc.events.ResultEvent; 
  6.             function gg(evnet:ResultEvent):void{ 
  7.             var ff:String = evnet.result as String; 
  8.             ggg.text = ff; 
  9.             } 
  10.             function remotingSayHello():void{ 
  11.             var sname:String = nameInput.text; 
  12.             h.hello(sname); 
  13.             } 
  14.         ]]>  
  15.     </mx:Script>  
  16.     <mx:RemoteObject destination="hello" id="h" result="gg(event)" endpoint="/messagebroker/amf" >  
  17.     </mx:RemoteObject>  
  18.     <mx:TextArea id="ggg" x="109" y="122"/>  
  19.     <mx:Button label="say hello" click="remotingSayHello();" x="144" y="193"/>  
  20.     <mx:TextInput id="nameInput" x="111" y="63"/>  
  21.     <mx:Label text="name" x="47" y="75"/>  
  22. </mx:Application>  


  满心欢喜,马上在本地调试启动Google Web Application,出现以下错误: 
Java代码  收藏代码
  1. "Channel.Connect.Failed error NetConnection.Call.Failed:  
  2. HTTP: Status 500: url: 'http://localhost:8080/messagebroker/amf'"  

  控制台上打出log: 
Java代码  收藏代码
  1. WARNING: /messagebroker/amf  
  2. java.lang.RuntimeException: Session support is not enabled in appengine-web.xml.To enable sessions, put true in that file. Without it, getSession() is allowed, but manipulation of sessionattributes is not.  
  3. at com.google.apphosting.utils.jetty.StubSessionManager$StubSession.throwException(StubSessionManager.java:67)  

  好吧,这是第一个挫败,修改WEB-INF/appengine-web.xml,在<appengine-web-app>下加入这句: 
Xml代码  收藏代码
  1. <sessions-enabled>true</sessions-enabled>  

  重新启动调试,一切正常,amf调用成功。然后的任务就是将项目部署到Google App Engine上验证我们的应用了。由于众所周知的原因,GAE的JVM对不少Java类的访问都是有限制的,本地运行的成功并不能完全说明问题,还需要实地验证。 
  果不其然,马上就遇到了致命的错误: 
Java代码  收藏代码
  1. Warning:**** MessageBrokerServlet failed to initialize due to runtime exception:   Error: java.lang.NoClassDefFoundError: Could not initialize class com.google.apphosting.runtime.security.shared.stub.java.lang.management.ManagementFactory  
  2.     at flex.management.PlatformMBeanServerLocator.getMBeanServer(PlatformMBeanServerLocator.java:38)  
  3.     at flex.management.BaseControl.register(BaseControl.java:186)  
  4.     at flex.management.runtime.AdminConsoleDisplayRegistrar.<init>(AdminConsoleDisplayRegistrar.java:40)  
  5.     at flex.management.runtime.messaging.MessageBrokerControl.<init>(MessageBrokerControl.java:85)  
  6.     at flex.messaging.MessageBroker.<init>(MessageBroker.java:269)  
  7.     at flex.messaging.config.MessagingConfiguration.createBroker(MessagingConfiguration.java:105)  
  8.     at flex.messaging.MessageBrokerServlet.init(MessageBrokerServlet.java:112)  
  9.     at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:433)  
  10.     at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:256)  
  11.     at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)  
  12.     at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:612)  
  13.     at org.mortbay.jetty.servlet.Context.startContext(Context.java:139)  
  14.     at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1218)  
  15.     at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:500)  
  16.     at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448)  
  17.     at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)  
  18.     at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:190)  
  19.     at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:167)  
  20.     at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:127)  
  21.     at com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java:235)  
  22.     at com.google.apphosting.base.RuntimePb$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:4823)  
  23.     at com.google.apphosting.base.RuntimePb$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:4821)  
  24.     at com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest(BlockingApplicationHandler.java:24)  
  25.     at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:359)  
  26.     at com.google.net.rpc.impl.Server$2.run(Server.java:820)  
  27.     at com.google.tracing.LocalTraceSpanRunnable.run(LocalTraceSpanRunnable.java:56)  
  28.     at com.google.tracing.LocalTraceSpanBuilder.internalContinueSpan(LocalTraceSpanBuilder.java:516)  
  29.     at com.google.net.rpc.impl.Server.startRpc(Server.java:775)  
  30.     at com.google.net.rpc.impl.Server.processRequest(Server.java:348)  
  31. font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-
    分享到:
    评论

相关推荐

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

    标题中的“flex + spring + BlazeDS + google App JDO 实现一个CRUD”是指使用Adobe Flex作为前端开发工具,Spring框架作为后端服务层,BlazeDS作为数据推送中间件,以及Google App Engine的JDO(Java Data Objects...

    在Google App Engine上开发Flex应用(含简单示例源码)

    在Google App Engine上开发Flex应用是一项技术性强且充满挑战的任务,它涉及到多个技术栈的集成。Google App Engine(GAE)是一个基于云的平台,用于构建和运行Web应用程序,而Flex是一种用于创建富互联网应用程序...

    基于Google.App.Engine(GAE)的Java和GWT应用开发.pdf

    中文名: 基于Google App Engine(GAE)的Java和GWT应用开发 原名: Google App Engine Java and GWT Application Development 作者: Daniel Guermeur, Amy Unruh 资源格式: PDF 版本: 文字版 出版社: Packt ...

    appengine-java-sdk-1.8.7.zip

    Java版本的App Engine,即我们讨论的"appengine-java-sdk-1.8.7.zip",是Google专门为Java开发者提供的工具包,用于在GAE上开发应用。 **主要组件和功能** 1. **SDK(Software Development Kit)**: SDK包含了开发...

    Google App Engine for Java快速入门指南v1.2.0

    Google App Engine (GAE) 是一款由Google提供的平台即服务(PaaS),允许开发者在其基础设施上部署Web应用程序。通过使用Google App Engine,开发者能够构建出易于管理和维护的网络应用程序,这些应用程序能够根据...

    基于Google App Engine(GAE)的Java和GWT应用开发

    基于Google App Engine(GAE)的Java和GWT应用开发_Google App Engine Java and GWT Application Development Nov.2010

    云端代码Google App Engine编程指南 高清带书签

    在谈论《云端代码Google App Engine编程指南》之前,我们需要先了解一下Google App Engine(GAE)平台的背景知识。Google App Engine(简称GAE)是由Google公司提供的一个无服务器(serverless)的云计算平台,该...

    Programming Google App Engine with Java-2015年英文原版,0积分

    《Programming Google App Engine with Java》是一本详细介绍如何利用Google App Engine (GAE) 构建可扩展Java应用程序的专业书籍。该书由Dan Sanderson撰写,于2015年出版,是学习在Google基础设施上构建和运行Java...

    Google App Engine1.3.0 java sdk 第一部分

    Google App Engine(GAE)是谷歌提供的一项云计算服务,允许开发者在谷歌的基础设施上运行自己的应用程序。它为开发者提供了无服务器(Serverless)的环境,可以托管Web应用,并且支持多种编程语言,包括Java。在本...

    Google App Engine 入门教程

    标题中提到的“Google App Engine 入门教程”意味着本文将介绍如何开始使用GAE这一服务,而描述中提到了“eclipse插件”,说明教程将会涉及如何在Eclipse开发环境中使用Google App Engine插件来开发应用。...

    GAE(Google App Engine)空间申请使用教程及 GAE域名捆绑方法

    ### GAE(Google App Engine)空间申请使用教程及 GAE域名捆绑方法 #### GAE简介与功能概述 GAE(Google App Engine)是由谷歌提供的一个强大的云服务平台,它允许开发者构建并托管各种类型的应用程序。从实用性...

    google appengine sdk for java

    The App Engine SDK for Java includes a local development server as well as the tooling for deploying and managing your applications in App Engine. By downloading, you agree to be bound by the Terms ...

    WingIDE部署GAE(google app engine)

    **标题:“WingIDE部署GAE(Google App Engine)”** **内容概述:** 这篇文章将带你深入了解如何使用WingIDE这一强大的Python集成开发环境来部署应用程序到Google App Engine(GAE),一个由Google提供的云服务...

    Apress - Beginning Java Google App Engine(Java)(Dec 2009).pdf

    《Beginning Java Google App Engine》是一本全面介绍如何使用 Java 在 Google App Engine 上构建应用程序的书籍。它不仅涵盖了基础知识,还深入探讨了许多高级主题,如数据持久化、Spring 集成、Ajax 应用开发等。...

    Using Google App Engine

    Google App Engine(GAE)是Google推出的一款用于构建和托管Web应用的平台服务,它为开发者提供了丰富的工具和资源,使得开发者能够轻松地在Google的基础设施上运行应用程序。本文章将深入探讨GAE的核心概念、工作...

    应用在 Google App Engine 的一个Java 实例

    一个应该在Google App Engine 上的一个实例。用Java语言编写,里面包含源代码。致以Google App Engine是什么,请Google。 实例部署的地址是:http://hellojavaweb.appspot.com

    google app engine java ext 留言网站

    谷歌应用引擎(Google App Engine)是谷歌提供的一项云服务,允许开发者在谷歌的基础设施上运行自己的应用程序。它提供了服务器、存储、数据库和其他必要的服务,支持多种编程语言,其中包括Java。通过GAE,开发者...

    appengine-java-sdk-1.3.0 sdk java 第二部分

    利用免费的GAE(Google App Engine)建立强大的Blog(micolog)网站

    appengine-java-sdk-1.9.24

    Google App Engine (GAE) 是 Google 提供的一项平台即服务 (PaaS) 技术,允许开发者构建、部署和运行 web 应用程序。SDK(Software Development Kit)是用于开发 GAE 应用的关键工具集,它包含了编写、测试和调试...

Global site tag (gtag.js) - Google Analytics