ICEPush add-on

I had to rewrite the servlet to do this:


/*
 * Copyright (C) 2011 Emergency CallWorx, Inc. All rights reserved.
 *
 * $Id$
 */

package com.clj2.web.lib.controller;

import com.vaadin.terminal.gwt.server.ApplicationServlet;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.icepush.servlet.MainServlet;
import org.vaadin.artur.icepush.ICEPush;
import org.vaadin.artur.icepush.JavascriptProvider;

public class ECXICEPushServlet extends ApplicationServlet {

    private MainServlet ICEPushServlet;
    private JavascriptProvider javascriptProvider;

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        try {
            super.init(servletConfig);
        } catch (ServletException e) {
            if (e.getMessage().equals("Application not specified in servlet parameters")) {
                // Ignore if application is not specified to allow the same
                // servlet to be used for only push in portals
            } else {
                throw e;
            }
        }

        this.ICEPushServlet = new MainServlet(servletConfig.getServletContext());

        try {
            String codeBasePath = servletConfig.getServletContext().getContextPath();
            String codeLocation = servletConfig.getInitParameter("codeBasePath");
            if (codeLocation != null)
                codeBasePath = codeLocation;
            if (codeBasePath.endsWith("/"))
                codeBasePath = codeBasePath.substring(0, codeBasePath.length() - 2);
            this.javascriptProvider = new JavascriptProvider(codeBasePath);
            ICEPush.setCodeJavascriptLocation(this.javascriptProvider.getCodeLocation());
        } catch (IOException e) {
            throw new ServletException("Error initializing JavascriptProvider", e);
        }
    }

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String pathInfo = request.getPathInfo();
        if (pathInfo != null && pathInfo.equals("/" + this.javascriptProvider.getCodeName())) {
            // Serve icepush.js
            serveIcePushCode(response);
            return;
        }

        if (request.getRequestURI().endsWith(".icepush")) {
            // Push request
            try {
                this.ICEPushServlet.service(request, response);
            } catch (ServletException e) {
                throw e;
            } catch (IOException e) {
                throw e;
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        } else {
            // Vaadin request
            super.service(request, response);
        }
    }

    private void serveIcePushCode(HttpServletResponse response) throws IOException {
        String icepushJavscript = this.javascriptProvider.getJavaScript();
        response.setHeader("Content-Type", "text/javascript");
        response.getOutputStream().write(icepushJavscript.getBytes());
    }

    @Override
    public void destroy() {
        super.destroy();
        this.ICEPushServlet.shutdown();
    }
}

you’d just add an init-param named codeBasePath with the value of the servlet mapping (e.g. /foo)

I’m writing a new app for which I’d like to use Navigator7 and ICEPush… I know that it’s possible to factor the app into several sub-contexts so that the main app can use Navigator, and the features can use ICEPush in, e.g. iframes. But this creates a cumbersome session management challenge. I’m curious to know whether anyone has made an effort in the direction of merging the Navigator and ICEPush code into a single servlet, or get any expert feedback on whether this is something a Vaadin newbie like myself would want to try doing.
Best regards,
Elliott

We know this (combining extensions to servlets) should be easier, but finding the right way to make it easier (and not breaking backwards compatibility) is far from trivial.

In your case, the easiest option is probably to inherit the servlet from Navigator and copy the few lines from ICEPushServlet to your servlet class.

I tried your servlet, Mark and it didn’t work for me until I made one tiny tweak:

changed:

codeBasePath = codeLocation;

to:

codeBasePath += codeLocation;

Then, it works great…thanks!

This addon would be exactly what I need but unfortunately I can’t get it working. I have problem with widgetset.

Unrendered UIDL
org.vaadin.artur.icepush.ICEPush(NO CLIENT IMPLEMENTATION FOUND) id=PID2 pushGroup=ICEPush-1 codeLocation=/krok/code.icepush

My project is maven project and I downloaded and added all 3 ICEPush jars into dependencies, one from Vaadin addon page and then two missing jars I installed into my local repository (which in my opinion really fights against easy adding of vaadin addons). When building project I get following text, I notice it says ERROR even I don’t see any error there and build works correctly.

[INFO]
— vaadin-maven-plugin:1.0.2:update-widgetset (default) @ vaadin —
[INFO]
auto discovered modules [fi.oodi.krok.ui.vaadin.widgetset.Ui_vaadinWidgetset]

