Scala Web Frameworks: Looking Beyond Lift

Total Page:16

File Type:pdf, Size:1020Kb

Scala Web Frameworks: Looking Beyond Lift The Functional Web Editor: Steve Vinoski • [email protected] Scala Web Frameworks: Looking Beyond Lift Dean Wampler • Think Big Analytics cala is a hybrid object-oriented and func- Zenexity, has worked hard to create a developer- tional programming language for the Java friendly experience. S Virtual Machine (JVM) that’s growing in Installing Play is easy. You download the zip popularity. Two previous Functional Web columns file, expand it in a location of your choosing, and presented the Lift framework, the best-known add the base directory to your environment’s PATH Web framework written in Scala.1,2 In terms of its variable, so the play command is on your path. prominence and full feature set, Lift is the Scala To install the Scala module, run this analog of the Ruby world’s Ruby on Rails. command: But other frameworks exist in the Scala world, just as alternatives exist to Rails in the play install scala Ruby world. One size doesn’t fit all needs. A full list of Scala frameworks is available at http:// Now you can create a Scala Web application in a doi.ieeecomputersociety.org/10.1109/MIC. directory of your choosing: 2011.104. Some are full-stack frameworks for building multi-tier applications. Others are “point” play new SampleScalaApp --with scala tools for specific parts of an application, like tem- play run plate libraries for generating webpages (analog- ous to Java Server Pages). Still others focus on The new application SampleScalaApp is now building particular kinds of networked servers, in a directory of the same name. Play’s built-in like REST response servers that are “headless.” Web server starts via the run command. By Space considerations prevent us from dis- default, it listens for requests on port 9000. If cussing all these tools. It’s hard to choose just a you go to http://localhost:9000 in your browser, few representative examples, but here I focus on you’ll see the page shown in Figure 1, which three: Play, a full-stack, commercially supported provides instructions for what to do next. application framework; Scalatra, inspired by the The directory structure Play creates for an lightweight, popular Sinatra framework; and application will be familiar to Rails programmers. Finagle, a highly scalable, headless server library. Because Play (and Rails) are designed to grow gracefully as applications become large, Play puts Play code for different application responsibilities in Play (www.playframework.org) is a Java-based separate files so file sizes remain manageable. Web framework with a very capable module The SampleScalaApp/app directory has a architecture that makes it straightforward to view subdirectory for views, which hold the write plug-in modules. Scala support is imple- webpage templates, a models subdirectory for mented as a module. It permits the use of Scala domain classes, and a controllers subdirec- throughout the stack, including webpage tem- tory for the responders to user actions. However, plates and the database query layer. because Scala code doesn’t require the direc- A professional Web application developer tory structure to match the package structure, accustomed to the polish and ease of use provided you can put the files for your controllers by Rails will feel at home with Play. Its creator, and models in the app directory, if you prefer. SEPTEMBER/OCTOBER 2011 1089-7801/11/$26.00 © 2011 IEEE Published by the IEEE Computer Society 87 IC-15-05-funw.indd 87 8/16/11 1:02 PM The Functional Web Template('now -> new Date) } def list = { new Template( "contacts" -> Contact.find( "order by name, firstname ASC"). list()) } ... } The sidebar, “An Aside on Scala Syntax” offers a brief explanation of some Scala features used in this and subsequent examples. Figure 1. Your initial Play application webpage. The list method instantiates a new HTML page Template to format the response. The latter is passed GET / Application.index key-value pairs, in which the keys GET /contacts Application.list are names of variables that will be POST /contacts Application.create referenced in the HTML template — in POST /contacts/{id} Application.save this case, a contacts variable. A GET /contacts/{id} Application.form find method on a singleton named GET /contacts/new Application.form Contact, which corresponds to a POST /contacts/{id}/delete Application.delete domain model object of the same name, is called to query the database # Map static resources in /app/public to the /public URL for all the contacts, ordered by name. GET / staticDir:public The query result is converted to a Figure 2. Routing table for ZenContact in the ZenContact/conf/routes file. Scala list. (At the Java byte-code level, The table covers all the life-cycle steps required to view and manage a list of Contact.find will look exactly like a contacts. static find method defined in a tra- ditional Java class named Contact.) The simple examples that come with value appears in this position in an Here is the Contact domain model the Scala module do just that. incoming URL path. The id will be class defined inZenContact/app/ Configuration of various proper- passed to the controller for use as a models.scala (again simplified for ties, such as the database persistence database lookup key, for example. brevity): settings, occurs in SampleScalaApp/ Using the routes from Figure 2, the conf/application.conf. Routing URL URL http://localhost:9000/contacts package models requests to the controllers that handle will get routed to the list method in /* imports ... */ them is defined in SampleScalaApp/ the Application singleton object, conf/routes. which is defined in ZenContact/ case class Contact( Let’s look at the ZenContact sam- app/controllers.scala, which looks id: Pk[Long], ple application that comes with the like this (simplified slightly for @Required firstname: Scala module to see examples of what brevity): String, these various directories and files @Required name: String, might contain. Figure 2 shows the package controllers @Required birthdate: Date, routing table for ZenContact. It cov- /* imports ... */ @Email email: Option[String] ers all the life-cycle steps required to ) view and manage a list of contacts. object Application extends First, the expression {id} defines a Controller { object Contact extends variable id that will be given whatever def index = { Magic[Contact] 88 www.computer.org/internet/ IEEE INTERNET COMPUTING IC-15-05-funw.indd 88 8/16/11 1:02 PM Scala Web Frameworks: Looking Beyond Lift An Aside on Scala Syntax or readers unfamillar with Scala syntax, here are a few • A method definition begins withdef . Types for return val- F pointers: ues are usually inferred, and parentheses are usually omit- • Compared to Java, Scala import statements use the “_” ted if there are no arguments. The method body begins character instead of “*” as a wildcard. after the “=” sign. • Semicolons are inferred. • Scala supports the syntax key -> value to pass key-value • The object keyword declares a singleton object. The run- pairs to maps and methods that want them. time will only instantiate one instance. Scala uses objects to • Pattern matching is like switch statements on steroids. In hold methods and fields that would be declaredstatic in pattern-matching expressions, each potential match begins Java classes. with the case keyword, followed by a match expression • When the case keyword is used, it adds extra features to and the body to execute if the match succeeds. The match a class, including a corresponding singleton object (called a expression and body are separated by “=>”. companion) with the same name (used for factories, pattern • You subclass with the extends keyword. Using the with matching, and so on). keyword, you can implement pure interfaces or mix in addi- • The whole class body is the primary constructor, so the tional behaviors. Both pure Java-like interfaces and mix-ins constructor argument list is passed after the class name. are defined using a feature called traits. You can handle integration with exceptions used in JDBC. Anorm also method will ignore any rows that Play’s Java-based object-relational embraces the view that SQL itself is don’t match one of the cases, effec- mapping (ORM) layer using annota- the best domain-specific language tively implementing a filter. tions (such as the @Required anno- for talking to your database, so you Play provides a rich, well-designed tation on some of Contact’s fields) should embrace it and not try to hide framework for building multi-tier and having the “companion” single- from it. Anorm makes it easy to con- Web applications that will feel ton Contact extend a Magic class vert back and forth between Scala familiar to the Ruby on Rails devel- that provides the find method, for collections and data from queries or oper moving to Scala. The Scala example. data that’s used for updates. You can module adds powerful APIs that So, what are the benefits of using parse results with pattern match- exploit Scala’s functional program- Scala? All the code you would write ing and a built-in parser combinator ming features. in Java becomes more concise in library. Scala, and you gain the additional Here’s an example query adapted Scalatra benefit of Scala’s rich collections from the Anorm documentation: One popular alternative to Rails library. A great illustration of this is in the Ruby world is a lightweight the new Anorm API in Play’s Scala val countries = framework called Sinatra. It’s ideal module (http://scala.playframework. SQL("Select name,population for quickly building lightweight org). It isn’t a traditional ORM, but from Country")().collect { Web applications with minimal a wrapper for the lower-level Java case Row("France", pop:Int) code, where massive scalability and Database Connectivity (JDBC) API.
Recommended publications
  • Customizing and Extending IBM Content Navigator
    Front cover Customizing and Extending IBM Content Navigator Understand extension points and customization options Create an action, service, feature, and custom step processor Use widgets in apps, mobile development, and more Wei-Dong Zhu Brett Morris Tomas Barina Rainer Mueller-Maechler Yi Duan Ron Rathgeber Nicole Hughes Jana Saalfeld Marcel Kostal Jian Xin Zhang Chad Lou Jie Zhang ibm.com/redbooks International Technical Support Organization Customizing and Extending IBM Content Navigator May 2014 SG24-8055-01 Note: Before using this information and the product it supports, read the information in “Notices” on page xi. Second Edition (May 2014) This edition applies to Version 2, Release 0, Modification 0 of IBM Content Navigator found in IBM FileNet Content Manager (product number 5724-R81), IBM Content Manager (product number 5724-B19), and IBM Content Manager OnDemand (product number 5724-J33). © Copyright International Business Machines Corporation 2012, 2014. All rights reserved. Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. Contents Notices . xi Trademarks . xii Preface . xiii Authors . xiv Now you can become a published author, too! . xvii Comments welcome. xvii Stay connected to IBM Redbooks . xviii Summary of changes . xix May 2014, Second Edition . xix Part 1. Introduction . 1 Chapter 1. Extension points and customization options . 3 1.1 Before you begin . 4 1.1.1 IBM Content Navigator terms . 4 1.2 Development options with IBM Content Navigator . 6 1.2.1 Configuring IBM Content Navigator . 6 1.2.2 Implementing the EDS interface . 7 1.2.3 Implementing a plug-in .
    [Show full text]
  • Open Source Used in Cisco DNA Center Platform Release 1.2.X
    Open Source Used In Cisco DNA Center Platform 1.2.x Cisco Systems, Inc. www.cisco.com Cisco has more than 200 offices worldwide. Addresses, phone numbers, and fax numbers are listed on the Cisco website at www.cisco.com/go/offices. Text Part Number: 78EE117C99-178119203 Open Source Used In Cisco DNA Center Platform 1.2.x 1 This document contains licenses and notices for open source software used in this product. With respect to the free/open source software listed in this document, if you have any questions or wish to receive a copy of any source code to which you may be entitled under the applicable free/open source license(s) (such as the GNU Lesser/General Public License), please contact us at [email protected]. In your requests please include the following reference number 78EE117C99-178119203 Contents 1.1 ajv 5.5.2 1.1.1 Available under license 1.2 ajv-keywords 3.1.0 1.2.1 Available under license 1.3 akkahttp 10.0.9 1.3.1 Available under license 1.4 akkahttpcore 10.0.9 1.5 akkahttpjackson 10.0.9 1.5.1 Available under license 1.6 akkahttptestkit 10.0.9 1.7 akkaslf4j 2.5.6 1.8 akkastream 2.5.6 1.9 api-spec-converter 2.6.0 1.9.1 Available under license 1.10 axios 0.16.2 1.10.1 Available under license 1.11 babel-cli 6.8.0 1.12 babel-cli 6.26.0 1.13 babel-core 6.26.0 1.14 babel-core 6.8.0 1.15 babel-eslint 8.2.2 1.15.1 Available under license 1.16 babel-jest 21.2.0 1.17 babel-jest 21.2.0 1.17.1 Available under license 1.18 babel-plugin-transform-async-to-generator 6.24.1 Open Source Used In Cisco DNA Center Platform
    [Show full text]
  • The Effect of Ajax on Performance and Usability in Web Environments
    The effect of Ajax on performance and usability in web environments Y.D.C.N. op ’t Roodt, BICT Date of acceptance: August 31st, 2006 One Year Master Course Software Engineering Thesis Supervisor: Dr. Jurgen Vinju Internship Supervisor: Ir. Koen Kam Company or Institute: Hyves (Startphone Limited) Availability: public domain Universiteit van Amsterdam, Hogeschool van Amsterdam, Vrije Universiteit 2 This page intentionally left blank 3 Table of contents 1 Foreword ................................................................................................... 6 2 Motivation ................................................................................................. 7 2.1 Tasks and sources................................................................................ 7 2.2 Research question ............................................................................... 9 3 Research method ..................................................................................... 10 3.1 On implementation........................................................................... 11 4 Background and context of Ajax .............................................................. 12 4.1 Background....................................................................................... 12 4.2 Rich Internet Applications ................................................................ 12 4.3 JavaScript.......................................................................................... 13 4.4 The XMLHttpRequest object..........................................................
    [Show full text]
  • Getting Started with Sbt
    Getting Started with sbt Contents Preface ................................... 4 Installing sbt ................................ 4 Tips and Notes ............................ 5 Installing sbt on Mac ............................ 5 Installing from a third-party package ................ 5 Installing from a universal package ................. 5 Installing manually .......................... 5 Installing sbt on Windows ......................... 5 Windows installer ........................... 5 Installing from a universal package ................. 5 Installing manually .......................... 6 Installing sbt on Linux ........................... 6 Installing from a universal package ................. 6 RPM and DEB ............................ 6 Gentoo ................................. 6 Installing manually .......................... 6 Installing sbt manually ........................... 6 Unix .................................. 7 Windows ............................... 7 Hello, World ................................ 8 Create a project directory with source code ............ 8 Build definition ............................ 9 1 Setting the sbt version ........................ 10 Directory structure ............................. 10 Base directory ............................. 10 Source code .............................. 10 sbt build definition files ....................... 11 Build products ............................ 11 Configuring version control ..................... 11 Running ................................... 11 Interactive mode ..........................
    [Show full text]
  • A Web-Based System for Executing Interactive Scala Programming Exercises in Browser
    Aalto University School of Science Master's Programme in Information Networks Anastasia Lipi¨ainen A Web-Based System for Executing Interactive Scala Programming Exercises in Browser Master's Thesis Espoo, November 27, 2016 Supervisor: Professor Lauri Malmi Advisors: Otto Sepp¨al¨aD.Sc. (Tech) Juha Sorva D.Sc. (Tech) Aalto University School of Science ABSTRACT OF Master's Programme in Information Networks MASTER'S THESIS Author: Anastasia Lipi¨ainen Title: A Web-Based System for Executing Interactive Scala Program- ming Exercises in Browser Date: November 27, 2016 Pages: vii + 120 Major: Information Networks Code: SCI3047 Supervisor: Professor Lauri Malmi Advisors: Otto Sepp¨al¨aD.Sc. (Tech), Juha Sorva D.Sc. (Tech) When first introduced to programming, students are often assigned to write mere code snippets that only produce a numerical output with the help of a simple control structure. The students are left unimpressed as they fail to see the real utility that learning to program holds. By assigning students real-world programming problems, such as games and media computation exercises, we showcase real applications for programming. At the beginning of their first programming course, students are already used to working with modern, interactive, and visually impressive interfaces. However, they cannot be expected to produce the graphical user interfaces required to take the full advantage of media content. Previously, we have distributed interfaces implemented with Swing as program code for local execution; the practise does not allow the easy updating of assignment related code and achieving a usable interface is tiresome with the use of Swing. To address the issues of the current process, we developed a web-based system that allows the execution of interactive Scala programs in a browser.
    [Show full text]
  • The Lift Approach
    Science of Computer Programming 102 (2015) 1–19 Contents lists available at ScienceDirect Science of Computer Programming www.elsevier.com/locate/scico Analyzing best practices on Web development frameworks: The lift approach ∗ María del Pilar Salas-Zárate a, Giner Alor-Hernández b, , Rafael Valencia-García a, Lisbeth Rodríguez-Mazahua b, Alejandro Rodríguez-González c,e, José Luis López Cuadrado d a Departamento de Informática y Sistemas, Universidad de Murcia, Campus de Espinardo, 30100 Murcia, Spain b Division of Research and Postgraduate Studies, Instituto Tecnológico de Orizaba, Mexico c Bioinformatics at Centre for Plant Biotechnology and Genomics, Polytechnic University of Madrid, Spain d Computer Science Department, Universidad Carlos III de Madrid, Spain e Department of Engineering, School of Engineering, Universidad Internacional de La Rioja, Spain a r t i c l e i n f oa b s t r a c t Article history: Choosing the Web framework that best fits the requirements is not an easy task for Received 1 October 2013 developers. Several frameworks now exist to develop Web applications, such as Struts, Received in revised form 18 December 2014 JSF, Ruby on Rails, Grails, CakePHP, Django, and Catalyst. However, Lift is a relatively new Accepted 19 December 2014 framework that emerged in 2007 for the Scala programming language and which promises Available online 5 January 2015 a great number of advantages and additional features. Companies such as Siemens© and Keywords: IBM®, as well as social networks such as Twitter® and Foursquare®, have now begun to Best practices develop their applications by using Scala and Lift. Best practices are activities, technical Lift or important issues identified by users in a specific context, and which have rendered Scala excellent service and are expected to achieve similar results in similar situations.
    [Show full text]
  • Sbt-Native-Packager Release 1.0A1
    sbt-native-packager Release 1.0a1 Josh Suereth Sep 18, 2021 Contents 1 Introduction 1 1.1 Goals...................................................1 1.2 Scope...................................................1 1.3 Core Concepts..............................................2 2 Getting Started 5 2.1 Setup...................................................5 2.2 Your first package............................................5 3 Packaging Formats 7 3.1 Universal Plugin.............................................8 3.2 Linux Plugin............................................... 15 3.3 Debian Plugin.............................................. 21 3.4 Rpm Plugin................................................ 25 3.5 Docker Plugin.............................................. 31 3.6 Windows Plugin............................................. 38 3.7 JDKPackager Plugin........................................... 41 3.8 GraalVM Native Image Plugin...................................... 44 4 Project Archetypes 47 4.1 Java Application Archetype....................................... 47 4.2 Java Server Application Archetype................................... 54 4.3 Systemloaders.............................................. 59 4.4 Configuration Archetypes........................................ 62 4.5 Jlink Plugin................................................ 62 4.6 Archetype Cheatsheet.......................................... 64 5 Recipes 69 5.1 Custom Package Formats........................................ 69 5.2 Dealing with long classpaths......................................
    [Show full text]
  • Lift Documentation
    Lift Documentation The Lift Team Sep 11, 2019 Table of Contents: 1 Getting Started with Lift 3 1.1 Download.................................................3 1.2 Installation................................................4 1.3 Building Lift...............................................6 2 Overview of Lift 15 2.1 Patterns.................................................. 15 2.2 Rewrite Rules.............................................. 17 2.3 Compilation Flow............................................ 17 2.4 Inferring OpenCL Thread Counts.................................... 18 3 Developing Lift 19 3.1 Testing.................................................. 19 3.2 Guidelines for Contributing....................................... 20 3.3 How to . ................................................. 22 4 Generating and Running Kernels 27 4.1 Generating Kernels............................................ 27 4.2 Running Kernels............................................. 27 4.3 High-Level Rewrite........................................... 28 5 Indices and tables 31 i ii Lift Documentation This is the documentation of the Lift programming language and compiler. The lift project is a research project bya team at the University of Edinburgh together with further collaborators. Table of Contents: 1 Lift Documentation 2 Table of Contents: CHAPTER 1 Getting Started with Lift 1.1 Download To download Lift to your local machine perform the following steps: 1. Ensure that git and git-lfs are installed on your machine Lift is distributed via https://github.com
    [Show full text]
  • N2O Most Powerful Erlang Web Framework @5HT How Do I Shot Web? Micro REST
    N2O Most Powerful Erlang Web Framework @5HT How do I shot Web? Micro REST Python Flask Ruby Sinatra PHP Silex Scala Scalatra Concurrency in Mind Ruby Celluloid PHP React PHP phpDaemon Java+Scala Play SPA Angular Meteor Ember Chaplin Brunch D3 Knockout React Backbone jQuery Functional DSL Scala Lift Erlang Nitrogen Haskell BlazeHtml OCaml Ocsigen F# WebSharper Clojure Laser Enlive Compojure Ring Hiccup ClojureScript Om http-kit aleph noir JVM Elixir Weber def action(_, conn) do {:render, [project: "simpleTodo"], []} end def add([body: body], _conn) do {:json, [response: "ok"], [{"Content-Type", "application/json"}]} end def wrong(_, _) do {:redirect, "/"} end Erlang ChicagoBoss DTL Engine Database Connectivity PubSub Ruby on Rails like Nitrogen N2O ~2000 LOC One Process per Connection Binary Page Construction Zero Bridge GProc Pub/Sub WebSockets, KVS DB Tuned Layers static and dynamic Routing Path cleaned Query Parser Session Cookies stored in ETS cached DTL Templates optimized Nitrogen DSL rendering HTML Elements binaries JavaScript Actions deferred Layers Performance components TCP conn (K) PHP5 FCGI Simple Script <?php ?> 5 Nitrogen No session, No DSL, DTL 1 N2O Sessions, DSL, DTL 7 N2O Sessions, no DSL, DTL 10 N2O No Sessions, no DSL, DTL 13 On same machine raw webserver performance measured with wrk: NGINX -- 60K Cowboy -- 30K Measuring Tools requests pages/sec latency (ms) wrk 15K 13628.86 18.88 ab 10K 5464.63 190 httperf 10K 3623.50 200 siege 1K 884.51 430 On same machine raw webserver performance measured with wrk: NGINX -- 60K Cowboy -- 30K Decreasing Latency From 2x to ∞ Deliver HTML ASAP Deferred JavaScript delivery after WebSocket connection established <script> TransitionProcess = '<0.7780.5>' </script> socket.send(["N2O",TransitionProcess]).
    [Show full text]
  • Peter Robinett [email protected] for DUSE VI, 2010-06-30
    "' L-* Fr#1'w3r/ f3r F72 #2& Pr3)6 Peter Robinett [email protected] for DUSE VI, 2010-06-30 W,3 #1 I? ● Background in web programming with interpreted languages (PHP, Python, Javascript, etc) ● Likes long walks on the beaches ● Lift + Scala programmer for one year ● Loves both cats AND dogs ● Lift committer for approx. 6 months BUT only has minor commit to lift-flot to my name ● Likes fine wine and smooth jazz ● BUT active on mailing list and wiki ● Isn't very good at making funny bullet points W,#6 . L-*? Lift is an expressive and elegant framework for writing web applications. Lift stresses the importance of security, maintainability, scalability and performance, while allowing for high levels of developer productivity. Lift is inspired by Seaside, Rails, Django, Wicket, and beyond. W,9 F72? class AskName extends CometActor { def render = ajaxForm(<div>What is your username?</div> ++ text("",name => answer(name.trim)) ++ <input type="submit" value="Enter"/>) } class Chat extends CometActor with CometListener { private var userName = "" private var chats: List[ChatLine] = Nil private lazy val infoId = uniqueId + "_info" C31'6 private lazy val infoIn = uniqueId + "_in" private lazy val inputArea = findKids(defaultXml, "chat", "input") private lazy val bodyArea = findKids(defaultXml, "chat", "body") private lazy val singleLine = deepFindKids(bodyArea, "chat", "list") // handle an update to the chat lists // by diffing the lists and then sending a partial update // to the browser override def lowPriority = { case ChatServerUpdate(value)
    [Show full text]
  • Full-Graph-Limited-Mvn-Deps.Pdf
    org.jboss.cl.jboss-cl-2.0.9.GA org.jboss.cl.jboss-cl-parent-2.2.1.GA org.jboss.cl.jboss-classloader-N/A org.jboss.cl.jboss-classloading-vfs-N/A org.jboss.cl.jboss-classloading-N/A org.primefaces.extensions.master-pom-1.0.0 org.sonatype.mercury.mercury-mp3-1.0-alpha-1 org.primefaces.themes.overcast-${primefaces.theme.version} org.primefaces.themes.dark-hive-${primefaces.theme.version}org.primefaces.themes.humanity-${primefaces.theme.version}org.primefaces.themes.le-frog-${primefaces.theme.version} org.primefaces.themes.south-street-${primefaces.theme.version}org.primefaces.themes.sunny-${primefaces.theme.version}org.primefaces.themes.hot-sneaks-${primefaces.theme.version}org.primefaces.themes.cupertino-${primefaces.theme.version} org.primefaces.themes.trontastic-${primefaces.theme.version}org.primefaces.themes.excite-bike-${primefaces.theme.version} org.apache.maven.mercury.mercury-external-N/A org.primefaces.themes.redmond-${primefaces.theme.version}org.primefaces.themes.afterwork-${primefaces.theme.version}org.primefaces.themes.glass-x-${primefaces.theme.version}org.primefaces.themes.home-${primefaces.theme.version} org.primefaces.themes.black-tie-${primefaces.theme.version}org.primefaces.themes.eggplant-${primefaces.theme.version} org.apache.maven.mercury.mercury-repo-remote-m2-N/Aorg.apache.maven.mercury.mercury-md-sat-N/A org.primefaces.themes.ui-lightness-${primefaces.theme.version}org.primefaces.themes.midnight-${primefaces.theme.version}org.primefaces.themes.mint-choc-${primefaces.theme.version}org.primefaces.themes.afternoon-${primefaces.theme.version}org.primefaces.themes.dot-luv-${primefaces.theme.version}org.primefaces.themes.smoothness-${primefaces.theme.version}org.primefaces.themes.swanky-purse-${primefaces.theme.version}
    [Show full text]
  • Presentation Title up to a Maximum of Three Lines Font
    The Script Bowl Featuring Groovy, JRuby, Jython and Scala Raghavan “Rags” N. Srinivas CTO, Technology Evangelism The Script Bowl: Groovy Style Guillaume Laforge VP Technology at G2One, Inc. Groovy Project Manager http://www.g2one.com Guillaume Laforge Groovy Project Manager • Co-author of the Groovy in Action best-seller Manning • JSR-241 Spec Lead, • VP Technology at G2One, Inc. standardizing the Groovy • Professional services around dynamic language in the JCP Groovy and Grails • http://www.g2one.com • Initiator of the Grails web application framework 2008 JavaOneSM Conference | java.sun.com/javaone | 3 Groovy is… An Open Source dynamic language for the Virtual Machine for the Java™ platform (Java Virtual Machine or JVM™ machine) No impedence mismatch with Java™ programming environment • Groovy uses a syntax much like Java programming language • Shares the same object / threading / security model as Java programming language • Uses the same APIs (regex, collections, strings…) • Compiles down to normal Java programming language bytecode Provides native syntax constructs • Lists, maps, regex, ranges Supports closures • Simpler than any proposals for Java programming language! Groovy simplifies the use of many Java programming language APIs • XML, Swing, JDBC™ API, unit testing & mocking, templating … 2008 JavaOneSM Conference | java.sun.com/javaone | 4 The Script Bowl: JRuby Charles Nutter Technical Lead, JRuby JRuby Co-Lead Charles Oliver Nutter Longtime developer of Java application environment (11+ yrs ) Engineer at Sun Microsystems
    [Show full text]