Thursday Jul 02, 2009

JavaFX + Zembly


Zembly application development environment makes it easy to develop, customize and deploy your application. It provides APIs from various providers.

Here we will try to use Zembly services (outside of Zembly) from JavaFX. Zembly provides client libraries for both Java and JavaFX.

<script src="http://dl.javafx.com/1.2/dtfx.js"></script> <script src="/rakeshmenonp/resource/ZemblyIP/ZemblyIP.js"></script>

For Applet mode, click on above image

For standalone mode

Above sample is modified version of InterestingPhotos which now uses Zembly APis to search flickr's photo search based on tags. It uses flickr api - photos.search as shown below.

String result = Zembly.getInstance().callService(
    String.class,                 // Return Type
    "web.flickr.photos.search",   // Service Name
    new String[][] {              // Arguments
        {"machine_tag_mode""any"},
        {"tags""javafx" },
        {"per_page""65"},
        {"page""1"},
        {"format""json"}
    }
);

Class com.zembly.gateway.client.Zembly is available in Zembly Client Library implementation. Download zcl4j.zip here

Now we can easily write a wrapper for zcl in JavaFX using Asynchronous APIs. This will also demonstrate how to use these APIs to invoke Java apis in background thread from JavaFX.

Provide an implementation for javafx.async.RunnableFuture which will invoke the Zembly client APIs - ZemblyRunnableFuture. Next design an interface which bridge the Java and JavaFX - CallbackHandler.

Now we can implement the ZemblyRequest API which extends the JavaFX JavaTaskBase. This will provide an implementation similar to HttpRequest API.

ZemblyRequest can be used in application as shown below

var request = ZemblyRequest {

    // Zembly Service Name
    serviceName: "web.flickr.photos.search"

    // Arguments to be passed to service
    arguments: [
        Pair name: "machine_tag_mode", value: "any" },
        Pair name: "tags", value: "{encodedTags}" },
        Pair name: "per_page", value: "65" },
        Pair name: "page", value: "1" },
        Pair name: "format", value: "json" }     
    ]

    onStart: function() {
        println("ZemblyRequest - start");
    }

    onInput: function(is) {
        // Use PullParser to parse the stream
        is.close();
    }

    onDone: function() {
        println("ZemblyRequest - done");
    }

};
request.start();

Zembly key and secret must be generated and specified in zcl.properties file which must be kept in default package inside jar file. For more information on this, please refer to article - How to Call Data Service from Outside Zembly

I followed articles - Creating a Widget in 5 Minutes and Working with JavaFX so as to deploy above sample as Application

Try it out and let me know feedback

Source:

<script type="text/javascript">var dzone_url = "http://blogs.sun.com/rakeshmenonp/entry/javafx_zembly";</script> <script type="text/javascript">var dzone_style = '2';</script> <script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script>

About


The views expressed on this blog are my own and do not necessarily reflect that of my organization

Search

Categories
Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today