[INFO]
Updating widgetset fi.oodi.krok.ui.vaadin.widgetset.Ui_vaadinWidgetset
[ERROR]
28.3.2012 11:10:14 com.vaadin.terminal.gwt.widgetsetutils.ClassPathExplorer getAvailableWidgetSets
[ERROR]
INFO: Widgetsets found from classpath:
[ERROR]
com.vaadin.terminal.gwt.DefaultWidgetSet in jar:file:/home/jarik/.m2/repository/com/vaadin/vaadin/6.7.4/vaadin-6.7.4.jar!/
[ERROR]
org.vaadin.teemu.wizards.WizardsforvaadinWidgetset in jar:file:/home/jarik/.m2/repository/org/vaadin/addons/wizards-for-vaadin/0.4.1/wizards-for-vaadin-0.4.1.jar!/
[ERROR]
org.vaadin.artur.icepush.IcepushaddonWidgetset in jar:file:/home/jarik/.m2/repository/org/vaadin/addons/icepush/0.2.1/icepush-0.2.1.jar!/
[ERROR]
fi.oodi.krok.ui.vaadin.widgetset.Ui_vaadinWidgetset in file:/home/jarik/workspace/KROK/ui.vaadin/src/main/resources
[ERROR]
org.vaadin.overlay.OverlaysWidgetset in jar:file:/home/jarik/.m2/repository/org/vaadin/addons/overlays/0.9.8/overlays-0.9.8.jar!/
[ERROR]

[ERROR]
28.3.2012 11:10:14 com.vaadin.terminal.gwt.widgetsetutils.ClassPathExplorer getAvailableWidgetSets
[ERROR]
INFO: Search took 18ms

I first had problem runnin mvn gwt:clean gwt:compile but that was fixed after I changed gwt-user version to 2.4.0. My vaadin version is 6.7.4.

I am using also Guice so my web.xml is different than in addon page, but my servlet class extends ICEPushServlet.

I just can’t get it working… :frowning:

I would still suspect that your web.xml does not refer to the widgetset correctly. Try to add “?debug” to the application URL and see what it says about the widgetset, or otherwise check which widgetset is loaded.

Also, check the rest of the widgetset compilation output to see that it is actually compiling and not skipping the ICEPush widget - the JAR is found during widgetset compilation, but maybe the widget in it is not included in the compilation.

The “ERROR” output is not really errors but high-priority output from an external utility that Maven shows as errors.

I would recommend using GWT 2.3 with Vaadin 6.7 if possible. GWT 2.4 seems to mostly work with the latest 6.7.x builds, but there are some minor issues.

I’m adding the ICEPush plugin to an existing project but I keep getting this error “java.lang.RuntimeException: Must be attached to an application to push” when I call “push()”.

I’ve read several other post of people having similar issues and for the most part the solution seems to be to make sure the pusher instance has been add to the mainWindow. However even though I’ve added the pusher instance to the mainWindow I always get the same error message. My guess is that its some how getting detached before I can use it in the application.

Here’s two code snippets. I first load a Login component and then after the user authenticates I remove the login component and add the Main window component.


        private ICEPush	m_icePusher;

	public void init()
	{
		s_CURRENT_APPLICTION.set(this); // So that we immediately have access to the current application

		Window mainWindow = new Window("Device Manager Web Application");
		setTheme("DeviceManager");

		setMainWindow(mainWindow);

		// Add the push component
		m_icePusher = new ICEPush();
                mainWindow.addComponent(m_icePusher);

		getMainWindow().setContent(new Login());
	}

    public boolean authentication(String p_username, String p_password)
	{
		boolean t_status = false;
		UserInfo t_user = new UserInfo();
		t_user.setUsername(p_username);
		t_user.setPassword(p_password);

		AuthResponse t_aResponse = DEVICE_MANAGER_API.authenticate(t_user);

		if (t_aResponse.getAuthToken() != null && t_aResponse.getUserID() > 0)
		{
			getMainWindow().setContent(null);
			getMainWindow().setContent(new Main());

			t_status = true;
		}

		return t_status;
	}

Note: I’ve also tried moving the add pusher instance into the authentication function but that doesn’t seems to make a different either.

Thanks for your help.

I’m past that problem now. Ultimately the problem was what I had guessed. Apparently getMainWindow().setContent() removes any previous layouts. I’m now using getMainWindow().addComponent / removeComponent to work around that issue.

However the problem I’m experiencing now is that the UI never updates until the background thread is stopped. Once the thread stops the console spews the following messages:
Mar 30, 2012 2:58:03 PM com.vaadin.terminal.gwt.server.AbstractCommunicationManager handleVariableBurst
WARNING: Warning: Ignoring variable change for non-existent component, VAR_PID=PID2
Mar 30, 2012 2:58:03 PM com.vaadin.terminal.gwt.server.AbstractCommunicationManager handleVariableBurst
WARNING: Warning: Ignoring variable change for non-existent component, VAR_PID=PID2
Mar 30, 2012 2:58:03 PM com.vaadin.terminal.gwt.server.AbstractCommunicationManager handleVariableBurst
WARNING: Warning: Ignoring variable change for non-existent component, VAR_PID=PID2
Mar 30, 2012 2:58:03 PM com.vaadin.terminal.gwt.server.AbstractCommunicationManager handleVariableBurst

