toggle Cinema 28 Sep 2009

Integrando Google SiteBriks con Hibernate Posted by Insane in Google, Java, Mysql | No responses

Introducción

Para el propósito de este post, asumiré que el lector tiene conocimientos previos sobre la configuración de Hibernate y su uso. De lo contrario recomiendo este tutorial para una rápida iniciación.

Sitebricks de Google esta escrito en Java y basado en su framework de injección de dependencias Guice.
Hibernate es el servicio  para persistencia y consulta orientado a objetos.

El uso de ambas tecnologías en un desarrollo es una manera profesional, escalable y mantenible. Lo siguiente es un ejemplo que muestra  como combinarlas.

Supongamos que tenemos una aplicación donde el usuario sube sus imágenes y la información de estas es almacenada en la tabla Uploads, haremos una página que despliegue las imágenes que han sido guardadas, empezemos!!! .

SQL

CREATE TABLE `Uploads` (
  `ID` int(11) NOT NULL auto_increment,
  `size` varchar(10) NOT NULL default '',
  `name` varchar(250) default NULL,
  `uploadDate` date NOT NULL,
  `uploadTime` time NOT NULL,
  `ip` varchar(45) default NULL,
  `step` int(2) NOT NULL default '0',
  `active` int(1) NOT NULL default '1',
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

INSERT INTO `uploads` (`ID`, `size`, `name`, `uploadDate`, `uploadTime`, `ip`, `step`, `active`) VALUES
(1, '17346', 'pictures/0d42.jpg', '2009-09-28', '', '127.0.0.1', 1, 1),
(2, '17346', 'pictures/7f03.jpg', '2009-09-28', '', '127.0.0.1', 1, 1),
(3, '21671', 'pictures/48be.jpg', '2009-09-28', '', '127.0.0.1', 1, 1),
(4, '21671', 'pictures/73b0.jpg', '2009-09-28', '', '127.0.0.1', 1, 1);

web.xml

  <filter>
    <filter-name>webFilter</filter-name>
    <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>webFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <listener>
    <listener-class>com.google.sitebricks.web.MyGuiceCreator</listener-class>
  </listener>

Example.html

<html>
    <head>
        <style>
            .listed li{
                list-style:none;
                border:1px solid #CCC;
                padding:4px;
            }
        </style>
    </head>
<body>
<!-- simple access -->
MESSAGE : <strong>${message}</strong> <br/>
<!--  Hides or shows annotated tag content  -->
@ShowIf(true)
<div> CONDITIONAL MESSAGE : listing ${uploads.size()} elements </div> <br/>

<h3>D List</h3>
<!--  Repeats annotated tag content over provided collection  -->
<ul class="listed">
  @Repeat(items=uploads, var="tr", pageVar="l")
  <li>${tr.name}</li>
</ul>
</body>
</html>

En este template se muestra el uso de algunos de los bricks que han sido documentados de la pagina wiki del proyecto aqui .

MyGuiceCreator.java

public class MyGuiceCreator extends GuiceServletContextListener {

    @Override
    public Injector getInjector() {
        return Guice.createInjector(new SitebricksModule() {
            @Override
            protected void configureSitebricks() {
                //scan class Example's package and all descendants
                scan(Example.class.getPackage());
            }
        });
    }

static public class Objective{
    private String name="DEFAULT";

    public Objective(String name) {
        this.name = name;
    }

    public String getName(){
        return name;
    }

    public void setName(String name){
        this.name = name;
    }

}

@At("/listExample")
static public class Example {
    private static ArrayList<Uploads> uploads = (ArrayList<Uploads>) (new UploadsDAO()).findAll();
    private static ArrayList<Objective> list = new ArrayList<Objective>() {{
        add(new Objective("insane"));
        add(new Objective("insane2"));
        add(new Objective("insane3"));
    }};

    private String message = " Hey Dude , ";

    public ArrayList<Objective> getList(){
        return (ArrayList<Objective>) list.clone();
    }

    public ArrayList<Uploads> getUploads(){
        return (ArrayList<Uploads>)uploads;
    }

    public String getMessage() { return message; }
}
}

De lo anterior se resume lo siguiente:

  • MyGuiceCreator ha sido declarada como listenerClass en el archivo web.xml.
  • La anotación ‘At($exp)’ le indica a la aplicación que escuche en ${host}[:${port}]/${context}/ $exp’
  • La clase Example buscara el archivo ‘$classname.html’ como template base.

Lo que se debe saber:

  • Los getters deben estar incluidos en la clase si se trata de acceder a ellos desde el template.
  • En el uso de listas , los tipos de retorno del metodo y el tipo de dato deben conicidir.

Por ultimo, el resultado se muestra abajo.

guice_result

A donde ir desde aquí.

item1
  • Share/Bookmark

Tags: , , ,

Promote this post

Would you like to add this post to your bookmarks? Come on, do not miss any updates and stay tuned.
Please share with us!

This entry no have comments but you can be first .

Leave a Reply ( Guest )

(*)

(will not be published) (*)