JavaFX RIA企业应用简要

09-06-29 banq
JavaFX结合Hessian可以访问服务器端Web应用,JavaFX等RIA和Struts等是同一个层面的,都属于表现层,架构应该是这样:JavaFX + Hessian + Servlet + Spring/Seam/Jdon。

Hessian主要是一个Proxy开源项目,可以让远程富客户端RIA可以象调用本地Java代码一样调用,类似RMI,不过是基于Http的RMI。

这里关键是要自己做一个Servlet,也就是Hessian通讯的服务器端,Servlet是一个业务层服务的代理,Flamingo开源项目已经提供Seam/Spring的现成Servlet(http://exadel.com/web/portal/flamingo),而Jdon框架的Servlet需要参考Flamingo做一个,我会拓展到下一个版本发布。

首先看看步骤:

一. 客户端代码分两个,一个JavaFX 相当于MVC模式中的View,与B/S架构中的html类似;一个是Java客户端代码,相当于MVC的Controller,主要用来和服务器通讯调用(通过Hessian)。

下面是Java客户端控制器代码:

public class HelloworldClient {

    public static HelloworldClient CLIENT;
    
    private String _url;

    private HelloworldClient(String string) {
        _url = string;
    }
    private HelloService _service;

    public static void setServerUrl(String url) {
        CLIENT = new HelloworldClient(url);
    }

    private HelloService getService() {
        if (_service == null) {
            try {
                //通过Hessian调用服务器端服务
                HessianProxyFactory factory = new HessianProxyFactory();
                _service = (HelloService) factory.create(HelloService.class, _url);
            } catch (MalformedURLException ex) {
                System.out.println(ex);
            }

        }

        return _service;
    }

    //供JavaFX调用
    public String hello(String s) {
        return getService().hello(s);
    }
}
<p>

下面是JavaFX代码:

class Hello {
    attribute name:String;
    attribute str:String;
}

var helloModel = new Hello();

HelloworldClient.setServerUrl(ARGUMENTS:String);

Frame {
    width: 300
    height: 200
    title: "Exadel Flamingo Helloworld Spring Sample"
    centerOnScreen: true
    onClose: operation(){ System.exit(0);}
    content: GridPanel {
        border: EmptyBorder {
            top: 30
            left: 30
            bottom: 30
            right: 30
        }
        rows: 3
        columns: 1
        vgap: 10
        cells:
            [TextField {
            value: bind helloModel.name
        },
        Button {
            text: "Say Hello!"
            action: operation() {
                //调用Controller控制器HelloworldClient的hello方法 
                //将返回结果赋值给JavaFX的数据对象helloModel
                helloModel.str = HelloworldClient.CLIENT.hello(helloModel.name);
            }
        },
        Label {
            text: bind "Server says: {helloModel.str}"
        }]
    }
    visible: true
};
<p>

二. 服务器端主要是配置Servlet,在Web.xml中配置如下Servlet:

<servlet>

<servlet-name>Exadel Flamingo Hessian2Spring Remote Servlet</servlet-name>

<servlet-class>com.exadel.flamingo.service.spring.HessianToSpringServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>Exadel Flamingo Hessian2Spring Remote Servlet</servlet-name>

<url-pattern>/flamingo/hessian/*</url-pattern>

</servlet-mapping>

以上Servlet是针对Spring框架的,Flamingo 也有Seam框架,当然,Flamingo不会提供Jdon框架的Servlet,不过参考Spring的Servlet实现起来应该很方便,我会加入Jdon框架下一个版本。

这样,使用JavaFX我们就可以方便实现一个富客户端的新型多层C/S架构应用,JavaFX当然不会替代AJAX,但是拥有一些自己的独特特点,对于一些领域应用还是有市场的,加上简洁的类似JavaScrpt的表达方式,无缝和java结合,真的是Swing或Applet的替代物。

[该贴被banq于2009-06-29 10:02修改过]

[该贴被banq于2009-06-29 10:02修改过]

                   

1
banq
2009-06-30 09:51
Jdon的Remote Access已经整入JdonFramework 5.8中,在线演示:http://www.jdon.com:8080/jdonremote/

JavaFX + Hessian + Jdon 源码下载:

https://sourceforge.net/project/showfiles.php?group_id=126953&package_id=138962

开发简要步骤:

在web.xml配置Hessian Servlet Proxy如下:

<servlet>

<servlet-name>Hessian2Jdon</servlet-name>

<servlet-class>com.jdon.bussinessproxy.remote.HessianToJdonServlet

</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>Hessian2Jdon</servlet-name>

<url-pattern>/remote/*</url-pattern>

</servlet-mapping>

这样,当远程客户端调用http://localhost:8080//remote/helloService,那么这个Servlet 将在jdonframeowrk.xml查找服务名称为helloService的服务:

<app>

<services>

<pojoService name="helloService" class="sample.HelloServiceImpl"/>

</services>

</app>

远程客户端代码如下:

HessianProxyFactory factory = new HessianProxyFactory();

HelloService _service = (HelloService)

factory.create(HelloService.class, _url);

_service.hello(s);

客户端调用HelloService的hello方法时,将激活HelloServiceImpl.hello方法。Demo在线演示网址:http://www.jdon.com:8080/jdonremote/

[该贴被banq于2009-07-01 17:35修改过]

mikejava
2009-07-02 16:30
测试成功。 不知道 javafx 的前景如何?

banq
2009-07-07 08:52
JavaFX前景难料,细分市场还是有的,现在看,大家都喜欢JavaScript,然后结合U3D等进行二维三维表现,因为SUN毕竟不是媒体公司,而是语言公司,而JavaFX之类是面向媒体的语言,所以,除非SUN转型媒体,或者完全开放JavaFX,让民间专业媒体公司使用JavaFX,非常就没有出路。

猜你喜欢