Presumably I’m getting 2 lines for every time push() was called. After all those messages finish writing to the console the UI window updates showing the last update in the window.

Why is my window not getting updated every time I call push()?

The previously mentioned issue has also now gone away.

WARNING: Warning: Ignoring variable change for non-existent component, VAR_PID=PID2
Mar 30, 2012 2:58:03 PM com.vaadin.terminal.gwt.server.AbstractCommunicationManager handleVariableBurst

I’m no longer getting these warning messages (with no real reason why they’ve gone away) however I’m still having the same issue that the ui only updates once the background thread stops.

Below is my run function in the background thread.


private Embedded	m_videoImage = new Embedded();

public void run()
	{
		// Get the proxy IP/Port from ConfigManager from either the edm.* or deviceManager.*
		ProxyConnectionInfo proxyDetails = new ProxyConnectionInfo();

		String t_proxyIP = null;
		int t_proxyPort = 0;

		if (ConfigManager.GetValue("edm.proxyLocalIP") != null)
		{
			t_proxyIP = ConfigManager.GetValue("edm.proxyLocalIP");
			t_proxyPort = ConfigManager.GetIntValue("edm.proxyPort");
		}
		else
		{
			Logger.LogInfo("EDM configuration values are not present.");

			t_proxyIP = ConfigManager.GetValue("deviceManager.proxyIPAddress");
			t_proxyPort = ConfigManager.GetIntValue("deviceManager.proxyPort");
		}

		proxyDetails.setIPAddress(t_proxyIP);
		proxyDetails.setPort(t_proxyPort);

		// Step #1: Connect to Proxy Server
		Logger.LogInfo("Step #1: Establish connection to Proxy.");

		ConnectionManager p_proxyConn = new ConnectionManager(m_device, proxyDetails, null);

		// test for connection failure
		if (p_proxyConn != null && p_proxyConn.isOpen())
		{
			int responseCode = -1;
			StringBuilder t_responseContent = new StringBuilder();

			try
			{
				byte[] t_imageStream = null;

				while (m_play)
				{
					responseCode = p_proxyConn.postAndWaitForReponse("uid=001&image1=" + ((ImageType) m_ddlImageType.getValue()).getStreamId(), "registerClient.cgi", m_device.getUserName(), m_device.getPassword(), t_responseContent);

					if (responseCode == HttpComm.HTTP_OK)
					{
						// Get the image stream
						Logger.LogDebug("Step #2: Get Video Stream Image");

						t_imageStream = p_proxyConn.getAndWaitForReponse("", ((ImageType) m_ddlImageType.getValue()).getFileName(), m_device.getUserName(), m_device.getPassword());

						if (t_imageStream != null && t_imageStream.length > 114)
						{
							Resource t_resource = utils.convertByteArrayToStream(t_imageStream);

							// Update UI
							synchronized (DeviceManagerWebApplication.getInstance())
							{
								m_videoImage.setSource(t_resource);
							}

							// Push the changes							
							DeviceManagerWebApplication.getInstance().getPushObject().push();
							Thread.sleep(500);
						}
						else
						{
							Logger.LogDebug("Return Length: " + t_imageStream.length);
						}
					}
					else
					{
						m_play = false;
					}
				}
			}
			catch (Exception ex)
			{
				Logger.LogError("VideoStream.run() | " + ex.toString());
				m_play = false;
			}
		}
		else
		{
			Logger.LogInfo("Step #1: Failed to Connect to Proxy: " + p_proxyConn.getProxyMessage());
			Logger.LogInfo("Step #2: Skipped Device IP: " + m_device.getIPAddress());
		}
	}

Let me know what I’m doing wrong.

If you happen to have updating issues with ICEPush, make sure you are not changing the container of ICEPush instance. We found out that relocating ICEPush under new layout/container will cause random problems when pushing (update not happening). Workaround for this is to add top level layout to window that is not replaced with another. Add ICEPush instance to this top level layout, and keep it there.

Hi.
I can not get the ICEPush working.
Here is part of my web.xml:

<servlet>
		<servlet-name>dispatcher-servlet</servlet-name>
		<servlet-class>com.myapp.web.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>dispatcher-servlet</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>

