Dynamic Languages Web Frameworks Indicthreads 2009

download Dynamic Languages Web Frameworks Indicthreads 2009

If you can't read please download the document

Transcript of Dynamic Languages Web Frameworks Indicthreads 2009

  1. 1. Dynamic Languages & Web Frameworks in GlassFish v3 Arun Gupta (blogs.sun.com/arungupta, @arungupta) Sun Microsystems, Inc.
  2. 2. What is a Dynamic Language ?
    • Broadly a language that allows a program to change its own code at runtime
      • Evaluate data as code ("The name is: #{@name}" )
      • 3. Manipulate code as data ({"name"=>"Duke"}.each {|data| puts data})
      • 4. High order functions
      • 5. Dynamic Typing
      • 6. Closures, Continuations, Macros, ...
    • Simple, human-readable syntax
    • 7. List, Ruby, Python, Groovy, ...
  3. 8. Web Frameworks
    • Full-stack
      • Object relational mapping
      • 9. MVC-pattern
      • 10. Templating
      • 11. JavaScript library
      • 12. Extension points
    • Agile Development
      • No compile, redeploy, restart cycles
      • 13. Testing built into the framework
  4. 14. Design Principles
    • Convention over Configuration (CoC)
      • Common cases easily served
      • 15. Encourages standard practices
      • 16. Everything simpler and smaller
    • Don't Repeat Yourself (DRY)
      • Framework written around minimizing repetition
  5. 17. What is GlassFish ?
    • A community
      • Users, Partners, Testers, Developers, ...
      • 18. Started in 2005 on java.net
    • Application Server
      • Enterprise Quality and Open Source
      • 19. Java EE Reference Implementation
      • 20. Full Commercial Support from Sun
  6. 21. Sun GlassFish Enterprise Server GlassFish Open Source Application Server Customer Focused Support Team Patches & Upgrades 24x7 Support Customer Advocate Sun VIP Interoperability Support Enterprise Manager eLearning Credit
  7. 22. GlassFish v3
    • Modular:
      • Maven 2 Build & Module description
      • 23. Felix OSGi runtime (216 bundles)
      • 24. Allow any type of Container to be plugged
        • Start Container and Services on demand
    • Embeddable: runs in-VM
    • 25. Extensible
      • Rails, Grails, Django, ...
  8. 26. GlassFish v3 Architecture GlassFish Kernel Security Rails Grails Web Config Injection Naming Grizzly Bundles Repositories HK2 Services OSGi Runtime
  9. 27. Dynamic Languages & Frameworks http://glassfish-scripting.dev.java.net
  10. 28.
    • Ruby interpreter written in Java
    • 29. Current Version: 1.4.0
    • 30. Ruby 1.8.6 compatible
    • 31. Some Ruby 1.9 support
      • --1.9 flag
      • 32. 80% of 1.9.1
    • 9 Active committers
    What is? http://jruby.kenai.com/presentations/JRubyConf%2009%20Keynote.pdf
  11. 33. Compatibility
    • ~37,000 passing rubyspecs
    • 34. ~22,000 passing assertions
    • 35. Continuous Integration
      • On commit ~3 Java versions * 4 vendors
      • 36. Nightly: 30 minute full run
  12. 37.
    • Solid performance ( Ruby 1.9)
      • Startup is poor, execution usually better than 1.9
    • Runs native threads
    • 38. Foreign Function Interface (FFI) for C libraries
    • 39. Runs Rails great!
  13. 40.
    • Full-stack Web development MVC framework in Ruby
    • 41. Current Version: Rails 2.3.4
    • 42. Getting Started
      • Install Rails: jruby -S gem install rails
      • 43. Generate Rails app: jruby -S rails helloworld
    What is?
  14. 44. Rails Deployment Choices Credits: http://birdwatchersdigest.com
  15. 45. Directory-based Deployment: How ? jruby -S rails helloworld asadmin start-domain asadmin create-jvm-options -DJRUBY_HOME=... asadmin deploy railsconf
  16. 46. Directory-based: Capistrano Recipes http://wiki.glassfish.java.net/Wiki.jsp?page=DeployUsingCapsitrano
  17. 47. Rails Development using NetBeans 6.8 http://blogs.sun.com/arungupta/entry/screencast_26_develop_run_debug
  18. 48. Rails Deployment: GlassFish Gem
  19. 49. GlassFish Gem: How ? jruby -S rails helloworld jruby -S gem install glassfish cd helloworld jruby -S glassfish
  20. 50. Single Threaded Rails < v 2.2
  21. 51. Multi Threaded Rails or Merb or ...
  22. 52. GlassFish Gem: Capistrano Recipes http://wiki.glassfish.java.net/Wiki.jsp?page=DeployUsingCapsitrano
  23. 53. GlassFish Gem Options jruby -S glassfish -h -n:Number of JRuby runtimes to create initially --runtimes-min:Minimum runtimes --runtimes-max:Maximum runtimes -c : change the context root -e : environment -d : Runs as daemon -P : location of PID file -l : log file location -log-level : Logging level (0-7)
  24. 54. Demo GlassFish Gem http://blogs.sun.com/arungupta/entry/totd_76_jruby_1_2
  25. 55. GlassFish Gem in Production
    • Easy,greendeployment
      • Reverse proxy not required
      • 56. JRuby runtime pool provides required scaling
        • Rails is single threaded by default
      • MT frameworks scales automatically
        • JRuby and JVM support native threads
    • Configuration using glassfish.yml
  26. 57. Optional front-ending http://blogs.sun.com/arungupta/entry/totd_81_how_to_use http://blogs.sun.com/arungupta/entry/totd_84_using_apache_mod
  27. 58. Rails Deployment: WAR-based
  28. 59. WAR-based: How ? jruby -S gem install warbler cd helloworld jruby warble config Edit config/warble.rb Include gems, Change RAILS_ENV jruby warble asadmin deploy helloworld.war jruby -S rails helloworld
  29. 60. WAR Deployment: Packaging
  30. 61. Demo WAR-based Deployment http://blogs.sun.com/arungupta/entry/totd_73_jruby_and_glassfish
  31. 62. JRuby Module onGlassFish Update Center
  32. 63. Ruby Rack Support
    • Rack - A Web server interface
    • 64. Plugin any Rack compliant framework
      • Rails, Merb, Sinatra, Ramaze, Campsite, ...
    • Rack support in GlassFish
      • GlassFish Gem
        • Plugin any Rack metal (such as RackCache)
      • GlassFish v2 & v3 through Warbler
    • Use your own framework
      • Rackup script
      • 65. jruby.applicationType property
  33. 66. Ruby Application Auto-detection
  34. 67. Performance
    • Need JVM tuning for production
      • Use Server profile where possible (- server )
    • GC settings
      • -XX:+DisableExplicitGC,-XX:NewRatio=2
    • Memory settings
      • Use large settings for -Xmx -Xms and -XX:MaxPermSize
      • 68. Use at least 20 MB perm gen space for each JRuby runtime
  35. 69. Scaling
    • Rails is single-threaded by default
    • 70. Setup JRuby runtime pool
      • With gem
        • glassfish -n 3 runtime-min 2 runtime-max 4
    • 2 HTTP Worker Threads per runtime
    • 71. Turn on file caching
      • network-config>protocols>protocol>http>file-cache#enabled
    • MT frameworks (Rails > 2.2, Merb)
      • No configuration needed
  36. 72. Rails Monitoring
    • Basic Monitoring
      • jinfo : System properties and VM CLI flags
      • 73. jmap : Shared object memory map
      • 74. jstack : Stack traces of Java threads
      • 75. jstat : Performance stats on class, JIT compiler, GC
    • Advanced
      • jconsole / Visual VM
      • 76. NewRelic, FiveRuns, ...
  37. 77. Rails Monitoring in GlassFish v3
    • asadmin enable-monitoring level jruby-container=HIGH
    • 78. asadmin list monitor=true *
    • 79. asadmin list monitor=true *jruby*
    • 80. asadmin list-probes | grep jruby
    • 81. dtrace or JavScript-based monitoring
    http://blogs.sun.com/arungupta/entry/totd_104_glassfish_v3_monitoring
  38. 82. Endorsements Look like thebest deploying optionI ever found for Rails, GREAT!theeasiest rails stack in the world, jruby 1.2rc, rails 2.3rc, glassfish v3 ... too easyto run jruby/rack/ glassfish behind nginx leading the way to simple,scalable, no-hassle hostingforRuby web applications. ... it's true one-step deployment . hadno reliability and performance issueswith Glassfish money is onJRuby (and Glassfish) for the long haul ; if you haven't checked out Glassfish yet, you're doing yourself a disservice! nice way to deploy andmanage my app whileleaving things open for scaling
  39. 83. Who loves Rails on GlassFish ?
  40. 85. What is?
    • Agile dynamic language for the JVM
    • 86. Seamlessly integrates with all existing Java objects & libraries
      • Compiles straight to bytecode
    • Current version: 1.6.7
    • 87. groovy -e "println 'Hello ' + args[0]" World
  41. 88. What is?
    • MVC Web framework for the Java platform
      • Persistence framework (Hibernate)
      • 89. Templating using GSP (Groovy Server Pages)
      • 90. Tag libraries to create web page components
      • 91. Good Ajax support
      • 92. Web server & automatic resources reload
    • Current Version: 1.1.2, 1.2 RC1 released 12/5
  42. 93. Grails Hello World
    • Create app: grails create-app bookstore
      • Create domain class: grails create-domain-class book
      • 94. Edit grails-app/domain/Book.groovy and add attributes
      • 95. Create controller: grails create-controller Book
      • 96. Edit grails-app/controllers/BookController.groovy
      • 97. Add scaffold: def scaffold = Book
    • Run app: grails run-app
  43. 98. Grails on GlassFish App Server
    • Create WAR: grails war
    • 99. Deploy: asadmin deploy helloworld-0.1.war
  44. 100. Demo Grails & GlassFish http://blogs.sun.com/arungupta/entry/getting_started_with_grails_on http://blogs.sun.com/arungupta/entry/totd_75_getting_started_with http://blogs.sun.com/arungupta/entry/grails_on_glassfish_v3_embedded http://blogs.sun.com/arungupta/entry/tic_tac_toe_using_rails
  45. 101. Grails Module on GlassFish Update Center
  46. 102. Efficient Deployment
    • Grails Application WAR
      • Large
        • Over 48 Grails dependent JARs
        • 103. ~20MB for a simple app
      • Expensive to bundle in single WAR
      • 104. Issues when hot deployment is required
  47. 105. GlassFish proposes light-weight WAR
    • Don't package dependencies!
    • 106. Smaller WAR file: ~200KB vs ~20MB
    • 107. GlassFish knows how to find dependencies
    • 108. Only one copy of dependencies in GlassFish
      • Less memory consumption and deployment speed-up
    • $ grails shared-war
    • 109. With Grails 1.1 usenojars option
    • 110. $ asadmin deploy helloworld-0.1.war
  48. 111. GlassFish/Grails: Coming up ...
    • Use grails nojars
      • JIRA-5174, JIRA-5175
    • grails install-plugin glassfish global
      • grails run-app
    • asadmin deploy grailsApp
  49. 113. What is?
    • Implementation of Python in Java
      • Seamless integration of Python and Java
      • 114. Java Python
      • 115. Just Python
      • 116. Dynamic compilation to Java bytecodes
    • Jython 2.5.1 released (Sep 2009)
    • 117. Works with Django 1.0
  50. 118. What is?
    • MVC-based framework written in Python
      • Object-relational mapper
      • 119. A lightweight, standalone Web server
      • 120. A regular expression based URL dispatcher
      • 121. A templating system
      • 122. A caching framework
      • 123. An internationalization system
      • 124. . . .
  51. 125. GlassFish Deployment
    • Deploy as WAR
      • Modjy
        • Servlet, ServletContextListener + WSGI Implementation
        • 126. Integrated with Jython 2.5
    • Pure Django Deployment
      • Grizzly + WSGI => Django
      • 127. No WAR, no packaging
      • 128. asadmin deploy myDjangoApp
  52. 129. How does it work ?
    • Download Jython
    • 130. Install Django (jython25 setup.py install)
    • 131. GlassFish v3 Jython OSGi module from UC
    • 132. asadmin create-jvm-options -Djython.home=...
    • 133. cd DjangoApp
    • 134. asadmin deploy .
  53. 135. Jython Module on GlassFish Update Center
  54. 136. Demo Django & GlassFish http://blogs.sun.com/arungupta/entry/totd_85_getting_started_with
  55. 137. http://blogs.sun.com/arungupta/entry/tic_tac_toe_using_rails
  56. 138. Java EE & Dynamic Languages
    • JavaEE is a mature and robust platform
      • Servlet, EJB, JMS, JAX-RS, JAX-WS...
    • Hybrid Rails and Servlet/JSP application
      • Forward to and from Rails to Servlet/JSP
      • 139. HTTPSession as Rails session
      • 140. ServletRequest/Response API available to Rails
    • JDBC connection pool
    • 141. JMS: Async messaging in Rails
  57. 142. Servlet 3.0 Pluggability
    • JavaEE 6 and Dynamic Languages
      • No boilerplate web.xml
      • 143. Dynamically add ServletFilter and ServletContextListener
    • Simple packaging
      • No need to package as WAR, No Warbler
      • 144. Place application inside WEB-INF directory
  58. 145. References
    • glassfish.org
    • 146. glassfish-scripting.dev.java.net
    • 147. sun.com/glassfish
    • 148. blogs.sun.com/theaquarium
    • 149. twitter.com/glassfish
    • 150. [email_address]
  59. 151. Dynamic Languages & Web Frameworks in GlassFish v3 Arun Gupta (blogs.sun.com/arungupta, @arungupta) Sun Microsystems, Inc.