JavaFX RIA企業應用簡要

banq發表於2009-06-29
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 class="indent">


下面是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 class="indent">



二. 伺服器端主要是配置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修改過]

相關文章