and my DispatcherServlet:

public class DispatcherServlet extends ICEPushServlet {
    public void service(HttpServletRequest req, HttpServletResponse res) {
        //some processing
        super.service(req, res);
   }

}

and, finally, my Application class

public class Application extends com.vaadin.Application {

    private ICEPush pusher = new ICEPush();

    private void setPusher() { //because I use setContent() method for main window
		Window window = getMainWindow();
		window.removeComponent(pusher);
		pusher.setParent(null);
		window.addComponent(pusher);
	}
	
	public void push() {
		setPusher();
		pusher.push();
	}
}

I want add new window to main window asynchronous (video chat call notification). I do it like this:

application.getMainWindow().addWindow(notificationWindow);
application.push();

Window does not appear. What am I doing wrong?

Hi,

I am using ICEPush with vaadin 7. I get this warning everytime i try to push

“com.vaadin.terminal.gwt.server.ServerRpcManager applyInvocation
WARNING: RPC call received for RpcTarget org.vaadin.artur.icepush.ICEPush (97) but the target has not registered any RPC interfaces”

Any help will be appreciated. :slight_smile:

Thanks

Hi!
I am testing Vaadin 7 rc2 with Spring integration - how to add the ICEPush servlet to web.xml? My primary servlet is a SpringIntegrationServlet… i try to create a second servlet ICEPushServlet in web.xml, but in application push method do not working and no errors.

Answered in another thread where you posted as I saw it before this one, even though this would be more correct.

Please do not post duplicates but only pick the most appropriate thread or a new thread.

Has anyone tried using ICEPush in a Vaadin app deployed on Glassfish running behind Apache using mod_proxy?

That’s the configuration that I’m trying to get working. The app all works correctly except for ICEPush not pushing.

ICEPush works fine when going direct to a Glassfish server, but when proxied with Apache I’m not seeing the “POST listen.icepush” although I do see the other three requests.

My VirtualHost config on Apache looks like

<VirtualHost>
    .
    .
    .
    ProxyPass / http://server:port/appcontext/
    ProxyPassReverse / http://server:port/appcontext/
    ProxyPassReverseCookiePath /appcontext /
</VirtualHost>

Can anyone help, I’ve tried a number of different variations of the proxypass config, but nothing I try seems to make any difference?

Any assistance would be much appreciated.

Alex

Hey Arthur, thanks for a great addon!

However, is this add-on in any way combinable with the Vaadin Touchkit?

Since they are both replacing the servlet… I just realized this after developing an entire mobile application using icepush, and while the push parts work flawlessly… the application will not behave as a webapp on the phone (or alternatively the push won’t work, but the application behaves as a phone app). Feels like I just hit a wall…

Using Vaadin 6 at the moment, would upgrading to 7 solve my problem, or will I still run into the same issue with two different servlet classes?

I got some problems with Vaadin ICEPush add-on. I’m getting null pointer exception in it.

java.lang.NullPointerException
    at org.vaadin.artur.icepush.ICEPush.getPushContext(ICEPush.java:65)
    at org.vaadin.artur.icepush.ICEPush.push(ICEPush.java:55)
    ...
    at java.util.TimerThread.mainLoop(Timer.java:512)
    at java.util.TimerThread.run(Timer.java:462)

I use Vaadin 7.0.5.

When I debug, I found this.

WrappedSession session = vaadinSession.getSession(); **gives null**

public static synchronized PushContext getPushContext(
            VaadinSession vaadinSession) {
        ***WrappedSession session = vaadinSession.getSession();(gives null)***
        // session.getAttribute(PushContext.class.getName());
        VaadinService service = vaadinSession.getService();
        if (session instanceof WrappedHttpSession) {
            ServletContext servletContext = ((WrappedHttpSession) session)
                    .getHttpSession().getServletContext();
            return (PushContext) servletContext.getAttribute(PushContext.class
                    .getName());
        } else if (session instanceof WrappedPortletSession) {
            PortletContext portletContext = ((WrappedPortletSession) session)
                    .getPortletSession().getPortletContext();
            return (PushContext) portletContext.getAttribute(PushContext.class
                    .getName());
        } else {
            throw new RuntimeException(
                    "Could not find PushContext from session");
        }
    }

It completely crashes my application. I couldn’t do any updates then.

I am struggling with a “Must be attached to an application to push” error when I call the push(). My application data is split among a bunch of files, but here is the gist of what I’ve done.

Vaadin 6.8.10

In main Application class(ApplicationBase):
Added instance variable:

private static ICEPush push = new ICEPush();

