0
Jobsket.com  Grails en un proyecto real
<ul><li>Co-fundador de Jobsket
Desarrollador Java, Grails, PHP, Rails...
Google Summer of Code 2008 en Grails para The Codehaus
Más en:  www.jobsket.es/cv/dani  :) </li></ul>¿Y quién es este tío?
Índice <ul><li>¿Qué es Jobsket?
¿Y Grails?
La “magia” de Groovy
Grails en Jobsket </li></ul>
¿Qué es Jobsket?
Demo http://www.youtube.com/watch?v=ipw1f54AaDQ
Algunos miembros del sector de empleo <ul><li>Infojobs
Trovit
Monster
Infoempleo
Xing
Redtrabaj@
... </li></ul>
Team!!
Equipo! <ul><li>Los 3 fundadores somos técnicos
Martín Pérez(Dublín – A Coruña): Superprofesional del software con +10 años trabajando con Java. Terminó como senior archi...
Jordi Monné(Barcelona – Lleida): Hacha con Spring y profundo conocedor de Lucene. Ex-JavaConGanas </li></ul>
Grails
<ul><li>Framework web “full stack” para la plataforma Java
Escrito en Java y Groovy
Basado en conocidos proyectos Java: Spring, Hibernate, Tomcat, Sitemesh, Log4j, HSQLDB...
Inspirado en Ruby on Rails
Open Source: Licencia Apache 2
Mantenido principalmente por SpringSource(división de VMWare) </li></ul>¿Qué es Grails?
Don't repeat yourself <ul>“ El mejor código es el que no existe”  - Autor: ¿? </ul>
Convention over Configuration http://geekandpoke.typepad.com/geekandpoke/2008/06/simply-explaine.html
Artefactos de una app Grails <ul><li>Clases de dominio(GORM)
Servicios
Controladores
Vistas
Librerías de tags </li></ul>
Upcoming SlideShare
Loading in...5
×

Jobsket.com, Grails en un proyecto real

3,211

