Technical deep dive covering Spring Roo 1.0.0, which is a Java-based rapid application development framework. This presentation represents an updated version of the session I delivered at SpringOne USA in October 2009.
Introducing Spring Roo 1.0.0, which is a Java-based rapid application development framework. This presentation represents an updated version of the session I delivered at SpringOne USA in October 2009.
This presentation was given by Ishad M. Barot, Client Technical Professional, India(West) during Impact India 2012 on the 1st of June at Mumbai. It focuses on how businesses can save time and efforts using the WebSphere Application Server. WAS is much more than just being Open Source
Example build files are available at http://mark.gruden.com/masters-of-war-build-files.zip
Mark walks though how to create a scalable and automated deployment process for Coldfusion apps using Ant. Starting with some reverse engineering of CF's built-in WAR deployment process, we'll then be working through to the separation of application code, the CF runtime and CF's configuration files into distinct elements that can be versioned independently and finally looking at how these assets can be deployed selectively to a number of servers and put back together into running applications.
Introducing Spring Roo 1.0.0, which is a Java-based rapid application development framework. This presentation represents an updated version of the session I delivered at SpringOne USA in October 2009.
This presentation was given by Ishad M. Barot, Client Technical Professional, India(West) during Impact India 2012 on the 1st of June at Mumbai. It focuses on how businesses can save time and efforts using the WebSphere Application Server. WAS is much more than just being Open Source
Example build files are available at http://mark.gruden.com/masters-of-war-build-files.zip
Mark walks though how to create a scalable and automated deployment process for Coldfusion apps using Ant. Starting with some reverse engineering of CF's built-in WAR deployment process, we'll then be working through to the separation of application code, the CF runtime and CF's configuration files into distinct elements that can be versioned independently and finally looking at how these assets can be deployed selectively to a number of servers and put back together into running applications.
This talk provides a number of step-by-step examples that illustrate different ways in which Rails applications can interact effectively with third-party Java libraries. The presentation shows how developers can leverage JRuby to augment Rails applications with the mature, third-party libraries that are widely available in the Java world.
This talk provides a number of step-by-step examples that illustrate different ways in which Rails applications can interact effectively with third-party Java libraries. The presentation shows how developers can leverage JRuby to augment Rails applications with the mature, third-party libraries that are widely available in the Java world.
Presentation at Android Builders Summit 2012.
Based on the experience of working with ODM companies and SoC vendors, this session would discuss how to figure out the performance hotspot of certain Android devices and then improve in various areas including graphics and boot time. This session consists of the detailed components which seem to be independent from each other in traditional view. However, the situation changes a lot in Android system view since everything is coupled in a mass. Three frequently mentioned items in Android engineering are selected as the entry points: 2D/3D graphics, runtime, and boot time. Audience: Developers who work on Android system integration and platform enablement.
A Java Implementer's Guide to Boosting Apache Spark Performance by Tim Ellison.J On The Beach
Apache Spark has rocked the big data landscape, quickly becoming the largest open source big data community with over 750 contributors from more than 200 organizations. Spark's core tenants of speed, ease of use, and its unified programming model fit neatly with the high performance, scalable, and manageable characteristics of modern Java runtimes. In this talk we introduce the Spark programming model, and describe some unique Java runtime capabilities in the JIT, fast networking, serialization techniques, and GPU off-loading that deliver the ultimate big data platform for solving business problems. We will show how solutions, previously infeasible with regular Java programming, become possible with a high performance Spark core runtime, enabling you to solve problems smarter and faster.
Flex For Java Architects Ledroff Breizh Jug V Blog CcFrançois Le Droff
I had the chance to present at the BreizhJUG (a Breton Java user group) a session named "Flex for Java Deveoppers".
A crowd of almost 100 happy Java developers and architects was willing to know more about Flex.
I had an an hour and half to cover :
*
a basic presentation of the flash and AIR platforms,
*
cool UX flash/flex/AIR demos
*
the latest great features of flash 10
*
and flex, and its ecosystem from a Java developer perspective (mvn framework, testing libraries, building and quality tools, blazeds, lcds)
I ended up the session presenting fna maven archetypes
5/13/13 presentation to Austin DevOps Meetup Group, describing our system for deploying 15 websites and supporting services in multiple languages to bare redhat 6 VMs. All system-wide software is installed using RPMs, and all application software is installed using GIT or Tarball.
Five cool ways the JVM can run Apache Spark fasterTim Ellison
The IBM JVM runs Apache Spark fast! This talk explains some of the findings and optimizations from our experience of running Spark workloads.
The talk was originally presented at the SparkEU Summit 2015 in Amsterdam.
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
"Impact of front-end architecture on development cost", Viktor TurskyiFwdays
I have heard many times that architecture is not important for the front-end. Also, many times I have seen how developers implement features on the front-end just following the standard rules for a framework and think that this is enough to successfully launch the project, and then the project fails. How to prevent this and what approach to choose? I have launched dozens of complex projects and during the talk we will analyze which approaches have worked for me and which have not.
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
The IoT and OT threat landscape report has been prepared by the Threat Research Team at Sectrio using data from Sectrio, cyber threat intelligence farming facilities spread across over 85 cities around the world. In addition, Sectrio also runs AI-based advanced threat and payload engagement facilities that serve as sinks to attract and engage sophisticated threat actors, and newer malware including new variants and latent threats that are at an earlier stage of development.
The latest edition of the OT/ICS and IoT security Threat Landscape Report 2024 also covers:
State of global ICS asset and network exposure
Sectoral targets and attacks as well as the cost of ransom
Global APT activity, AI usage, actor and tactic profiles, and implications
Rise in volumes of AI-powered cyberattacks
Major cyber events in 2024
Malware and malicious payload trends
Cyberattack types and targets
Vulnerability exploit attempts on CVEs
Attacks on counties – USA
Expansion of bot farms – how, where, and why
In-depth analysis of the cyber threat landscape across North America, South America, Europe, APAC, and the Middle East
Why are attacks on smart factories rising?
Cyber risk predictions
Axis of attacks – Europe
Systemic attacks in the Middle East
Download the full report from here:
https://sectrio.com/resources/ot-threat-landscape-reports/sectrio-releases-ot-ics-and-iot-security-threat-landscape-report-2024/
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
Let's dive deeper into the world of ODC! Ricardo Alves (OutSystems) will join us to tell all about the new Data Fabric. After that, Sezen de Bruijn (OutSystems) will get into the details on how to best design a sturdy architecture within ODC.
1. Spring Roo 1.0.0:
Technical Deep Dive
Roo Internals and Add-On Development
Ben Alex, Project Lead, Spring Roo
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
2. Agenda
• Architectural Journey
• Implementation
• Development Mode
• Building Add-Ons
• Conclusion
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 2
3. Agenda
• Architectural Journey
• Implementation
• Development Mode
• Building Add-Ons
• Conclusion
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 3
4. Design Goals
• High productivity for Java developers
– Reuse their existing knowledge, skills and experience
• Eliminate barriers to adoption
– Lock-in, runtime, size, development experience
• Embrace the strengths of Java
– Dev-time: tooling, popularity, API quality, static typing
– Deploy-time: performance, memory use, footprint
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 4
5. High-Impact Decisions
• Use Java
– This is a tool for Java developers
– It defeats the purpose if we insist on a new language
• Don't create a runtime
– This avoids bugs, lock-in, adoption barriers, approvals
– This avoids CPU cost, RAM cost and footprint cost
• This easily led to some sort of generation model
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 5
6. Prototyped Approaches
• Pluggable Annotation Processing API (JSR 269)
• Generate source at build time (XDoclet-style)
• Generate bytecode at build time (ASM)
• Generate bytecode at runtime (ASM)
• Advanced proxy-based approaches (Spring AOP)
• IDE plugins
• None of them satisfied all of the design goals
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 6
7. Decision 1: Use AspectJ
• AspectJ ITDs for “active” generation
– Active generation automatically maintains output
• Delivers compilation unit separation of concern
– Easier for users, and easier for us as developers
• Instant IDE support
– Reduce time to market and adoption barriers
• Other good reasons
– Mature, “push in” refactor, compile-time is welcome
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 7
8. ITD Model
• Roo owns *_Roo_*.aj files
– Will delete them if necessary
• Every ITD provider registers a “suffix” it uses
– Eg “Entity” becomes *_Roo_Entity.aj
– A missing ITD provider causes AJ file removal
• ITDs have proper import management
– So they look and feel normal to developers
– So they “push in refactor” in a natural form
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 8
9. Decision 2: Create A Shell
• Need something to host the “active” generation
• Need something to receive user commands
• Usability issues were of extremely high priority
• We chose an interactive shell
– Highest usability (tab, context awareness, hiding, hints...)
– Background monitoring of externally-made changes
– Background monitoring avoided crude “generate” steps
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 9
10. Shell Model
• Shell will perform a “startup” scan
– To handle changes made while it wasn't running
• Shell will monitor file system once started
– To handle changes made while it is running
• Shell will have a set of commands registered
– To handle explicit directives from the user
• Roo will never modify a *.java file except at the
explicit request of a user via a shell command
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 10
11. That Left One Key Question...
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 11
12. Control Information
AspectJ ITDs
Person_Roo_
write Roo read Person.java
ToString.aj Roo
Add-Ons
Roo
Add-Ons
Roo name:String
toString():String Add-Ons
Add-Ons
Person_Roo_
JavaBean.aj
read AspectJ read
getName():String Compiler
setName(String):void
Person.class
write
How will add-ons know name:String
toString():String
what to generate? getName():String
setName(String):void
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 12
13. Metadata
• Project details
– Project name, dependencies, build system...
• Java type details
– Fields, methods, constructors, inheritance...
• Higher-level concepts
– Entity properties, controller paths, validation rules...
• Must be automatically determined from project
– With @Roo* (source level retention) where infeasible
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 13
14. Metadata Model
• Immutable
• String-based keys (start with “MID:”)
• Built on demand only (never persisted)
• Metadata can depend on other metadata
– If “upsteam” metadata changes, “downstream” is told
– Some metadata will want to monitor the file system
• Central metadata service and cache required
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 14
15. Demo #1
Shell Operation and ITD Maintenance
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 15
16. Agenda
• Architectural Journey
• Implementation
• Development Mode
• Building Add-Ons
• Conclusion
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 16
17. Conventions We Follow
• Ensure usability is first-class
• Minimize the JAR footprint that Roo requires
• Dependencies only from Enterprise Bundle Repo
• Relocate runtime needs to sister Spring projects
• Embrace immutability as much as possible
• Maximize performance in generated code
• Minimize memory consumption in generated code
• Use long artifact IDs to facilitate identification
• Don't put into @Roo* what you could calculate
• Don't violate generator predictability conventions
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 17
18. The Roo Distribution
• “Roo” is split into two logical components
• Base add-ons
– org.springframework.roo.addon.*
– Provide major out-of-the-box Roo features
– Provide metadata for other add-ons
• Roo Core
– org.springframework.roo.* (excluding .addon.*)
– Provide services add-ons will almost always require
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 18
19. 1.0.0 Base Add-Ons
• Backup • Logging
• Bean Info • Maven
• Configurable • Pluralization
• Data On Demand • Property Editor
• Email • Property File
• Entity • Security
• Dynamic Finder • Integration Test
• Java Bean • ToString
• JMS • Web (various)
• JPA
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 19
20. Role of Third Party Add-Ons
• 3rd party add-ons have a long-term role in Roo
• Minimize download size of Roo distribution
• Avoid licensing issues with Roo distribution
• Facilitate features of more niche interest
• Separate project management and maintenance
• Enable end user customization
• Provide a sandbox for easy experimentation
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 20
21. Core Components
Classpath
Process Manager
Project File Undo Shell
Model Metadata File Monitor
Support
(used by all)
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 21
22. File Monitor API
• Mostly used by project and classpath modules
– Rare for an add-on to directly use file monitor
• Publishes startup and “on change” events
• Events
– Create
– Update
– Delete
– Rename (if implementation supported)
– Monitoring start (for each file when first found)
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 22
23. File Monitor Implementation
• Polling-based implementation
• Auto-scales to reduce CPU overhead
• Shell commands
– “poll status” → indicates scan frequency and duration
– “poll speed” → allows specification of frequency
– “poll now” → forces an immediate poll
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 23
24. Metadata Identifiers (MIDs)
MID:o.s.r.classpath.PhysicalTypeId#SRC_MAIN_JAVA?com.foo.Bar
Static MetadataIdentificationUtils.getMdClass(..) MetadataIdentificationUtils.getMdInstance(..)
• Immutable strings to avoid GC cost
• Note the “instance” portion denotes a Java type
– Most MIDs include this physical location and type name
– Use PhysicalTypeIdentifier.getPath(..) and
getJavaType(..) to directly extract typesafe objects
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 24
25. Metadata Facilities
Metadata
Add-On Dependency
registers + notifies Registry
Metadata
Provider
queries
Metadata
Service
Metadata
Item
stores
Metadata
Cache
• MetadataService can provide all metadata in the system
• MetadataService auto-evicts all downstream dependencies
• Dependency registration can be MID class or MID instance specific
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 25
26. Project Abstraction
• Abstracts the user's project build system
– Immutable metadata (including dependency details)
– Path (eg SRC_MAIN_JAVA) mapping to directories
– Operations object to modify project structures
– Access to the PathResolver instance
• Maven implementation via add-on
– Designed to also support Ivy in due course (ROO-91)
• Add-ons will regularly use ProjectOperations
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 26
27. Process Manager
• Ensures non-overlapping synchronization
– Background file monitor polling thread
– Shell command foreground thread
• Facilitates “atomic” operations with rollback
– Notifies disk changes until disk is in stable state
– Rolls back disk changes if from a failed shell command
• Provides a FileManager abstraction
– Add-ons must use this abstraction for disk changes
– Reads via FileManager are optional (but recommended)
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 27
28. Classpath API
MID:o.s.r.classpath.PhysicalTypeId#SRC_MAIN_JAVA?com.foo.Bar
Physical Physical
Type Type
Identifier Category
Physical Physical
Type Type
Metadata Details
ClassOrInterface
ItdTypeDetails
TypeDetails
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 28
29. Classpath Implementation
• JavaParser
– Provides a javacc-based AST, but no binding API
– Used due to licensing considerations of alternatives
• Roo offers binding, including parameterization
• JavaParser does require source code
– Avoids necessity of having a compiler running
– Abstractions designed to provide ASM-like *.class
introspection should it be desired in the future
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 29
30. Shell
• Implementations for STS and JLine
• Add-ons should
– Make a “Command” class and implement CommandMaker
– Delegate methods through to an “Operations” object
– Annotate methods with @CliCommand
– Annotate method parameters with @CliOption
– Optionally use @CliAvailabilityIndicator if desired
– Throw any exceptions to abort and rollback changes
– Use JDK logging or return objects for console output
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 30
31. Building From Source
• We develop against a public Subversion repo
– You can anonymously checkout the code
• There's also a public FishEye instance (plus Jira)
• Roo itself uses Maven, so it's very easy to build
– Standard package, install, assembly and site goal
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 31
32. Mainline Development
• Checkout Roo anonymously
svn co https://anonsvn.springframework.org/svn/spring-roo/
cd spring-roo/trunk
less readme.txt
• readme.txt contains latest setup details
– Add ROO_CLASSPATH_FILE variable
– Create symbolic link to bootstrap/roo-dev
• It works under Windows as well, but not as well
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 32
33. Classpath File Maintenance
• Classpath file allows rapid execution of the shell
without loading Maven to build a full classpath
• Refreshing the ROO_CLASSPATH_FILE is easy
cd /home/spring-roo/trunk
mvn clean eclipse:clean eclipse:eclipse compile
• Use the “props” shell command to verify classpath
– Use the above command to update the classpath file
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 33
34. Development Tips
• Load Roo using “roo-dev” (not “roo”)
– Uses incremental builds as per ROO_CLASSPATH_FILE
• Note roo-dev add-ons will be under ~/roo-dev
• roo-dev always starts up in “development mode”
• Debugging is supported via Eclipse/STS
– Refer to readme.txt for details
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 34
35. Demo #2
Setting Up A Fresh Checkout
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 35
36. Agenda
• Architectural Journey
• Implementation
• Development Mode
• Building Add-Ons
• Conclusion
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 36
37. Development Mode
• Enable via
– Loading Roo via roo-dev shell script
– JVM property developmentMode = true
– Typing “development mode” at the roo> shell prompt
• Outputs full exception traces within Roo
– Ugly for normal usage (exceptions are the normal way
that an add-ons abort from unexpected conditions)
• First line of troubleshooting add-on bugs is to
ask for “development mode” exception data
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 37
38. Metadata For Type
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 38
39. Metadata For Id
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 39
40. Metadata Trace
• Use --level 1 for instance-specific notifications
• Use --level 2 for absolutely all notifications
• Consider the number of notifications involved in
adding a field to an entity that also has a JSP
– File system change → physical type metadata → entity
metadata → finder metadata → bean info metadata →
controller metadata → jsp metadata
– This doesn't even consider parallel and unchanged
paths (eg integration test, getter/setters, menus etc)
– Metadata beyond type introspection is really useful!
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 40
41. Demo #3
Development Mode Demonstration
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 41
42. Agenda
• Architectural Journey
• Implementation
• Development Mode
• Building Add-Ons
• Conclusion
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 42
43. Roo's Add-On Model
• Roo 1.0.0 offers third-party add-on support
• Very simple single classloader model
• Add-on ZIPs placed in $ROO_HOME/add-ons
• JARs auto-extracted into $ROO_HOME/work
• Launch scripts add $ROO_HOME/work to classpath
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 43
44. User Add-On Installation
• “addon install --url file:/some.ZIP”
• “addon install --url http://www.x.com/s.ZIP”
• “addon uninstall --pattern some*.zip”
• Install/uninstall always does a “clean” afterwards
• “addon clean”
– Manages $ROO_HOME/work as appropriate
– Will request to restart shell if any changes are made
– Deletions are deferred until JVM shuts down
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 44
45. Add-On ZIP Structure
• ZIP can be created whatever way you like
– Although Roo offers a Maven assembly.xml
• Directories required
– “dist” contains 1+ JARs produced by an add-on
– “lib” contains 0+ JARs required by the add-on
– “lib” contains all transitively-necessary dependencies
– Roo does not perform transitive dependency resolution
• By convention there's a readme and “legal” dir
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 45
46. Add-On Naming Guidelines
• Artifact IDs must be
– Fully qualified (eg com.foo.bar)
– Start with .com or .net or .org (due to class scanning)
– End with .roo.addon (due to class scanning)
• Results in useful ZIP and JAR names like
– com.my.proj.roo.addon-1.0.0.zip
– com.my.proj.roo.addon-1.0.0.jar
• Roo add-on commands enforce the above
– Plus offer suggestions, so don't worry too much
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 46
47. Add-On Creation
• It's seriously this easy: or create a project by hand
roo> project --topLevelPackage com.my.proj.roo.addon
--template ROO_ADDON_SIMPLE
roo> perform eclipse optional, or use mvn directly
roo> perform assembly
or use Maven directly
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 47
48. ROO_ADDON_SIMPLE
• Depends on currently-running Roo version
– Provides access to full Roo core and all base add-ons
• Creates Java types for you
– These are usable types that show key Roo APIs
• Outputs a valid Maven POM and assembly.xml
• Also gives you shell scripts for classpath control
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 48
49. Commands and Operations
Static Field
rego Options
Operations Command
rego
Static Field
Options
Shell
Roo APIs
API
Command Shell
Operations
Converter
Add-On
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 49
50. Development-Time Notes
• roo-dev uses ~/roo-dev as $ROO_HOME
• roo-dev uses $ROO_ADDON_CLASSPATH_FILE
• This allows you to incrementally develop in
Eclipse and not have to make a ZIP every time
• Set $ROO_ADDON_CLASSPATH_FILE via
– *nix: “source /your/add-on/setup.env”
– Windows: “youradd-onsetup.bat”
– Files automatically updated during “mvn compile”
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 50
51. Add-On Distribution
• Suggestions
– Host ZIPs on your own server or Google Code SVN
– Commiting to SVN simplifies HTTP distribution
• Announce via
– A Tweet including #roo
– A forum post at http://forum.springsource.org/
– Email balex@vmware.com with details
• I'll add it to the official list of public Roo add-ons
• A future release will revisit distribution facilities
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 51
52. Suggested Add-On Steps
• Learn Roo conventions from a user's perspective
• Use “project --template ROO_ADDON_SIMPLE”
– Then “addon install” and try the “welcome” commands
– Import it into Eclipse, study the code and customize
• Use Roo SVN to study more advanced add-ons
• Obtain help via the Spring community forums
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 52
53. Demo #4
Building An Add-On
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 53
54. Agenda
• Architectural Journey
• Implementation
• Development Mode
• Building Add-Ons
• Conclusion
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 54
55. Roo's Design
• Result of considerable R&D
• Very lightweight and loosely-coupled core
• Easy to build from SVN and round-trip develop
• “Development mode” eases troubleshooting
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 55
56. A Growing Ecosystem
Other
Free-Text
Reporting Scheduling Spring
Search
projects
DTOs/ Database Hundreds
Captcha
Mappers Deployment More...
Roo Distribution
Roo Core Base Add-Ons
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 56
57. Thanks
• Hope you've enjoyed our “deep dive” into Roo!
• Roo community resources
– Home → http://www.springsource.org/roo
– Support → http://forum.springframework.org
– Issues → http://jira.springframework.org/browse/ROO
– Tweets → #roo hash key
• Questions?
balex@vmware.com
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 57