Translate

sábado, 15 de agosto de 2009

Rest con Restlet

Restlet es un framework que lleva el concepto de los servlet para generar servicios web. Si vamos a una definición de Rest (http://diegograf.blogspot.com/2009/08/una-alternativa-mas-simple-soap-en-lo.html) veremos que la idea principal es hacer servicios web simples.

La simpleza puede verse de quien consume el servicio web. Restlet hace simple el desarrollo de web services. Veamos un “hola Mundo” usando Restlet 2.0

1. package firstSteps;

2.

3. import org.restlet.resource.Get;

4. import org.restlet.resource.ServerResource;

5.

6. /**

7. * Resource which has only one representation.

8. *

9. */

10. public class HelloWorldResource extends ServerResource {

11.

12. @Get

13. public String represent() {

14. return "hello, world";

15. }

16.

17. }

Vemos que hemos creado un recurso el cual se va a publicar por medio del método GET. Ahora hagamos una aplicación:

1. package firstSteps;

2.

3. import org.restlet.Application;

4. import org.restlet.Restlet;

5. import org.restlet.routing.Router;

6.

7. public class FirstStepsApplication extends Application {

8.

9. /**

10. * Creates a root Restlet that will receive all incoming calls.

11. */

12. @Override

13. public Restlet createRoot() {

14. // Create a router Restlet that routes each call to a

15. // new instance of HelloWorldResource.

16. Router router = new Router(getContext());

17.

18. // Defines only one route

19. router.attach("/hello", HelloWorldResource.class);

20.

21. return router;

22. }

23. }

Como vemos creamos un router el cual es el encargado de publicar nuestro servicio web. Ahora configuramos el contexto para que cuando le enviemos un pedido a una URL, nuestro servidor lo delegue al servlet de rest.

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

2. <web-app id="WebApp_ID" version="2.4"

3. xmlns="http://java.sun.com/xml/ns/j2ee"

4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

5. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

6. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

7. <display-name>first steps servlet</display-name>

8.

9. <context-param>

10. <param-name>org.restlet.application</param-name>

11. <param-value>

12. firstSteps.FirstStepsApplication

13. </param-value>

14. </context-param>

15.

16.

17. <servlet>

18. <servlet-name>RestletServlet

19. <servlet-class>

20. org.restlet.ext.servlet.ServerServlet

21. </servlet-class>

22. </servlet>

23.

24. <!-- Catch all requests -->

25. <servlet-mapping>

26. <servlet-name>RestletServlet</servlet-name>

27. <url-pattern>/*</url-pattern>

28. </servlet-mapping>

29. </web-app>

Bueno con eso estamos, mmm…

Todavía nos faltan los jars por suerte se pueden importar con maven. Dejo el link para configurar el repositorio de restlet http://www.restlet.org/downloads/maven

Si no podemos instalar los jars necesitamos 2 :

org.restlet.jar

org.restlet.ext.servlet_2.5.jar

Lo pueden bajar de http://www.restlet.org/downloads/2.0/restlet-jse-2.0m4.zip e instalar de esta forma :

mvn install:install-file -DgroupId=org.restlet -DartifactId= org.restlet -Dversion=2.0.0 -Dpackaging=jar -Dfile=dondeDejasteElJar/elJar.jar

mvn install:install-file -DgroupId=org.restlet -DartifactId= org.restlet.ext -Dversion=2.0.0 -Dpackaging=jar -Dfile=dondeDejasteElJar/elJar.jar

1. <dependency>

2. <groupId>org.restlet</groupId>

3. <artifactId>org.restlet</artifactId>

4. <version>2.0.0</version>

5. </dependency>

6. <dependency>

7. <groupId>org.restlet</groupId>

8. <artifactId>org.restlet.ext</artifactId>

9. <version>2.0.0</version>

10. </dependency>

Levanten el jetty o tomcat y luego http://127.0.0.1/contexto/ hello y hay esta nuestro servicio!!

domingo, 9 de agosto de 2009

¿Qué es OSGi?


Se preguntan ¿Qué es OSGi? y supongo que todos hemos usado eclipse alguna vez y con eclipse, equinox. Equinox es un contenedor OSGi implementado por eclipse.

Equinox, es el contenedor en donde viven los plugins, donde pueden convivir entre ellos y comunicarse con el core de eclipse.

Bueno en pocas palabras eso es OSGI, OSGi proporciona funciones más parecidas a un contenedor web, pero es más versatil. Un contenedor web (Tomcat) te permite cargar varias aplicaciones que trabajan de manera independiente. El aislamiento de las aplicaciones se logra a través de diferentes "class loaders" (cargadores de clases?). De esta forma, una aplicación queda aislada de los efectos de otras -ya que las clases son cargadas en memoria de manera independiente-. OSGi proporciona dicha función, pero no pone restricciones en las aplicaciones (no tienen que ser servlets o aplicaciones web). OSGi es más flexible. OSGi permite que aplicaciones cooperen con otras a través de interfaces declaradas en archivos de configuración. Así, por ejemplo, puedes cargar dos aplicaciones que comparten las mismas componentes comunes, sin que las clases se carguen independientemente en memoria pero sin que una afecte a la otra.

En otras palabras, OSGi te permite crear aplicaciones a partir de componentes. Estos componentes son cargados en distintos class loaders. Dos ( o mas componentes) pueden interactuar entre si únicamente a través de interfaces declaradas explícitamente en archivos de configuración (en xml).

OSGi te permite el cargar o descargar componentes. O cargar diferentes versiones de dos componentes y reemplazar los componentes existentes de manera dinámica. (Tal como Tomcat te permite el cargar y descargar una aplicación web, pero con mucha mayor flexibilidad)

OSGi es utilizado en teléfonos celulares y PDA; me parece que fue esta industria la que creo el concepto y las primeras especificaciones. El aislamiento proporcionado por OSGi permite que la falla en una aplicación o componente no afecte a las aplicaciones que no los usan.

Si has desarrollado plugins para Eclipse entonces ya te abras dado cuenta de que aporta OSGi. Netbeans usa un framework con funcionalidad similar, pero no es OSGi. Mientras que Eclipse esta basado en OSGi (por lo menos el kernel de Eclipse). Cabe mencionar que OSGi no tiene ninguna relación con desarrollo de IDEs o GUIs, pero que el concepto utilizado por Eclipse y/o Netbeans para cargar los plugins es similar a la funcionalidad proporcionada por OSGi.

OSGi también proporciona especificaciones para seguridad. (Por ejemplo, para cargar únicamente componentes que han sido firmados y verificados en su integridad).

Sin embargo, yo no he notado que se generalice el uso de OSGi. (Basta con buscar empleo con la palabra OSGi como termino de búsqueda para darse cuenta que aun no se usa mas que en ciertos nichos o en en algunos start-up).

OSGi es solo una especificación. Hay diferentes implementaciones. Wikipedia puede darte más información al respecto.

Existen varios frameworks OSGI como equinox, o apache felix. Ahí les dejo los links.



sábado, 8 de agosto de 2009

Maven para desmemoriados!!!

Normalmente usamos maven, pero normalmente no creamos un proyecto, no instalamos un jar o configuramos plugins, por esta razón nuestra memoria nos juega una mala pasada.

Para todos los no memoriosos dejo este link para recordar comandos en maven:

http://jcesarperez.blogspot.com/2009/08/chuleta-maven.html

miércoles, 5 de agosto de 2009

“El que sabe cuándo puede luchar y cuando no, saldrá victorioso.”

Como este blog también es para humanos, voy a hacer un post no informático.

Estoy leyendo un libro llamado “El arte de la guerra” es un libro escrito por Sun Tzu

El núcleo de la filosofía de Sun Tzu sobre la guerra descansa en estos dos principios:


Todo el Arte de la Guerra se basa en el engaño.
El supremo Arte de la Guerra es someter al enemigo sin luchar.

Dejo unos párrafos que me gustaron en demasía:

Así pues, los verdaderamente hábiles en la guerra someten al ejército enemigo sin batallar. Capturan las ciudades enemigas sin asaltarlas, y se apoderan del estado enemigo sin campañas prolongadas. Su meta es tomar intacto todo cuanto hay bajo el cielo, mediante consideraciones estratégicas. Como resultado, sus tropas no se desgastarán, y las ganancias serán completas. Este es el arte de la estrategia ofensiva.

En consecuencia, el arte de usar tropas es éste: Si se es diez veces superior al enemigo, rodeadle. Si se es cinco veces más fuerte, atacadle. Si se tiene el doble de fuerzas, divididle. Si se está a la par, superadle mediante un buen plan. Si se está en inferioridad numérica, sed capaces de mantener abierta una vía de retirada. Y si se está en desventaja en todos los aspectos, sed capaces de eludirle, pues una fuerza pequeña no es nada excepto botín para una más poderosa, si se enfrenta a ella temerariamente.

Por otra parte, hay cinco casos en los que puede predecirse la victoria:

  • El que sabe cuándo puede luchar y cuando no, saldrá victorioso.
  • El que comprende cómo luchar, de acuerdo con las fuerzas del adversario, saldrá victorioso.
  • Aquél cuyas filas estén unidas en un propósito, saldrá victorioso.
  • El que está bien preparado y descansa a la espera de un enemigo que no esté bien preparado, saldrá victorioso.
  • Aquel cuyos generales son capaces y no sufren interferencias por parte de su soberano, saldrá victorioso.

el comandante hábil toma una posición en la que no puede ser derrotado, y no pierde la oportunidad de vencer a su enemigo. Un ejército victorioso siempre busca batalla después de que sus planes le indiquen que la victoria es posible, mientras que un ejército destinado a la derrota lucha con la esperanza de vencer, pero sin ningún plan. Los que son expertos en la guerra cultivan sus políticas y se adhieren estrictamente a las reglas trazadas. De este modo, tienen en su poder el control de los acontecimientos.

Lo mejor de todo es que ustedes también pueden leerlo, una publicación en: http://www.gorinkai.com/textos/suntzu.htm

A medida que vaya adelantando en la lectura, comparto los que para mi son buenos parrafos.

Jetty no es para producción ?


Jetty es un servidor HTTP y un contenedor de Servlets escrito en Java. Jetty se publica como un proyecto de software libre bajo la licencia Apache 2.0.

Debido a su pequeño tamaño, Jetty se complementa para ofrecer servicios Web en una aplicación Java empotrada.

Jetty es una gran herramienta de desarrollo ya que configurando un plugin de maven podemos tener nuestras aplicaciones web listas para probar. En este link detalla como hacer esto: http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin De esta forma al hacer mvn jetty:run va a levantarse el servidor jetty.

Pero este pequeño servidor puede usarse para producción?

Claro que SI !!!

Y si no me creen, lean este link: http://www.infoq.com/news/2009/08/google-chose-jetty en el que explica porque Google eligió a jetty como servidor para su servicio Google App Engine.

Y ustedes que utilizan como servidor web ?

martes, 4 de agosto de 2009

En los detalles esta el diablo

Hoy me apareció un cartel preguntando si deseaba actualizar la jre de java, bueno dale!
Sorprendido vi esto:


Claramente el Gigante rojo comenzó la fusión. Porque vean el logo de sun, no era azul?

Me estoy volviendo paranoico o de a poco se ve la compra ?

Que opinan? La compra de oracle afectara a java?


sábado, 1 de agosto de 2009

Super Saiayin, con el qi al maximo!!!!


Quien alguna vez no miro dragon ball z y se volvio loco cuando Goku aumentaba su ki para pelear contra vegeta o para transformarse en super saiayin?

El qì o ki es el término empleado para referirse a la bioenergía o energía biológica según la tradición de China y otros países de Extremo Oriente (Japón, Corea). De acuerdo a la medicina tradicional china, el qì es una energía que fluye naturalmente por la Naturaleza, y la interrupción de su libre flujo en el cuerpo es la base de los trastornos físicos y psicológicos.

Los practicantes de ciertas disciplinas afirman que el ser humano puede controlar y utilizar esta energía, a través de diversas técnicas, acrecentándola, acumulándola y distribuyéndola por todo el cuerpo o usarla en forma concentrada, como en el Tàijíquán, el Aikido u otras artes marciales. Otros afirman poder curar cierto número de enfermedades y otros efectos liberando el libre flujo del qì por el cuerpo humano. Éste es el caso de medicinas alternativas como el reiki, la acupuntura la digito puntura y de algunas disciplinas como el qìgōng.

Qi4j™ es una implementación de Composite Oriented Programming usando el java 5 como estándar.

Composite Oriented Programming está construido sobre principios que no están dirigidos por POO. Los principios son:

- Un objeto depende de su contexto (este problema hoy no lo resuelve POO)

- Modelos desacoplados son una virtud

- Reglas de negocio como prioridad

- Las clases murieron, Larga vida a las interfaces.

Un objeto depende de su contexto

Este concepto se pueden resumir en un ejemplo: yo en la facultad soy estudiante, en el trabajo soy empleado y así sustantivamente...

Es decir un objeto cambia según su contexto. El problema de la POO es que no está totalmente orientada a objeto sino es un modelo orientado a Clases. Es decir que hay objetos que dependiente del contexto, son de una o otra clase.

Modelos desacoplados son una virtud

Modelos desacoplados es lo más importante, que debes pensar cuando programas. Si vos pensas clases desacopladas, piensas en clases reutilizables. Cuando una clase referencia a otra y otra referencia a otra ... Así sustantivamente, una cadena que no termina. Esto hace que se pierda la reutilización.

Programación Orientada a Objetos sufre mucho de esto, y se han introducido mecanismos en el tiempo para contrarrestar esta problema. Lo mejor que se puede manejar es la funcionalidad del sus sistema; estos sus sistemas suelen relacionarse con infraestructura de la aplicación pero no con objetos del modelo. Hay que escribir objetos del modelo cada vez, y muchas son muy similares.

Reglas de negocio como prioridad

Cuando pensamos un problema la mayoría de los desarrolladores, pensamos en frameworks, bases de datos, infraestructura. Esto está mal ya que lo principal es el modelo de dominio. El Modelo de dominio refleja la necesidad actual.

Si la mayoría de los desarrolladores pueden centrarse en las reglas de negocio y modelo de dominio, y no tener que preocuparse por cuestiones de cualquier infraestructura, como la persistencia, las transacciones, la seguridad o de los frameworks.



Qi4j ™ está tratando de resolver las deficiencias de la POO.

Qi4j ™ no es un Framework. Es una nueva forma de escribir código.

Fuente: www.qi4j.com