Published on

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,211
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
31
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Transcript of "Jobsket.com, Grails en un proyecto real"

  1. 1. Jobsket.com Grails en un proyecto real
  2. 2. <ul><li>Co-fundador de Jobsket
  3. 3. Desarrollador Java, Grails, PHP, Rails...
  4. 4. Google Summer of Code 2008 en Grails para The Codehaus
  5. 5. Más en: www.jobsket.es/cv/dani :) </li></ul>¿Y quién es este tío?
  6. 6. Índice <ul><li>¿Qué es Jobsket?
  7. 7. ¿Y Grails?
  8. 8. La “magia” de Groovy
  9. 9. Grails en Jobsket </li></ul>
  10. 10. ¿Qué es Jobsket?
  11. 11. Demo http://www.youtube.com/watch?v=ipw1f54AaDQ
  12. 12. Algunos miembros del sector de empleo <ul><li>Infojobs
  13. 13. Trovit
  14. 14. Monster
  15. 15. Infoempleo
  16. 16. Xing
  17. 17. Redtrabaj@
  18. 18. ... </li></ul>
  19. 19. Team!!
  20. 20. Equipo! <ul><li>Los 3 fundadores somos técnicos
  21. 21. Martín Pérez(Dublín – A Coruña): Superprofesional del software con +10 años trabajando con Java. Terminó como senior architect/contractor en Irlanda.
  22. 22. Jordi Monné(Barcelona – Lleida): Hacha con Spring y profundo conocedor de Lucene. Ex-JavaConGanas </li></ul>
  23. 23. Grails
  24. 24. <ul><li>Framework web “full stack” para la plataforma Java
  25. 25. Escrito en Java y Groovy
  26. 26. Basado en conocidos proyectos Java: Spring, Hibernate, Tomcat, Sitemesh, Log4j, HSQLDB...
  27. 27. Inspirado en Ruby on Rails
  28. 28. Open Source: Licencia Apache 2
  29. 29. Mantenido principalmente por SpringSource(división de VMWare) </li></ul>¿Qué es Grails?
  30. 30. Don't repeat yourself <ul>“ El mejor código es el que no existe” - Autor: ¿? </ul>
  31. 31. Convention over Configuration http://geekandpoke.typepad.com/geekandpoke/2008/06/simply-explaine.html
  32. 32. Artefactos de una app Grails <ul><li>Clases de dominio(GORM)
  33. 33. Servicios
  34. 34. Controladores
  35. 35. Vistas
  36. 36. Librerías de tags </li></ul>
  37. 37. Más caractarísticas interesantes <ul><li>Scaffolding estático y dinámico
  38. 38. I18n
  39. 39. Framework de testing
  40. 40. Soporte REST
  41. 41. Cientos de plugins </li></ul>
  42. 42. Más proyectos Grails en España <ul><li>ringio.com
  43. 43. bkool.com
  44. 44. sellomovistar.es
  45. 45. Ayuntamiento Vitoria( blogs.vitoria-gasteiz.org/ti )
  46. 46. cuestamenos.com
  47. 47. eljuegodelmundial.com( 1 mill páginas, hasta 40.000 visitas en media hora )
  48. 48. SAYC ( Sistema de acceso y control de usuarios para Yell Publicidad)
  49. 49. ticketbis.com </li></ul>
  50. 50. Comunidad hispana <ul><li>groovy.org.es
  51. 51. grails.org.mx
  52. 52. observatoriodegrails.com
  53. 53. groups.google.es/group/grailsencastellano
  54. 54. ¿grhispano.com? :P </li></ul>
  55. 55. Groovy
  56. 56. Características de Groovy <ul><li>Lenguaje dinámico para la JVM
  57. 57. Basado en las fortalezas de Java y en características de Ruby, Python y Smalltalk
  58. 58. Menos ceremonosio y más expresivo que Java
  59. 59. Curva de aprendizaje suave para programadores Java
  60. 60. No existen tipos primitivos
  61. 61. Compilado o script </li></ul>
  62. 62. La “magia” de Groovy <ul><li>Imports por defecto(java.util.*, java.io.*, java.net.*, groovy.util.*, BigDecimal, BigInteger)
  63. 63. Compilación cruzada(joint compiling)
  64. 64. El GDK extiende el JDK
  65. 65. Unit testing y mocking “out-of-the-box”
  66. 66. Expandos y MOP para añadir o modificar métodos y atributos en tiempo de ejecución </li></ul>
  67. 67. Groovy es más que Grails <ul><li>Griffon: “el grails” para el escritorio
  68. 68. Easyb: framework de testing BDD
  69. 69. Gaelyk: framework web para AppEngine
  70. 70. Gant: DSL de Ant
  71. 71. Spock: (otro)framework de testing BDD
  72. 72. Gmock: framework de mocking
  73. 73. Play!: sólo en su sistema de templates
  74. 74. ... </li></ul>
  75. 75. Grails en Jobsket
  76. 76. Arquitectura
  77. 77. Cifras <ul><li>Grails 1.2.2
  78. 78. 3 instancias de Tomcat
  79. 79. 3 bases de datos MySQL
  80. 80. 70000 líneas de código
  81. 81. Aproximadamente el 70% es Java
  82. 82. 20 crawling threads </li></ul>
  83. 83. ¿Y cómo es ese 70-30? <ul><li>Utilizamos Groovy en: </li><ul><ul><ul><li>Controllers
  84. 84. TagLibs
  85. 85. Tests
  86. 86. Filters </li></ul></ul></ul><li>Objetivo: Maximizar la productividad con nuestro conocimiento en Java + Plataforma Grails </li></ul>
  87. 87. http://geekandpoke.typepad.com/geekandpoke/2008/04/clash-of-cultur.html
  88. 88. Herramientas Java que usamos <ul><li>Spring Framework
  89. 89. Hibernate
  90. 90. Compass
  91. 91. Hudson
  92. 92. Más librerías: Lucene, Commons, POI, JasperReports/iReport, FOP... </li></ul>
  93. 93. Spring Framework <ul><li>Base de la infraestructura de Grails y es natural utilizarlo
  94. 94. Los servicios de Grails están disponibles en el contexto por convención
  95. 95. resources.xml: Configuración típica con XML
  96. 96. Annotations de Spring
  97. 97. resources.groovy: DSL en groovy </li></ul>
  98. 98. Hibernate <ul><li>Por estar debajo de GORM ya está integrado
  99. 99. Miedo a que Grails no nos sirviera
  100. 100. Múltiples DataSources </li><ul><ul><ul><li>GORM en una db
  101. 101. HibernateDaoSupport para la otra </li></ul></ul></ul></ul>
  102. 102. Compass <ul><li>Framework que facilita la integración de búsquedas full-test con Lucene
  103. 103. No nos servía el plugin Searchable
  104. 104. Integración como en cualquier proyecto Java: </li><ul><ul><ul><li>Configuración XML
  105. 105. Anotación @Searchable </li></ul></ul></ul></ul>
  106. 106. Hudson <ul><li>Servidor de Integración Continua
  107. 107. Existe un plugin para Grails </li></ul>
  108. 108. Sacamos partido a lo “clásico” <ul><li>Modificamos controllers, taglibs, filtros y gsp's sin necesidad de reiniciar el servidor local
  109. 109. Plugins de terceros
  110. 110. Los taglibs para reutilizar lógica de presentación
  111. 111. Tests de integración muy sencillos de implementar
  112. 112. Hemos dividido Jobsket en plugins </li></ul>
  113. 113. Plugins que utilizamos <ul><li>Image Tools
  114. 114. Avatar
  115. 115. Webtest
  116. 116. Grails UI(componentes de Yahoo UI)
  117. 117. Spring WebFlow </li></ul>
  118. 118. Reutilizando elementos de presentación con Taglibs <ul><li>Mucho más simple que con JSP(closure en una clase groovy)
  119. 119. Repetimos menos código en los controllers y es más potente que templates GSP
  120. 120. Los taglibs son testeables
  121. 121. Reutilizables en controllers y otros tags </li></ul>
  122. 122. Probando un controller <ul>class JobOfferControllerTests extends GroovyTestCase { </ul>def jobOffersService void testCreateJobOffer () { def controller = new JobOffersController() controller.jobOffersService = jobOffersService controller.params.title = &quot;Groovy Ninja&quot; controller.params.city = &quot;Santa Cruz&quot; controller.save() assertEquals &quot;/joboffer/index&quot; , controller.response.redirectedUrl def jobOffers = jobOffersService.findAllJobOffers() assertEquals 1 , jobOffers.size() assertEquals &quot;Santa Cruz&quot; , jobOffers[0].city assertEquals &quot;Groovy Ninja&quot; , jobOffers[0].title } }
  123. 123. Aprovechando el dinamismo de Groovy <ul><li>Añadir métodos a clases que no son nuestras </li><ul><ul><ul><li>“ hello”.appendIfNotNull(null) </li></ul></ul></ul><li>Hacer stubbing de nuestras clases en los tests </li><ul><ul><ul><li>mailService.metaClass.sendMail = { u, m-> .... } </li></ul></ul></ul><li>Modificar taglibs estándar de Grails </li></ul>
  124. 124. <ul>¡¡GRACIAS!! ;) ¿Preguntas? http://www.slideshare.net/jobsket Email: [email_address] Blog: www.danilat.com/weblog Twitter: @dani_latorre </ul>Se acabó
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×