Here is my init() method:

   @Override

    public void init()

    {    

        Class<IDataSource>[] providers = ServiceProviderLookupFacility.lookupServiceProviders(IDataSource.class);

        if (providers.length > 0)
        {
            for (Class<IDataSource> clazz : providers)
            {
                try
                {
                    dataSource = clazz.getConstructor().newInstance();
                    dataSource.initialize(applicationProperties);
                    break;
                }
                catch (Throwable t)
                {
                    ERROR.report("com.cerner.phantom.app.error.dataSource", t);
                }
            }
        }
       
        if (dataSource == null)
        {
            throw new IllegalStateException("No data sources found in web application container.");
        }
        
        bootstrapUser();

        setTheme("phantom-theme");
        Window mainWindow = new Window(ResourceAssistant.getString("com.cerner.phantom.app.page.name"));
        mainWindow.addComponent(push);
        setMainWindow(mainWindow);
        page = new ApplicationPage(this);
        page.setSizeFull();
        Animator animator = new Animator(page);
        animator.fadeIn(300, 200);
        animator.setSizeFull();
        mainWindow.setContent(animator);
}

I also created a method to call the push() when changes are made on the elements on the page:

    public static void updateUI(Application app)
    {
        if (app != null)
        {
        push.push();
        }
        else
        {
            System.out.println("Application is null");
        }
    }

I then have a method call to updateUI() from the actionHandler() method in my layout

		Application app = getApplication();
		if (app != null)
		{
			ApplicationBase.updateUI(app);
		}
		else 
		{
			System.out.println("Application is null");
		}

And my stacktrace:
Completed retrieval
Jan 10, 2014 8:51:48 AM com.vaadin.Application terminalError
SEVERE: Terminal error:
java.lang.RuntimeException: Must be attached to an application to push
at org.vaadin.artur.icepush.ICEPush.push(ICEPush.java:55)
at com.cerner.phantom.ApplicationBase.updateUI(ApplicationBase.java:378)
at com.cerner.phantom.ui.navigation.clients.MyClientsNavigationElement.handleAction(MyClientsNavigationElement.java:136)
at com.vaadin.ui.Table.changeVariables(Table.java:2861)
at com.vaadin.ui.TreeTable.changeVariables(TreeTable.java:393)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.changeVariables(AbstractCommunicationManager.java:1460)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariableBurst(AbstractCommunicationManager.java:1404)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariables(AbstractCommunicationManager.java:1329)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.doHandleUidlRequest(AbstractCommunicationManager.java:761)
at com.vaadin.terminal.gwt.server.CommunicationManager.handleUidlRequest(CommunicationManager.java:325)
at com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:501)
at org.vaadin.artur.icepush.ICEPushServlet.service(ICEPushServlet.java:72)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:598)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1367)
at com.cerner.system.i18n.servlet.I18nContextCleanupFilter.doFilter(I18nContextCleanupFilter.java:49)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1338)
at com.cerner.system.i18n.servlet.I18NLocaleFilter.doFilter(I18NLocaleFilter.java:66)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1338)
at com.cerner.cloud.idm.idp.rp.ForcedAuthenticationFilter.doFilter(ForcedAuthenticationFilter.java:87)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1338)
at com.cerner.cloud.idm.idp.rp.AuthenticationFilter$1.run(AuthenticationFilter.java:131)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:356)
at com.cerner.cloud.idm.idp.rp.AuthenticationFilter.doFilter(AuthenticationFilter.java:126)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1338)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:484)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1065)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:413)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:999)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111)
at org.eclipse.jetty.server.Server.handle(Server.java:350)
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:454)
at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:900)
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:954)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:851)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:77)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:620)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:46)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:603)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:538)
at java.lang.Thread.run(Thread.java:744)

When the updateUI(Application) method is called, I can see in debug that there is an instance of the applicaiton and applicationIsRunning = true. Any ideas on where I’m going wrong

Update: I got this working. I was adding the pusher to the mainWindow, but after looking at some other examples, I found that I should be adding it to the layout that is on the mainWindow. I have done this and now it works without issue.

I installed icepush 0.2.1 on Vaadin 6.8. I added the Icepush item to mainlayout and start the background thread.The background method updates the data in a table and starts pusher.push();.
The table does not update content but if I change content and go back I find the updated table. What could happen?

I tried also example ICEPushDemo but the same thing happens.

Hi!
I installed icepush 0.2.1 on Vaadin 6.8. I added the Icepush item to mainlayout and start the background thread.The background method updates the data in a table and starts pusher.push();.
The table does not update content but if I change content and go back I find the updated table. What could happen?

I tried also example ICEPushDemo but the same thing happens.