<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>gwt &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/gwt/</link>
	<description>Feed of posts on WordPress.com tagged "gwt"</description>
	<pubDate>Sun, 29 Nov 2009 18:34:28 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Forgive My Ignorance]]></title>
<link>http://research2009.wordpress.com/2009/11/29/forgive-my-ignorance/</link>
<pubDate>Sun, 29 Nov 2009 01:45:40 +0000</pubDate>
<dc:creator>Paolo</dc:creator>
<guid>http://research2009.wordpress.com/2009/11/29/forgive-my-ignorance/</guid>
<description><![CDATA[&#8230; but I just knew how to &#8220;array-ize&#8221; lists and such things. List&lt;List&lt;TextBo]]></description>
<content:encoded><![CDATA[&#8230; but I just knew how to &#8220;array-ize&#8221; lists and such things. List&lt;List&lt;TextBo]]></content:encoded>
</item>
<item>
<title><![CDATA[Issue 4: Spring MVC + GWT + JSP]]></title>
<link>http://research2009.wordpress.com/2009/11/28/issue-4-spring-mvc-gwt-jsp/</link>
<pubDate>Sat, 28 Nov 2009 18:02:27 +0000</pubDate>
<dc:creator>Jose  Asuncion</dc:creator>
<guid>http://research2009.wordpress.com/2009/11/28/issue-4-spring-mvc-gwt-jsp/</guid>
<description><![CDATA[From our wiki page, ISSUE: Project Form Specification 6 and 7 &#8211; which loads first jsp or javas]]></description>
<content:encoded><![CDATA[From our wiki page, ISSUE: Project Form Specification 6 and 7 &#8211; which loads first jsp or javas]]></content:encoded>
</item>
<item>
<title><![CDATA[GWT, iFrame e supporto evento onLoad su Internet Explorer]]></title>
<link>http://javabit.wordpress.com/2009/11/27/gwt-iframe-e-supporto-evento-onload-su-internet-explorer/</link>
<pubDate>Fri, 27 Nov 2009 11:21:35 +0000</pubDate>
<dc:creator>javabit</dc:creator>
<guid>http://javabit.wordpress.com/2009/11/27/gwt-iframe-e-supporto-evento-onload-su-internet-explorer/</guid>
<description><![CDATA[L&#8217;elemento &lt;iFrame/&gt; su Internet Explorer non supporta l&#8217;evento onLoad, che può es]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><img class="alignleft" title="Google Web Toolkit" src="http://code.google.com/intl/it-IT/webtoolkit/images/gwt-logo.png" alt="Google Web Toolkit" width="100" height="100" />L&#8217;elemento <em>&#60;iFrame/&#62;</em> su Internet Explorer non supporta l&#8217;evento onLoad, che può essere utile nel caso ci volessimo registrare su tale evento per fare una certa cosa al termine del caricamento del contenuto dell&#8217;iframe stesso (ad esempio fare sparire un layer con una scritta di &#8220;caricamento in corso&#8221;).</p>
<p>GWT prevede un widget che fa da wrapper proprio all&#8217;elemento <em>&#60;iFrame/&#62;</em> che è <em>com.google.gwt.user.client.ui.Frame</em>.</p>
<p>Per risolvere il problema ci appoggiamo ad un evento base che Internet Explorer invece gestisce sul <em>&#60;iFrame/&#62;</em>, e cioè &#8220;<em>readystatechange</em>&#8220;, che ci permette di intercettare anche l&#8217;evento di &#8220;documento caricato&#8221; (<em>readyState == &#8220;complete&#8221;</em>).</p>
<p>Per fare ciò è necessario usare JSNI (javascript native interface) di GWT, simile a JNI (java native interface) di java, che ci permette di scrivere del codice nativo (javascript in questo caso) che verrà interpretato direttamente dal browser.</p>
<p>Ovviamente il nostro widget deve supportare l&#8217;evento anche sugli altri browser, per garantire la portabilità della nostra applicazione. Per far ciò viene anche intercettato l&#8217;evento <em>BrowserEvent</em> già previsto nel widget base, che funziona sugli altri browser.</p>
<p>Il codice seguente ci fa vedere come scrivere il nostro widget <em>MyFrame</em> a partire da quello base GWT.</p>
<pre class="brush: java;">
package com.example.mywidgets;

import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.IFrameElement;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.Frame;
import com.example.myevents.IFrameLoadEvent;
import com.example.myevents.IFrameLoadHandler;

/**
 *
 * @author S.DiLoro
 * Estensione custom del Frame GWT (iFrame) che supporta la registrazione
 * all'evento di &#34;contenuto caricato&#34; all'interno dell'iFrame, con una gestione
 * particolare per InternetExplorer, che non supporta nativamente l'evento di &#34;onLoad&#34;
 */
public class MyFrame extends Frame {

    public MyFrame() {
        super();
        final IFrameElement iframe = IFrameElement.as(getElement());
        sinkEvents(Event.ONLOAD);

        // only for Internet Explorer
        registerOnReadyStateChange(iframe);
    }

    public MyFrame(String url) {
        super(url);
        final IFrameElement iframe = IFrameElement.as(getElement());
        sinkEvents(Event.ONLOAD);

        // only for Internet Explorer
        registerOnReadyStateChange(iframe);
    }

    @Override
    public void setUrl(String url) {
        super.setUrl(url);
    }

    @Override
    public void onBrowserEvent(Event event) {
        super.onBrowserEvent(event);
        if (event.getTypeInt() == Event.ONLOAD) {
            fireLoadEvent();
        }
    }

    void fireLoadEvent() {
        GWT.log(&#34;LoadEvent fired&#34;, null);
        fireEvent(
            new IFrameLoadEvent()
        );
    }

    // solo per Internet Explorer
    public native void registerOnReadyStateChange(IFrameElement iframe)/*-{
        var that = this;
        iframe.onreadystatechange = function(){
            if (document.readyState == &#34;complete&#34;){
                that.@com.example.mywidgets.MyFrame::fireLoadEvent()();
            }
        };
    }-*/;

    public HandlerRegistration addIFrameLoadHandler(IFrameLoadHandler handler) {
        return addHandler(handler, IFrameLoadEvent.TYPE);
    }
}
</pre>
<p>Come è possibile notare, per la gestione dell&#8217;evento ci si è appoggiati all&#8217;infrastruttura standard di GWT, che prevede la creazione di un Handler e un Event custom, con la possibilità di lanciare l&#8217;evento attraverso il metodo <em>fireEvent(event)</em> che viene ereditato da <em>com.google.gwt.user.client.ui.UIObject</em>, oggetto che sta nella catena di ereditarietà dell&#8217;oggetto <em>Frame</em>.</p>
<p>Sulla nostra classe aggiungiamo infine il metodo <em>addIFrameLoadHandler </em>che permette al client del nostro nuovo widget di registrare un handler sull&#8217;evento <em>IFrameLoadEvent</em>.</p>
<p>L&#8217;Handler e l&#8217;Event sono rispettivamente<em> </em>l&#8217;interfaccia<em> IFrameLoadHandler</em> e l&#8217;oggetto <em>IFrameLoadEvent</em>.</p>
<p>Di seguito il codice dell&#8217;interfaccia <em>IFrameLoadHandler</em>:</p>
<pre class="brush: java;">
package com.example.myevents;

import com.google.gwt.event.shared.EventHandler;

public interface IFrameLoadHandler extends EventHandler {

    void onIFrameLoad(IFrameLoadEvent event);
}
</pre>
<p>Il codice dell&#8217;<em>oggetto </em><em><em>IFrameLoadEvent</em></em>:</p>
<pre class="brush: java;">
package com.example.myevents;

import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.GwtEvent.Type;

/**
 *
 * @author S.DiLoro
 */
public class IFrameLoadEvent extends GwtEvent {

    public IFrameLoadEvent() {
        super();
    }

    public static final Type TYPE = new Type();

    @Override
    protected void dispatch(IFrameLoadHandler handler) {
        handler.onIFrameLoad(this);
    }

    @Override
    public com.google.gwt.event.shared.GwtEvent.Type getAssociatedType() {
        return TYPE;
    }
}
</pre>
<p>Per finire un esempio di codice che usa il nostro nuovo widget:</p>
<pre class="brush: java;">
MyFrame f = new MyFrame();
f.addIFrameLoadHandler(new IFrameLoadHandler() {
    @Override
        public void onIFrameLoad(IFrameLoadEvent event) {
        //di seguito possiamo mettere il nostro codice da esegure a fronte del verificarsi dell'evento
        }
    }
);
</pre>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Issue Number 2]]></title>
<link>http://research2009.wordpress.com/2009/11/27/issue-number-2/</link>
<pubDate>Fri, 27 Nov 2009 10:58:01 +0000</pubDate>
<dc:creator>Jose  Asuncion</dc:creator>
<guid>http://research2009.wordpress.com/2009/11/27/issue-number-2/</guid>
<description><![CDATA[Though we list down what we&#8217;re supposed to do in our wiki, these are all very general only lis]]></description>
<content:encoded><![CDATA[Though we list down what we&#8217;re supposed to do in our wiki, these are all very general only lis]]></content:encoded>
</item>
<item>
<title><![CDATA[ExtGWT: ListField с checkbox'ами]]></title>
<link>http://kpy3.wordpress.com/2009/11/27/extgwt-listfield-%d1%81-checkbox%d0%b0%d0%bc%d0%b8/</link>
<pubDate>Fri, 27 Nov 2009 09:19:27 +0000</pubDate>
<dc:creator>kpy3</dc:creator>
<guid>http://kpy3.wordpress.com/2009/11/27/extgwt-listfield-%d1%81-checkbox%d0%b0%d0%bc%d0%b8/</guid>
<description><![CDATA[У ExtGWT есть одна интересная компонента, позволяющая делать списки с множественным выбором элементо]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p style="text-align:justify;">У ExtGWT есть одна интересная компонента, позволяющая делать списки с множественным выбором элементов <a href="http://www.extjs.com/deploy/gxtdocs/com/extjs/gxt/ui/client/widget/form/ListField.html" target="_blank">ListField</a>. Она позволяет выбрать один или несколько элементов из списка с помощью комбинации клавиш Shift, Ctrl и левым кликом мышкой на элементе. То есть эмулирует поведение стандартного десктопного элемента.</p>
<p style="text-align:justify;">Однако веб-пользователям такое повединие может быть неочевидным и неудобным. Как сделать поведение ListField более простым, а отображение более наглядным?</p>
<p style="text-align:justify;"><!--more-->Один из вариантов это использование checkbox&#8217;a для визуализации каждого элемента списка с изменением поведения компонента.</p>
<p>Для начала определим два новых css-класса  для нового компонента</p>
<pre class="brush: css;">

.p-fieldlist-checker {
 width: 18px;
 height: 18px;
 background-position: 2px 2px;
 background-image:url(../images/default/grid/row-check-sprite.gif);
 background-repeat: no-repeat;
 background-color: transparent;
}

.p-fieldlist-checker-on {
 background-position: -23px 2px;
}
</pre>
<p style="text-align:justify;">Как видно из листинга, класс p-fieldlist-checker использует стандартное для GXT изображение чекбоксов, используемое для отобрадения таблиц. Второй класс помогает нам в выборе нужного нам изображения с помощью сдвига точки отсчёта внутри картинки.</p>
<p style="text-align:justify;">Теперь нам нужно добавить эти стили в ListField. Для этого создадим новый класс CheckboxListField. В новом классе определим новый шаблон отображения элементов, в котором будет место для checkbox&#8217;а.</p>
<pre class="brush: java;">
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.widget.form.ListField;
import com.google.gwt.user.client.Element;

public class CheckboxListField&#60;D extends ModelData&#62; extends ListField&#60;D&#62; {

 @Override
 protected void onRender(Element parent, int index) {
 getListView().setSelectionModel(new CheckboxListViewSelectionModel&#60;D&#62;());

 setTemplate(&#34;&#60;tpl for=\&#34;.\&#34;&#62;&#60;div class='x-combo-list-item'&#62;&#60;span class='p-fieldlist-checker'&#62; &#60;/span&#62;&#60;span&#62;{&#34; + getDisplayField()
 + &#34;}&#60;/span&#62;&#60;/div&#62;&#60;/tpl&#62;&#34;);

 super.onRender(parent, index);
 }
}
</pre>
<p style="text-align:justify;">Помимо нового шаблона мы будем использовать нашу собственную модель контроля за поведением и отображением элемента.</p>
<pre class="brush: java;">
import java.util.List;

import com.extjs.gxt.ui.client.Style.SelectionMode;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.event.ListViewEvent;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.ListViewSelectionModel;
import com.google.gwt.user.client.Element;

public class CheckboxListViewSelectionModel&#60;M extends ModelData&#62; extends
 ListViewSelectionModel&#60;M&#62; {

 @Override
 protected void handleMouseDown(ListViewEvent&#60;M&#62; e) {
 if (locked)
 return;
 M sel = listStore.getAt(e.getIndex());

 if (selectionMode == SelectionMode.SINGLE) {
 if (isSelected(sel)) {
 deselect(sel);
 } else if (!isSelected(sel)) {
 select(sel, false);
 }
 } else {
 if (e.isShiftKey() &#38;&#38; lastSelected != null) {
 int last = listStore.indexOf(lastSelected);
 int index = e.getIndex();
 int a = (last &#62; index) ? index : last;
 int b = (last &#60; index) ? index : last;
 select(a, b, e.isControlKey());
 lastSelected = listStore.getAt(last);
 } else if (isSelected(sel)) {
 deselect(sel);
 } else {
 select(sel, true);
 }
 }
 }

 @Override
 protected void onSelectChange(M model, boolean select) {
 List&#60;Element&#62; all = listView.getElements();
 if (listView.isRendered() &#38;&#38; all.size() &#62; 0) {
 ListStore&#60;M&#62; store = listView.getStore();
 int index = store.indexOf(model);
 if (index != -1 &#38;&#38; index &#60; all.size()) {
 Element elem = all.get(index);
 if (select) {
 listView.fly((Element) elem.getChildNodes().getItem(0))
 .addStyleName(&#34;p-fieldlist-checker-on&#34;);
 } else {
 listView.fly((Element) elem.getChildNodes().getItem(0))
 .removeStyleName(&#34;p-fieldlist-checker-on&#34;);
 }
 listView.fly(elem).removeStyleName(listView.getOverStyle());
 }
 }
 }

}
</pre>
<p style="text-align:justify;">Как видно из листинга, в нашем новом классе мы переопределяем два метода:</p>
<ol>
<li style="text-align:justify;"> handleMouseDown(ListViewEvent&#60;M&#62; e) &#8211; отвечает за изменение поведения элемента. Здесь определяем нужное нам поведение;</li>
<li style="text-align:justify;">onSelectChange(M model, boolean select) &#8211; отвечает за изменение отображения элемента. Здесь мы определяем какие картинки для каких элементов списка будут отабражаться.</li>
</ol>
<p style="text-align:justify;">Далее, в коде просто пишем:</p>
<pre class="brush: java;">
...
CheckboxListField&#60;BeanModel&#62; list = new CheckboxListField&#60;BeanModel&#62;();
...
</pre>
<p style="text-align:justify;">и получаем ListBox с элементами, перед которыми выводится checkbox.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Missing libstdc++.so.5 in Ubuntu 9.10 (Karmic)]]></title>
<link>http://bootstrapping.wordpress.com/2009/11/25/missing-libstdc-so-5-in-ubuntu-9-10-karmic/</link>
<pubDate>Wed, 25 Nov 2009 07:48:08 +0000</pubDate>
<dc:creator>bootstrapping</dc:creator>
<guid>http://bootstrapping.wordpress.com/2009/11/25/missing-libstdc-so-5-in-ubuntu-9-10-karmic/</guid>
<description><![CDATA[I you end up seeing following error or something similar while running a non-ubuntu app: error while]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I you end up seeing following error or something similar while running a non-ubuntu app:</p>
<p><strong>error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory</strong></p>
<p>Well the reason is ﻿﻿libst﻿dc++.so.5 was removed in Ubuntu Karmic. Fear no follow the following simple steps to get your old application running again.</p>
<pre class="brush: bash;">
cd /tmp

wget http://security.ubuntu.com/ubuntu/pool/universe/i/ia32-libs/ia32-libs_2.7ubuntu6.1_amd64.deb

dpkg-deb -x ia32-libs_2.7ubuntu6.1_amd64.deb ia32-libs

sudo cp ia32-libs/usr/lib32/libstdc++.so.5.0.7 /usr/lib32/

cd /usr/lib32

sudo ln -s libstdc++.so.5.0.7 libstdc++.so.5
</pre>
<p>~TH</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[ExtGWT: Как проверить корректность ввода пароля?]]></title>
<link>http://kpy3.wordpress.com/2009/11/24/extgwt-%d0%ba%d0%b0%d0%ba-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%b8%d1%82%d1%8c-%d0%ba%d0%be%d1%80%d1%80%d0%b5%d0%ba%d1%82%d0%bd%d0%be%d1%81%d1%82%d1%8c-%d0%b2%d0%b2%d0%be%d0%b4%d0%b0-%d0%bf%d0%b0/</link>
<pubDate>Tue, 24 Nov 2009 08:36:54 +0000</pubDate>
<dc:creator>kpy3</dc:creator>
<guid>http://kpy3.wordpress.com/2009/11/24/extgwt-%d0%ba%d0%b0%d0%ba-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%b8%d1%82%d1%8c-%d0%ba%d0%be%d1%80%d1%80%d0%b5%d0%ba%d1%82%d0%bd%d0%be%d1%81%d1%82%d1%8c-%d0%b2%d0%b2%d0%be%d0%b4%d0%b0-%d0%bf%d0%b0/</guid>
<description><![CDATA[При разработке большого проекта для веба порой встаёт задача ввода и проверки данных о пользователе,]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p style="text-align:justify;">При разработке большого проекта для веба порой встаёт задача ввода и проверки данных о пользователе, включая его логин и пароль.</p>
<p><!--more-->Пароль, как правило, вводится дважды &#8211; таков традиционный способ его проверки на корректность ввода. Как это сделать в ExtGWT (GXT)?</p>
<p>Ответ прост: использовать специальный <a href="http://www.extjs.com/deploy/gxtdocs/com/extjs/gxt/ui/client/widget/form/Validator.html" target="_blank">Validator</a>.</p>
<p>Например, он может выглядеть так</p>
<pre class="brush: java;">

import com.extjs.gxt.ui.client.widget.form.Field;
import com.extjs.gxt.ui.client.widget.form.Validator;

public class MatchValidator implements Validator {

private Field&#60;?&#62; matchField;
private String message;

public MatchValidator(Field&#60;?&#62; matchField, String message) {
if (matchField == null)
throw new IllegalArgumentException(&#34;Match field cannot be null&#34;);

this.matchField = matchField;
this.message = message;
}

@Override
public String validate(Field&#60;?&#62; field, String value) {
if (matchField.getValue().equals(field.getValue()))
return null;
else
return message;
}

}
</pre>
<p>далее в коде пишем</p>
<pre class="brush: java;">
...
TextField&#60;String&#62; password = new TextField&#60;String&#62;();
password.setPassword(true);
password.setName(&#34;password&#34;);
password.setFieldLabel(&#34;Password&#34;);
password.setEmptyText(&#34;Type user password ...&#34;);

TextField&#60;String&#62; verify = new TextField&#60;String&#62;();
verify.setPassword(true);

verify.setValidator(new MatchValidator(password, &#34;Passwords must be equal!!!&#34;));

verify.setFieldLabel(&#34;Verify password&#34;);
verify.setEmptyText(&#34;Retype user password...&#34;);
...
</pre>
<p>и получаем желаемое.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Rubrics using Google Spreadsheets]]></title>
<link>http://research2009.wordpress.com/2009/11/24/rubrics-using-google-spreadsheets/</link>
<pubDate>Tue, 24 Nov 2009 06:27:43 +0000</pubDate>
<dc:creator>falloutkee</dc:creator>
<guid>http://research2009.wordpress.com/2009/11/24/rubrics-using-google-spreadsheets/</guid>
<description><![CDATA[We almost gave up on using Google Spreadsheets for the rubric creation&#8211;until our last project ]]></description>
<content:encoded><![CDATA[We almost gave up on using Google Spreadsheets for the rubric creation&#8211;until our last project ]]></content:encoded>
</item>
<item>
<title><![CDATA[Running Google Web Application Project on your tomcat server]]></title>
<link>http://mxro.wordpress.com/2009/11/22/running-google-web-application-project-on-your-tomcat-server/</link>
<pubDate>Sun, 22 Nov 2009 02:31:37 +0000</pubDate>
<dc:creator>mxro</dc:creator>
<guid>http://mxro.wordpress.com/2009/11/22/running-google-web-application-project-on-your-tomcat-server/</guid>
<description><![CDATA[I was wondering how I could run a Google Web Application Project created with the wizard in eclipse ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I was wondering how I could run a Google Web Application Project created with the wizard in eclipse (part of the google eclipse plugin) on my own tomcat server.</p>
<p>Well, its fairly simple.</p>
<p>First it should be noted that when creating the project with the wizard you should deselect the google app engine sdk. You can still run your projects on google app engine, so you just make sure that you do not use any app engine specific functionality (what I would not recommend anyway to keep your projects portable).</p>
<p>If this prerequisite is given, you can you can just select the project you have created (the root folder) and click Google&#8217;s red box GWT button &#8220;GWT compile project&#8221;.</p>
<p>Then you can go to the project folder in the eclipse workspace. One of the folders created is &#8220;war&#8221;. Create a new folder in your tomcat webapps folder and name it according to your project name eg &#8220;myproject&#8221;. Now you can copy all the contents from &#8220;war&#8221; to &#8220;myproject&#8221;.</p>
<p>Start tomcat and volia the application should be running.</p>
<p>(I am not too sure whether there might be issues in more complex projects given that google uses jetty for the debug mode that can be strated directly from eclipse)</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GWTScript]]></title>
<link>http://research2009.wordpress.com/2009/11/21/gwtscript/</link>
<pubDate>Sat, 21 Nov 2009 15:21:06 +0000</pubDate>
<dc:creator>Paolo</dc:creator>
<guid>http://research2009.wordpress.com/2009/11/21/gwtscript/</guid>
<description><![CDATA[So the other day, I got a first glimpse of coding using the Google Web Toolkit (GWT) myself. It was ]]></description>
<content:encoded><![CDATA[So the other day, I got a first glimpse of coding using the Google Web Toolkit (GWT) myself. It was ]]></content:encoded>
</item>
<item>
<title><![CDATA[Solving a GWT deferred binding mystery]]></title>
<link>http://reminiscential.wordpress.com/2009/11/18/solving-a-gwt-deferred-binding-mystery/</link>
<pubDate>Wed, 18 Nov 2009 18:41:14 +0000</pubDate>
<dc:creator>jchiu1106</dc:creator>
<guid>http://reminiscential.wordpress.com/2009/11/18/solving-a-gwt-deferred-binding-mystery/</guid>
<description><![CDATA[This morning at work, I was running our GWT application with some deferred binding logic in it, and ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>This morning at work, I was running our GWT application with some deferred binding logic in it, and all of a sudden I got this ridiculous message:<br />
<code><br />
      [ERROR] Class 'mycompany.rebind.HistoryResourceGenerator' must derive from 'com.google.gwt.core.ext.Generator'<br />
[ERROR] Failure while parsing XML<br />
com.google.gwt.core.ext.UnableToCompleteException: (see previous log entries)<br />
	at com.google.gwt.dev.cfg.ModuleDefSchema$ObjAttrCvt.convertToArg(ModuleDefSchema.java:729)<br />
	at com.google.gwt.dev.util.xml.HandlerArgs.convertToArg(HandlerArgs.java:64)<br />
	at com.google.gwt.dev.util.xml.HandlerMethod.invokeBegin(HandlerMethod.java:214)<br />
	at com.google.gwt.dev.util.xml.ReflectiveParser$Impl.startElement(ReflectiveParser.java:257)<br />
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501)<br />
</code></p>
<p>It was running fine yesterday when I left work, and now it tells me that my generator isn&#8217;t a subclass of the GWT Generator??? Quickly pulled the source, and it&#8217;s as clear as day that my generator is properly written. Then what gives?</p>
<p>Searching for an explanation, I pulled the GWT&#8217;s source code, and opened com.google.gwt.dev.cfg.ModuleDefSchema and here&#8217;s the method in question:</p>
<pre class="brush: java;">
    public Object convertToArg(Schema schema, int lineNumber, String elemName,
        String attrName, String attrValue) throws UnableToCompleteException {

      Object found = singletonsByName.get(attrValue);
      if (found != null) {
        // Found in the cache.
        //
        return found;
      }

      Class&#60;?&#62; foundClass = null;
      try {
        // Load the class.
        //
        ClassLoader cl = Thread.currentThread().getContextClassLoader();
        foundClass = cl.loadClass(attrValue);
        Class&#60;? extends T&#62; clazz = foundClass.asSubclass(fReqdSuperclass);

        T object = clazz.newInstance();
        singletonsByName.put(attrValue, object);
        return object;
      } catch (ClassCastException e) {
        Messages.INVALID_CLASS_DERIVATION.log(logger, foundClass,
            fReqdSuperclass, null);
        throw new UnableToCompleteException();
      } catch (ClassNotFoundException e) {
        Messages.UNABLE_TO_LOAD_CLASS.log(logger, attrValue, e);
        throw new UnableToCompleteException();
      } catch (InstantiationException e) {
        Messages.UNABLE_TO_CREATE_OBJECT.log(logger, attrValue, e);
        throw new UnableToCompleteException();
      } catch (IllegalAccessException e) {
        Messages.UNABLE_TO_CREATE_OBJECT.log(logger, attrValue, e);
        throw new UnableToCompleteException();
      }
    }
  }
</pre>
<p>Because the error message was from Messages.INVALID_CLASS_DERIVATION, I put a breakpoint on line 22:<br />
<code><br />
        Messages.INVALID_CLASS_DERIVATION.log(logger, foundClass, fReqdSuperclass, null);<br />
</code><br />
and started my app in debug mode.  The breakpoint hits, and I noticed that the exception object is reporting ClassCastException from JSONNull to JSONObject. I quickly clicked: The error is from the class that fetches some resource over the net and plugged in to the generator. Following this lead, I found that the server resource the class was fetching wasn&#8217;t available any more, which caused the fetcher class to fail, and consequently, the ClassCastException is propagated to the generator and eventually ModuleDefSchema. </p>
<p>The mysterious error message, however, has nothing to do with the real problem. I spent a lot of time thinking that my Generator is wrong, because that&#8217;s what the compiler says, but in fact, it&#8217;s not. <strong>I think the confusion can be avoided if the GWT compiler can log the actual exception object, instead of interpreting the exception for the user.</strong> That&#8217;s what they&#8217;re doing in the try/catch clause in the method shown above: the exception object &#8220;e&#8221; is not used in the case of ClassCastException&#8230;</p>
<p>Well, the take-home message is: don&#8217;t always trust the GWT compiler message. Also, adding log more logging to your generator classes that can be indicative to where the actual problem is.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GWT]]></title>
<link>http://geekgirlnotes.wordpress.com/2009/11/16/gwt/</link>
<pubDate>Mon, 16 Nov 2009 00:23:32 +0000</pubDate>
<dc:creator>zgirl07</dc:creator>
<guid>http://geekgirlnotes.wordpress.com/2009/11/16/gwt/</guid>
<description><![CDATA[&nbsp;       I finally got my score for my GWT (Graduation Writing Test). I have to say that I am ve]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>&#160;</p>
<p>      I finally got my score for my GWT (Graduation Writing Test). I have to say that I am very pleased and very surprised. If whoever scored my essay would only see my chats they would surely fail me. I got 11/12 and that in my book is a WOW. I really have no idea how I pulled that off, it was really early in the morning, it was cold, I had a runny nose and I had a really bad headache.</p>
<p>      I do have to say that most of the congratulations should go to the EOP&#8217;s GWT Workshop that made me sit through five straight hours on a Saturday morning going through what the test would be like. I learned strategies and words, I wrote a practice essay too. Thank you EOP, they really made a difference.</p>
<p>      My second thanks go to my commentators on my other blog, the strangers that inspired me to write. For them I practiced my writing. Thank you strangers!</p>
<p>      For now I&#8217;ll go celebrate and hop back on to my Misspellings Train.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Ways In Which Google Wave Is Going To Change Your Business, Career And Life.]]></title>
<link>http://accid3ntallyonpurpos3.wordpress.com/2009/11/15/ways-in-which-google-wave-is-going-to-change-your-business-career-and-life/</link>
<pubDate>Sun, 15 Nov 2009 11:40:56 +0000</pubDate>
<dc:creator>weirdo</dc:creator>
<guid>http://accid3ntallyonpurpos3.wordpress.com/2009/11/15/ways-in-which-google-wave-is-going-to-change-your-business-career-and-life/</guid>
<description><![CDATA[Google recently announced their most ambitious project to date called Google Wave. According to Goog]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Google recently announced their most ambitious project to date called Google Wave. According to Google, Wave is “what email would look like if it was invented today.”</p>
<address>
<h3>What’s the big deal?</h3>
<p>This is all predicated on mass adoption of the technology. If no-one uses it, then obviously it won’t have a world-changing affect. However, I strongly believe Wave is going to achieve mass adoption for these reasons:</p>
<ol>
<li>Google has the world-wide audience necessary.</li>
<li>Google has the cash in order to market Wave and promote its benefits.</li>
<li>There is a huge financial benefit to working more efficiently. People who use Wave will be able to work faster, thus leaving behind those that stick to good-ol-fashion SMTP email.</li>
<li>Wave is open-source (more on that below). If you want, you’ll be able to run Wave on your internal corporate network, without ever sending a single byte of data to Google.</li>
<li>You can run it on the cloud, thus reducing in-house IT costs.</li>
</ol>
<p>Now I’d like to explain why I think Wave is going to have a life-changing affect on you and your business:</p>
<p><img class="aligncenter size-thumbnail wp-image-185" title="google_wave_logo" src="http://accid3ntallyonpurpos3.wordpress.com/files/2009/11/google_wave_logo.jpg?w=150" alt="google_wave_logo" width="150" height="120" /></p>
<h3>1. Extensions</h3>
<p>Google is making it easy to augment the power of Wave by writing <a href="http://code.google.com/apis/wave/extensions/" target="_blank">Wave Extensions</a>. These are similar to Firefox Add-ons and they fall into two areas: Robots and Gadgets. Here’s an explanation from the Extensions site:</p>
<ol>
<li>A <strong>robot</strong> is an automated participant on a wave. Robots are applications which run in the “cloud” and can modify state within the wave itself. A robot can read the contents of a wave in which it participates, modify the wave’s contents, add or remove participants, and create new blips and new waves. Robots perform actions in response to events. For example, a robot might publish the contents of a wave to a public blog site and update the wave with user comments.</li>
</ol>
<address> 2. A <strong>gadget</strong> is a small application that runs within a client. The gadget is owned by the wave, and all participants on a wave share the same gadget state. The only events a gadget responds to are changes to its own state object, and changes in the wave’s participants (for example, participants joining or leaving the wave). The gadget has no influence over the wave itself. Wave gadgets typically aren’t full blown applications, but small add-ons that improve certain types of conversations.</address>
<address>
<h3>2. Embedding APIs</h3>
<p>Google has created a huge API to Wave, but one of the really interesting parts is the ability to <a href="http://code.google.com/apis/wave/embed/guide.html" target="_blank">embed a Wave</a>into any web page. A great example of how this could be used with blogging. You can create a Wave and then publish it to your blog. Then whenever someone comments on the blog post, it appears as a reply to you Wave in your Wave client - <strong>no need to visit the site</strong>.</p>
<p>That’s the kicker, embedded Waves remove the need to physically visit a site in order to interact with it. This is a fundamental, and very exciting, change to the way we currently interact with blogs and content.</p>
<h3>3. Collaboration</h3>
<p>The separation between documents and emails will be completely removed with Waves. This is because Waves can be edited by more than one person. A great example would be taking notes for a meeting. Here’s how it might work:</p>
<ol>
<li>I create a Wave titled “Notes from website branding project”</li>
<li>I add the other people in the meeting as participants in the Wave</li>
<li>Everyone who is a participant in the Wave can take notes simultaneously</li>
<li>After the meeting, everyone’s got a copy of the notes</li>
</ol>
<p>An added benefit is that people can “chat” during the meeting, by creating private replies right inside the Wave. The writer can choose whether or not to make this chat visible to other participants.</p>
<h3>4. Open Source</h3>
<p>Google doesn’t intend to ‘own’ Wave. They have open-sourced the technology and created the <a href="http://www.waveprotocol.org/" target="_blank">Wave Federation Protocol</a>. A brief explanation from Google is:</p>
<blockquote><p>[Wave Federation Protocol is] the underlying network protocol for sharing waves between wave providers.</p>
<p>Yes, that’sÂ <em>between</em> wave providers: anyone can build a wave server and interoperate, much like anyone can run their own SMTP server. The wave protocol is open to contributions by the broader community with the goal to continue to improve how we share information, together.</p>
<p>To help potential wave providers get started, our plan is to release an open source, production-quality, reference implementation of the Google Wave client and server, as well as provide an open federation endpoint by the time users start getting access.</p>
<p>This means you can either use Wave hosted on Google’s infrastructure, or you can have it hosted on your own server, without ever interracting or sharing data with Google.</p></blockquote>
<p>This makes it completely different from Microsoft Exchange Server, and even Google Apps (which isn’t available to host on your own infrastructure).</p>
<h3>5. Google Web Toolkit (GWT)</h3>
<p>Wave is written entirely in <a href="http://code.google.com/webtoolkit/" target="_blank">Google Web Toolkit</a>. GWT allows you to write HTML 5 web apps in Java, which are then cross-compiled into optimized JavaScript. If you want to learn more, this <a href="http://www.youtube.com/watch?v=Ezm7MJeMa9M" target="_blank">video explanation</a> is very helpful.</p>
<p>I’ve always been wary of auto-generated code, but I think this might be an exception to the rule (providing your ensure the HTML is accessible and standards-compliant). All you have to do is look at the Wave demo in order to realize GWT is <em>seriously</em> powerful.</p>
<p>What does this mean for you? I means if you’re a web developer, you need to have a serious look at GWT and the potential benefits it has to offer. Programming in Java gives you all the traditional benefits of breakpoints and being able to step through your code.</p>
<h3>6. Playback</h3>
<p>The increased collaboration that possible with Wave might actually make it confusing for someone to be added to a Wave after a lot of editing and replies have been made. Enter ‘Wave Playback. The best way to explain it is by <a href="http://www.youtube.com/watch?v=v_UyVmITiYQ#t=13m00s" target="_blank">jumping to minute 13:00</a> on the Wave introduction video.</p>
<p>This feature allows you to step through the changes to a Wave as they happened over time.</p>
</address></address>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GWT architecture best-practices]]></title>
<link>http://satyaq.wordpress.com/2009/11/15/gwt-architecture-best-practices/</link>
<pubDate>Sun, 15 Nov 2009 10:59:53 +0000</pubDate>
<dc:creator>satyaq</dc:creator>
<guid>http://satyaq.wordpress.com/2009/11/15/gwt-architecture-best-practices/</guid>
<description><![CDATA[Its an excellent video that lists down many interesting things: A must watch for UI archs. Just to s]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><span style='text-align:center; display: block;'><object width='425' height='350'><param name='movie' value='http://www.youtube.com/v/PDuhR18-EdM&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;hd=0' /><param name='allowfullscreen' value='true' /><param name='wmode' value='transparent' /><embed src='http://www.youtube.com/v/PDuhR18-EdM&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;hd=0' type='application/x-shockwave-flash' allowfullscreen='true' width='425' height='350' wmode='transparent'></embed></object></span></p>
<p>Its an excellent video that lists down many interesting things: <strong>A must watch </strong>for UI archs.</p>
<p>Just to summarize few of the architecture points discussed in this (and my comments)<br />
1. MVP pattern usage in GWT. (using gwt-presenter library probably) <a href="http://martinfowler.com/eaaDev/uiArchs.html">http://martinfowler.com/eaaDev/uiArchs.html</a><br />
2. Dependency injection on client side (Google-gin (client-side) and Google-Guice(server side))<br />
3. Event Bus (following event collaboration by martin fowler <a href="http://martinfowler.com/eaaDev/EventCollaboration.html">http://martinfowler.com/eaaDev/EventCollaboration.html</a>)<br />
4. Command Pattern (probably using gwt-dispatch)</p>
<p>Hope it helps.. Please share your understandings as well.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Slides: Building SOFEA Applications with GWT and Grails by Matt Raible]]></title>
<link>http://denverjug.wordpress.com/2009/11/13/slides-building-sofea-applications-with-gwt-and-grails-by-matt-raible/</link>
<pubDate>Fri, 13 Nov 2009 02:24:24 +0000</pubDate>
<dc:creator>demian0311</dc:creator>
<guid>http://denverjug.wordpress.com/2009/11/13/slides-building-sofea-applications-with-gwt-and-grails-by-matt-raible/</guid>
<description><![CDATA[Here are the slides from the talk Matt Raible gave this week.]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Here are the slides from the talk <a href="http://raibledesigns.com/">Matt Raible</a> gave this week.</p>
<p><!-- SlideShare error: doc is missing or has illegal characters /[^-_a-zA-Z0-9]/ --></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Why GWT?]]></title>
<link>http://supplychaintechnology.wordpress.com/2009/11/11/why-gwt/</link>
<pubDate>Thu, 12 Nov 2009 05:08:29 +0000</pubDate>
<dc:creator>Jim</dc:creator>
<guid>http://supplychaintechnology.wordpress.com/2009/11/11/why-gwt/</guid>
<description><![CDATA[I&#8217;ve recently finished up a series of internal presentations focusing on learning GWT.  We hav]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><img class="alignright size-thumbnail wp-image-405" title="mail-hosted" src="http://supplychaintechnology.wordpress.com/files/2009/11/mail-hosted.jpg?w=150" alt="mail-hosted" width="150" height="117" />I&#8217;ve recently finished up a series of internal presentations focusing on learning GWT.  We have selected GWT for our UI toolkit and are building our own framework on top of it, using as many mature third party libraries as we can.  We have also already deployed products which use the Google Web Toolkit.</p>
<p>During the presentations one of the most common questions &#8212; if not THE most common question &#8212; was &#8220;Why GWT?&#8221;.  I will assume for the moment that it wasn&#8217;t just our JavaScript gurus asking the question<!--more-->, although there was a fair amount of that as well.</p>
<p>The Google Web Toolkit provides a wealth of tools and support that will allow us to maintain our user interface code long into the future.  Being able to code our UI in Java &#8212; our primary development language &#8212; means that our developers don&#8217;t need to shift gears to understand complex (or even simple) JavaScript when working on the interface.</p>
<p>Complex user interactions are worth additional scrutiny here: we currently use Ext JS for some of our Ajax-enabled products.  When using Ext JS &#8212; and I&#8217;d argue this is true of any JS library &#8212; it takes some mental effort to shift from server-side Java controllers and models to their JavaScript representations.  While there are tools to aid this, there&#8217;s no substitute for sticking with Java code across all application layers, which GWT allows.</p>
<p>Moreover, non-standard javascript will be a non-issue, and we can use existing tools like FindBugs and PMD to check for issues in the GWT code.  Our IDEs have very mature Java support as well.</p>
<p>Years down the road, a new generation of developers here at GT Nexus should be able to pick up the GWT code and use whatever new tools are available to learn our UI code and patterns and make whatever changes need to be made.  It would take more effort and time to decipher and maintain JavaScript code which performs the same function.</p>
<p>There are other reasons to use GWT:  the optimizing compiler, for instance, or even having the weight of Google behind the toolkit.  For me the key to using GWT was the time savings we&#8217;ll get by staying with Java from our data access layer through to the user interface.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Integração Spring - GWT]]></title>
<link>http://flaviowbrasil.wordpress.com/2009/11/11/integracao-spring-gwt/</link>
<pubDate>Wed, 11 Nov 2009 22:34:30 +0000</pubDate>
<dc:creator>Flávio Brasil</dc:creator>
<guid>http://flaviowbrasil.wordpress.com/2009/11/11/integracao-spring-gwt/</guid>
<description><![CDATA[Estou desenvolvendo um projeto utiliando Spring e GWT. Pesquisei algumas alternativas para integrar ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Estou desenvolvendo um projeto utiliando Spring e GWT. Pesquisei algumas alternativas para integrar os dois e a melhor solução que encontrei foi a postada <a href="http://blog.digitalascent.com/2007/11/gwt-rpc-with-spring-2x_12.html" target="_blank">neste</a> blog.<br />
Porém, ainda achei esta abordagem muito complexa e procurei uma solução mais simples.  Implementei o SpringRemoteServiceServlet, utilizando um código parecido com o que encontrei <a href="http://stuffthathappens.com/blog/2009/09/14/guice-with-gwt/" target="_blank">neste</a> blog para integração entre o GWT e o Guice.</p>
<pre class="brush: java; collapse: true; light: false; toolbar: true;">

package br.com.fwb.base.server.spring;

import org.springframework.beans.factory.*;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.google.gwt.user.client.rpc.*;
import com.google.gwt.user.server.rpc.*;

public class SpringRemoteServiceServlet extends RemoteServiceServlet {

	private static final long serialVersionUID = 122383530332380586L;

	@Override
	public String processCall(String payload) throws SerializationException {
		try {
			RPCRequest rpcRequest = RPC.decodeRequest(payload);

			RemoteService service = getServiceInstance(rpcRequest.getMethod()
					.getDeclaringClass());

			return RPC.invokeAndEncodeResponse(service, rpcRequest.getMethod(),
					rpcRequest.getParameters(), rpcRequest
							.getSerializationPolicy());

		} catch (IncompatibleRemoteServiceException ex) {
			return RPC.encodeResponseForFailure(null, ex);
		}
	}

	private RemoteService getServiceInstance(Class&#60;?&#62; declaringClass) {
		WebApplicationContext wac = WebApplicationContextUtils
				.getRequiredWebApplicationContext(getServletContext());
		AutowireCapableBeanFactory beanFactory = wac
				.getAutowireCapableBeanFactory();
		return (RemoteService) BeanFactoryUtils.beanOfType(
				(ListableBeanFactory) beanFactory, declaringClass);
	}

}
</pre>
<p>Registre o seguinte no web.xml:</p>
<pre class="brush: xml; collapse: true; light: false; toolbar: true;">

	&#60;listener&#62;
		&#60;listener-class&#62;
			org.springframework.web.context.ContextLoaderListener
		&#60;/listener-class&#62;
	&#60;/listener&#62;

	&#60;servlet&#62;
		&#60;servlet-name&#62;springRemoteServiceServlet&#60;/servlet-name&#62;
		&#60;servlet-class&#62;br.com.fwb.base.server.spring.SpringRemoteServiceServlet&#60;/servlet-class&#62;
		&#60;load-on-startup&#62;1&#60;/load-on-startup&#62;
	&#60;/servlet&#62;

	&#60;servlet-mapping&#62;
		&#60;servlet-name&#62;springRemoteServiceServlet&#60;/servlet-name&#62;
		&#60;url-pattern&#62;*.rpc&#60;/url-pattern&#62;
	&#60;/servlet-mapping&#62;
</pre>
<p>Anote a interface do servico que será chamado com @RemoteServiceRelativePath apontando para qualquer endereco que termine com .rpc:</p>
<pre class="brush: java; collapse: true; light: false; toolbar: true;">

@RemoteServiceRelativePath(&#34;../GWT.rpc&#34;)
public interface TesteService extends RemoteService {

	void teste(String s);

}
</pre>
<p>Implemente a interface remota do GWT com um bean do Spring:</p>
<pre class="brush: java; collapse: true; light: false; toolbar: true;">

@Service
public class TesteServiceImpl implements TesteService {

	public void teste(String s) {

	}

}
</pre>
<p>Para mais informações sobre como chamar o serviço no servidor a partir de um código GWT client, vide a <a href="http://code.google.com/intl/pt-BR/webtoolkit/doc/1.6/DevGuideServerCommunication.html#DevGuideMakingACall" target="_blank">documentação</a> do GWT.</p>
<p>Quaisquer dúvidas, entrem em contato.</p>
<div id="_mcePaste" style="overflow:hidden;position:absolute;left:-10000px;top:48px;width:1px;height:1px;">package br.com.fwb.base.server.spring;import org.springframework.beans.factory.*;<br />
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;<br />
import org.springframework.web.context.WebApplicationContext;<br />
import org.springframework.web.context.support.WebApplicationContextUtils;import com.google.gwt.user.client.rpc.*;<br />
import com.google.gwt.user.server.rpc.*;public class SpringRemoteServiceServlet extends RemoteServiceServlet {
<p>&#160;</p>
<p>private static final long serialVersionUID = 122383530332380586L;</p>
<p>@Override<br />
public String processCall(String payload) throws SerializationException {<br />
try {<br />
RPCRequest rpcRequest = RPC.decodeRequest(payload);</p>
<p>RemoteService service = getServiceInstance(rpcRequest.getMethod()<br />
.getDeclaringClass());</p>
<p>return RPC.invokeAndEncodeResponse(service, rpcRequest.getMethod(),<br />
rpcRequest.getParameters(), rpcRequest<br />
.getSerializationPolicy());</p>
<p>} catch (IncompatibleRemoteServiceException ex) {<br />
return RPC.encodeResponseForFailure(null, ex);<br />
}<br />
}</p>
<p>private RemoteService getServiceInstance(Class&#60;?&#62; declaringClass) {<br />
WebApplicationContext wac = WebApplicationContextUtils<br />
.getRequiredWebApplicationContext(getServletContext());<br />
AutowireCapableBeanFactory beanFactory = wac<br />
.getAutowireCapableBeanFactory();<br />
return (RemoteService) BeanFactoryUtils.beanOfType(<br />
(ListableBeanFactory) beanFactory, declaringClass);<br />
}</p>
<p>}</p>
</div>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[ChtiJUG Google : Présentation de GWT]]></title>
<link>http://laurentmeurisse.wordpress.com/2009/11/10/pour-les-developpeurs-java-un-environn/</link>
<pubDate>Tue, 10 Nov 2009 06:39:00 +0000</pubDate>
<dc:creator>elolozone</dc:creator>
<guid>http://laurentmeurisse.wordpress.com/2009/11/10/pour-les-developpeurs-java-un-environn/</guid>
<description><![CDATA[Ch&#8217;ti Jug avec Didier Girard et Salvador Diaz : GWT Pour les développeurs java : un environnem]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Ch&#8217;ti Jug avec Didier Girard et Salvador Diaz :</p>
<p>GWT</p>
<p>Pour les développeurs java : un environnement de dev pour les développeurs permettant un web RIA, avec javascript mais sans utilisé javascript.</p>
<p>Le principe est simple : codé en java ; et ensuite le compilateur (GWT cross-compiler) pour générer du javascript.</p>
<p>pour démarrer : utiliser GWT designer (plugin payant de google) ; intéret de GWT designer : c&#8217;est du wysiwyg.<br />
en fait ça ressemble un peu à du VB&#8230; (eeeurk)</p>
<p>seesmic : fait en gwt.</p>
<p>le javascript généré n&#8217;est pas lisible; le javascript est compilé pour qu&#8217;il soit le plus rapide et le plus optimisé possible.</p>
<p>il est possible d&#8217;appeller le serveur (PingService) &#8230; quand on modifie l&#8217;interface coté client GWT synchronise l&#8217;interface coté serveur.</p>
<p>L&#8217;appel du service vers le serveur se fait tjr en asynchrone.<br />
GWT interdit la reflexion java.</p>
<p>Problème pour le dialogue entre graphiste et le développeur : le passage entre html et java est complexe. Par contre le passage entre html et xml : c&#8217;est mieux.</p>
<p>Le problème du monolithe : le binaire du gwt prends vite 800Ko . La solution c&#8217;est runAsync : il y a des morceaux qui sont téléchargé au fil de l&#8217;eau. le runAsync permet de charcher en partie l&#8217;ensemble de l&#8217;application.</p>
<p>Il existe des outils pour avoir des rapports de compilation : Story of your compile.</p>
<p>Ce problème du monolithe de GWT est apparut avec google wave, ou il n&#8217;était pas possible d&#8217;attendre la fin du téléchargement global.</p>
<p>- il y a un livre en cours (par sfeir) sur GWT.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GWT Quick Tip: How to check whether a GWT application is running in Hosted Mode]]></title>
<link>http://jaydeepm.wordpress.com/2009/11/06/gwt-quick-tip-how-to-check-whether-a-gwt-application-is-running-in-hosted-mode/</link>
<pubDate>Fri, 06 Nov 2009 10:45:13 +0000</pubDate>
<dc:creator>jaydeepm</dc:creator>
<guid>http://jaydeepm.wordpress.com/2009/11/06/gwt-quick-tip-how-to-check-whether-a-gwt-application-is-running-in-hosted-mode/</guid>
<description><![CDATA[Sometimes, at runtime, you need to detect whether the application is running in Hosted Mode or not. ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Sometimes, at runtime, you need to detect whether the application is running in Hosted Mode or not. E.g. you might decide to enable client side logging using GWT-Log only when the application is executing in Hosted Mode. The logging should be disabled once the application is deployed.</p>
<p>To check whether the application is executing in Hosted Mode, use the below API:</p>
<pre class="brush: java;">
boolean isExecutingInHostedMode = GWT.isScript();
</pre>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[PEtALS ESB Live Monitoring with WSDM and GWT]]></title>
<link>http://chamerling.wordpress.com/2009/11/04/petals-esb-live-monitoring-with-wsdm-and-gwt/</link>
<pubDate>Wed, 04 Nov 2009 16:29:28 +0000</pubDate>
<dc:creator>Kitov</dc:creator>
<guid>http://chamerling.wordpress.com/2009/11/04/petals-esb-live-monitoring-with-wsdm-and-gwt/</guid>
<description><![CDATA[In one of my previous posts (Adding Registry Listener in PEtALS), I spoke about adding a registry li]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>In one of my previous posts (<a href="http://chamerling.wordpress.com/2009/11/02/adding-registry-listener-in-petals/" target="_blank">Adding Registry Listener in PEtALS</a>), I spoke about adding a registry listener in <a href="http://petals.ow2.org" target="_blank">PEtALS ESB</a>. In the current article, I want to introduce how I used this feature to implement a live monitoring Web application.</p>
<p>Here are the different modules which are used in this Live Monitoring Tool :</p>
<ol>
<li>PEtALS ESB. The standard behaviour has been customized by adding a registry listener and a routing module (to be detailled below).</li>
<li>Monitoring layer. This layer is an independant process which embeds a WS-Notification engine.</li>
<li>A WS-notification subscriber. This is the module which will receive the notifications from the monitoring layer.</li>
<li>GWT based Web application used to display monitoring data.</li>
</ol>
<p><strong>PEtALS ESB Extensions</strong></p>
<p><em>Registry Listener</em><br />
The role of the registry listener is to register a new monitoring endpoint into the monitoring layer when a new endpoint is available within PEtALS.</p>
<p><em>Routing Module</em><br />
Since modules can be added dynamically inside the PEtALS message router, we have created a module which timestamp the messages. Once the message exchange is complete, a message exchange report is sent to the monitoring layer.</p>
<p><strong>Monitoring Layer</strong></p>
<p>The monitoring is in charge of creating monitoring endpoints through a management API. Once a monitoring endpoint is created, it is also exposed as a Web service. This newly created Web service exposes a WS-notification subscribe operation.<br />
Another role of the monitoring layer is to receive raw reports from the PEtALS ESB, to process the report in order to generate a WSDM payload which will be send to subscribers.</p>
<p><strong>WS-Notification subscriber</strong></p>
<p>The subscriber subscribes, receives and stores notifications from the Monitoring layer. That&#8217;s all for that module ;o)</p>
<p><strong>GWT Based Web application</strong></p>
<p>The GWT Web application uses comet in order to display live service response time. The data used to display response time is the one received and stored into the database and of course the server part of the Web application have access to this database.</p>
<p>As a result, we have a really nice live Web application (live means that the chart gives real time result and is updated automatically when messages are exchanged within PEtALS Service Bus). Here are some screenshots :</p>
<div id="attachment_235" class="wp-caption aligncenter" style="width: 490px"><a href="http://chamerling.wordpress.com/files/2009/11/response_time.jpg"><img class="size-full wp-image-235" title="response_time" src="http://chamerling.wordpress.com/files/2009/11/response_time.jpg" alt="Live Response Time" width="480" height="255" /></a><p class="wp-caption-text">Live Response Time</p></div>
<div id="attachment_237" class="wp-caption aligncenter" style="width: 490px"><a href="http://chamerling.wordpress.com/files/2009/11/sla.jpg"><img class="size-full wp-image-237" title="SLA" src="http://chamerling.wordpress.com/files/2009/11/sla.jpg" alt="SLA" width="480" height="254" /></a><p class="wp-caption-text">SLA Violation</p></div>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Everyone, the power of polymorphism.]]></title>
<link>http://research2009.wordpress.com/2009/11/02/everyone-the-power-of-polymorphism/</link>
<pubDate>Mon, 02 Nov 2009 18:12:50 +0000</pubDate>
<dc:creator>Jose  Asuncion</dc:creator>
<guid>http://research2009.wordpress.com/2009/11/02/everyone-the-power-of-polymorphism/</guid>
<description><![CDATA[I was able to implement a tutorial that exposes GWT RPC as a Spring Bean! Now I can make use of Depe]]></description>
<content:encoded><![CDATA[I was able to implement a tutorial that exposes GWT RPC as a Spring Bean! Now I can make use of Depe]]></content:encoded>
</item>
<item>
<title><![CDATA[Learning GWT-RPC]]></title>
<link>http://research2009.wordpress.com/2009/11/01/learning-gwt-rpc/</link>
<pubDate>Sun, 01 Nov 2009 18:36:43 +0000</pubDate>
<dc:creator>Jose  Asuncion</dc:creator>
<guid>http://research2009.wordpress.com/2009/11/01/learning-gwt-rpc/</guid>
<description><![CDATA[1. Well first off, I got to a bumpy start.  I wanted to add a GWT module to my developer sandbox but]]></description>
<content:encoded><![CDATA[1. Well first off, I got to a bumpy start.  I wanted to add a GWT module to my developer sandbox but]]></content:encoded>
</item>
<item>
<title><![CDATA[Stuck at a crossroad with GWT]]></title>
<link>http://research2009.wordpress.com/2009/10/31/stuck-at-a-crossroad-with-gwt/</link>
<pubDate>Sat, 31 Oct 2009 15:36:17 +0000</pubDate>
<dc:creator>Jose  Asuncion</dc:creator>
<guid>http://research2009.wordpress.com/2009/10/31/stuck-at-a-crossroad-with-gwt/</guid>
<description><![CDATA[I am studying GWT so that Hardwire will now be AJAX enabled. It&#8217;s easier to do our client side]]></description>
<content:encoded><![CDATA[I am studying GWT so that Hardwire will now be AJAX enabled. It&#8217;s easier to do our client side]]></content:encoded>
</item>
<item>
<title><![CDATA[Senior Web Developer]]></title>
<link>http://mindsourceinc.wordpress.com/2009/10/27/senior-web-developer/</link>
<pubDate>Wed, 28 Oct 2009 03:00:32 +0000</pubDate>
<dc:creator>Michelle</dc:creator>
<guid>http://mindsourceinc.wordpress.com/2009/10/27/senior-web-developer/</guid>
<description><![CDATA[Our client in SAN MATEO, CA,  is looking for a SENIOR WEB DEVELOPER for front-end development of nex]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Our client in <strong>SAN MATEO, CA</strong>,  is looking for a <strong>SENIOR WEB DEVELOPER</strong> for front-end development of next generation data modeling and visualization tools.  The ideal candidate would have expertise in front end development of complex Rich Internet Applications (RIA) and have demonstrated the ability to develop high quality enterprise software in a dynamic environment.</p>
<p><strong>Responsibilities</strong></p>
<ul>
<li>Develop front end of Rich Internet Applications for Java-based server products</li>
<li>Analyze functional requirements and specifications through close interaction with Product Management and other team members</li>
<li>Participate in product design and architectural discussions</li>
<li>Write unit tests to ensure developed user interfaces meet product requirements</li>
<li>Provide support to the QA and support organizations</li>
<li>Provide feedback and guidance to technical writers</li>
<li>Develop appropriate documentation for architectural, design, implementation and test activities.</li>
</ul>
<p><strong>Required Skills</strong></p>
<ul>
<li>Bachelor&#8217;s degree in Computer Science (or related field of study)</li>
<li>Minimum of 6 years experience with front end development of Web-based user interfaces</li>
<li>Minimum of 2 years experience with front end development of rich internet applications (RIA)</li>
<li>Expertise in building applications using the following technologies:  Flex 3/4, Flash Action Script, HTML, DHTML, JavaScript, JSON, CSS</li>
<li>Experience with the following tools: Maven, ANT, Subversion, CVS</li>
<li>Familiar with cross browser support issues and solutions as well as i18n issues and solutions</li>
<li>Experience doing software development in a structured, automated, and distributed development environment including design, development, QA, and documentation.</li>
<li>Strong communication skills with the ability to present technical concepts concisely to non-technical members of the team.</li>
</ul>
<p><strong>Nice to Have:</strong></p>
<ul>
<li>Familiarity with existing data modeling tools is a plus: ER/Studio ERWin, TOAD</li>
<li>Experience in building applications using any of the following technologies is a plus: JSP, Struts, JavaScript, JQuery, SEAM, GWT, Rich Faces, extjs, XML/XSLT, AIR</li>
</ul>
<p>If you are interested, please send us your resume to <a href="mailto:raj@mindsource.com?subject=Senior Web Developer">raj@mindsource.com</a>.</p>
</div>]]></content:encoded>
</item>

</channel>
</rss>
