jueves, agosto 14, 2014

Simple Polling con DWR y Spring

Esta ocacion traigo un pequeño ejemplo de como realizar el polling con DWR si claro es lo mismo  cque hacer muchas llamadas ajax con jquery si , pero es otra forma de trabajar con javascipt y java, pues bien espero darme a entender y con la finalidad de que alguien le sirva esto quedaria algo asi:





Lo primero que necesitamos es la esturctura del proyecto esta debe quedar algo asi

Empezamos con la pagina jsp.


Colocamos en el body:

    <ul class="nav nav-tabs" role="tablist" id="myTab">
        <li class="active"><a href="#lapestana" role="tab"
            data-toggle="tab">Usuarios</a></li>
    </ul>

    <div class="tab-content">
        <div class="tab-pane active" id="lapestana">
            <table id="gridUsuarios" class="tablaAlertas"></table>
        </div>

    </div>


En spring-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>

 <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
       http://www.directwebremoting.org/schema/spring-dwr http://www.directwebremoting.org/schema/spring-dwr/spring-dwr-3.0.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">


    <context:component-scan base-package="com.elkardumen.controller" />
    <mvc:annotation-driven />
   
    <dwr:controller id="dwrController" debug="true">
        <dwr:config-param name="crossDomainSessionSecurity" value="false"/>
        <dwr:config-param name="activeReverseAjaxEnabled" value="true"/>
        <dwr:config-param name="pollAndCometEnabled" value="true" />
        <dwr:config-param name="maxWaitAfterWrite" value="-1"/>
    </dwr:controller>

    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
      <property value="true" name="alwaysUseFullPath"></property>
      <property name="mappings">
        <props>
          <prop key="/dwr/**/*">dwrController</prop>
        </props>
     </property>
    </bean>

    <!--Genera Campos Filtro  -->
    <bean id="filterScripGenerator" class="com.elkardumen.service.FilterScripGenerator">
      <dwr:remote javascript="filterScripGenerator">
        <dwr:include method="getMensaje"/>
      </dwr:remote>
    </bean>
   
   
    <bean id="hiloLog" class="com.elkardumen.service.HiloLog" scope="application">
      <dwr:remote javascript="hiloLog">
          <dwr:include method="arranca"/>
      </dwr:remote>
    </bean>



    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
      <bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

 
     
      <bean id="jspViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/pages/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>



EN el  web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC
    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app id="WebApp_ID">
    <display-name>Simple Polling DWR</display-name>
      <description>Simple Polling DWR</description>

<!--  ************************** spring NO MVC ************************** -->

<!--   <listener> -->
<!--     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> -->
<!--   </listener> -->
<!--   <context-param> -->
<!--     <param-name>contextConfigLocation</param-name> -->
<!--     <param-value>/WEB-INF/applicationContext*.xml</param-value> -->
<!--   </context-param> -->

  <listener>
    <listener-class>com.elkardumen.servlet.ServletContextListener</listener-class>
  </listener>

<!-- ************************** spring MVC **************************  -->
    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet><servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
      <servlet-name>spring</servlet-name>
      <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>


    <welcome-file-list>
        <welcome-file>/pages/paginaInicial.jsp</welcome-file>
    </welcome-file-list>

</web-app>


En Usuario.java

package com.elkardumen.bean;

public class Usuario {
    private String id;
    private String firstname;
    private String lastname;
    private String email;
    private String password;
   
   
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getFirstname() {
        return firstname;
    }
    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }
    public String getLastname() {
        return lastname;
    }
    public void setLastname(String lastname) {
        this.lastname = lastname;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

En ControllerApp.java


package com.elkardumen.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class ControllerApp {

    @RequestMapping("/pageInit.html")
        public String logTasPage() {
           
            return "paginaInicial";
    }   
       
   
}

En FilterScripGenerator.java

package com.elkardumen.service;

public class FilterScripGenerator {
    public FilterScripGenerator() { }
   
    public String getMensaje(String idTabla, String[] campos) throws Exception {
        StringBuilder declaraCondiciones = new StringBuilder();
        StringBuilder colocaCondiciones = new StringBuilder();
        for (String v : campos) {
            String identificador = idTabla + v;
            declaraCondiciones.append("var condicion" + identificador + "= $(\\\"#idforcheck" + identificador + "\\\").attr('aria-pressed')=='true' ? " +
                    "\\\"String(obj." + v.replace('_', '.') + ").toLowerCase().indexOf(String($(\\\\\\\"#gs_" + identificador + "\\\\\\\").val()).toLowerCase())!=0\\\":" +
                    "\\\"String(obj." + v.replace('_', '.') + ").toLowerCase().indexOf(String($(\\\\\\\"#gs_" + identificador + "\\\\\\\").val()).toLowerCase())==0\\\";");
            colocaCondiciones.append(" eval(condicion" + identificador + ") &&");
        }
        colocaCondiciones.delete(colocaCondiciones.length()-2, colocaCondiciones.length());
      
        return "{\"idTabla\":\"" + idTabla + "\",\"declaraCondiciones\":\""+declaraCondiciones+"\",\"colocaCondiciones\":\""+colocaCondiciones+"\"}";

    }
}

En HiloLog
package com.elkardumen.service;



import org.directwebremoting.Browser;
import org.directwebremoting.ScriptSessions;

import com.elkardumen.bean.Usuario;
import com.google.gson.Gson;

public class HiloLog implements Runnable {
    private static boolean active = true;
    int count=0;
    Usuario user=new Usuario();
    public HiloLog() {
        new Thread(this).start();
    }
   
    public synchronized void arranca() {
    }

    @Override
    public void run() {
       
        while (active) {
            count++;
            try {

                Browser.withPage("/SimplePollingSpringDWR/pageInit.html",
                    new Runnable() {
                        public void run() {
                            user.setId(String.valueOf(count));
                            user.setFirstname("Nombre  "+ count);
                            user.setLastname("LastName "+count);
                            user.setLastname("Email "+count);
                            user.setPassword("Password"+count);
                           
                           
                   
                                ScriptSessions.addFunctionCall("evento", new Gson().toJson(user));
                        }
                    }
                );
               
            } catch (Exception e1) {
                System.out.println("Excepcion al enviar mensaje. " + e1.getMessage());
            }
       
        try {
            Thread.sleep(5000L);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        }
        System.out.println("Hilo terminado");
    }
    public static boolean isActive() {
        return active;
    }

    public static void setActive(boolean active) {
        HiloLog.active = active;
    }

}
En ServletContextListener

package com.elkardumen.servlet;

import javax.servlet.ServletContextEvent;


public class ServletContextListener {

   
    public void contextDestroyed(ServletContextEvent arg0) {
       
       
        System.out.println("Servlet conext destroyed");
    }

   
    public void contextInitialized(ServletContextEvent arg0) {
        System.out.println("Servlet conext initialized .");
    }

   

}

Estas son alguas de las clases y archivos .js principales si quieres ver mas por favor descarga el proyecto y despliega en tu IDE favorito:

https://github.com/xola139/SimplePollingSpringDWR
DESCARGA .ZIP

No hay comentarios.:

Publicar un comentario