2. Agenda
Annunci
REST
Infinispan
HornetQ
Andrea Leoncini News from JBoss World
3. Tre annunci
durante la manifestazione
L'uscita della versione 5 Enterprise
La certificazione JBoss Administrator
Il progetto GateIn
Andrea Leoncini News from JBoss World
4. Other interesting stuff
Accelerate your JBoss – Andy Miller
JBoss and all of its OSGi flavours – Alex Justin
Large Clusters in JBoss – Bela Ban
Extending JOPR – Heiko W. Rupp
Writing Telco Applications with JBCP – Jean Deruelle
JBoss 6 – Jason T. Green
JBPM explained – Tom Baeyens
Beyond Rails with TorqueBox – Bob Mc Whirter
...and much more
http://www.redhat.com/promo/summit/2009/highlights/
Andrea Leoncini News from JBoss World
5. What is REST?
REpresentational State Transfer
● PhD by Roy Fielding
REST answers the questions of
● Why is the Web so prevalent and ubiquitous?
● What makes the Web scale?
● How can I apply the architecture of the web to my
applications?
Andrea Leoncini News from JBoss World
6. What is REST?
REST is a set of architectural principles
REST isn’t protocol specific
● But, usually REST == REST + HTTP
A different way to look at writing Web Services
● Many say it’s the anti-WS-*
Andrea Leoncini News from JBoss World
7. What is REST?
Addressable Resources
● Every “thing” should have a URI
Constrained interface
● Use the standard methods of the protocol
● HTTP: GET, POST, PUT, DELETE, etc.
Representation Oriented
Communicate statelessly
● Stateless application scale
Andrea Leoncini News from JBoss World
8. What is REST?
Use URIs
● Every endpoint/thing has a URI
Linkability
● Resource representations have a standardized way of
referencing other resource representations
● Representations have a standardized way to compose
themselves:
Andrea Leoncini News from JBoss World
9. REST Linkability
<order id=“111”>
<customer>32133</customer>
<order-entries>
<order-entry>
<quantity>5</quantity>
<product>7811</product>
…
<order id=“111”>
<customer>http://sales.com/customers/32133</customer>
<order-entries>
<order-entry>
<quantity>5</quantity>
<product>http://sales.com/products/7811</product>
…
Andrea Leoncini News from JBoss World
10. Constrained, Uniform Interface
The idea is to have a well-defined, fixed, finite set of operations
Resources can only use these operations
Each operation has well-defined, explicit behavior
In HTTP land, these methods are GET, POST, PUT, DELETE
How can we build applications with only 4+ methods?
SQL only has 4 operations: INSERT, UPDATE, SELECT, DELETE
JMS has a well-defined, fixed set of operations
Both are pretty powerful and useful APIs with constrained
interfaces
Andrea Leoncini News from JBoss World
11. REST in Conclusion
REST answers questions of
● Why does the Web scale?
● Why is the Web so ubiquitous?
● How can I apply the architecture of the Web to my applications?
REST is the Re-birth of HTTP
Promises
● Simplicity
● Interoperability
● Platform independence
● Change resistance
Andrea Leoncini News from JBoss World
12. JAX-RS
JCP Specification
● Lead by Sun, Marc Hadley
● Finished in September 2008
Annotation Framework
Dispatch URI’s to specific classes and methods that can
handle requests
Allows you to map HTTP requests to method invocations
IMO, a beautiful example of the power of parameter
annotations
Nice URI manipulation functionality
Andrea Leoncini News from JBoss World
13. JAX-RS Annotations
@Path
● Defines URI mappings and templates
@Produces, @Consumes
● What MIME types does the resource produce and consume
@GET, @POST, @DELETE, @PUT, @HEAD
● Identifies which HTTP method the Java method is
interested in
Andrea Leoncini News from JBoss World
14. JAX-RS Parameter Annotations
@PathParam
Allows you to extract URI parameters/named URI template
segments
@QueryParam
Access to specific parameter URI query string
@HeaderParam
Access to a specific HTTP Header
@CookieParam
Access to a specific cookie value
Above annotations can automatically map HTTP request values to
String and primitive types
Class types with String constructor or a static valueOf(String val)
method
List or Arrays of above types when there are multiple values
@Context
Andrea Leoncini News from JBoss World
15. JAX-RS: GET /orders/3323
@Path(“/orders”)
public class OrderService {
@Path(“/{order-id}”)
@GET
@Produces(“application/xml”)
String getOrder(@PathParam(“order-id”) int id) {
…
}
}
Andrea Leoncini News from JBoss World
16. JAX-RS Resource Classes
JAX-RS annotations are used on POJO classes
The default component lifecycle is per-request
● Same idea as @Stateless EJBs
● Singletons supported too
● EJB integration defined in EE 6
● Most implementations have Spring integration
Root resources identified via @Path annotation on class
Andrea Leoncini News from JBoss World
17. JAX-RS: GET /orders/3323
@Path(“/orders”)
Base URI path to resource
public class OrderService {
@Path(“/{order-id}”)
@GET
@Produces(“application/xml”)
String getOrder(@PathParam(“order-id”) int id) {
…
}
}
Andrea Leoncini News from JBoss World
18. JAX-RS: GET /orders/3323
@Path(“/orders”)
public class OrderService { Additional URI pattern
that getOrder() method maps to
@Path(“/{order-id}”)
@GET
@ProduceMime(“application/xml”)
String getOrder(@PathParam(“order-id”) int id) {
…
}
}
Andrea Leoncini News from JBoss World
19. JAX-RS: GET /orders/3323
@Path(“/orders”)
public class OrderService { Defines a URI path segment
pattern
@Path(“/{order-id}”)
@GET
@Produces(“application/xml”)
String getOrder(@PathParam(“order-id”) int id) {
…
}
}
Andrea Leoncini News from JBoss World
20. JAX-RS: GET /orders/3323
@Path(“/orders”)
public class OrderService {
@Path(“/{order-id}”) HTTP method Java getOrder()
@GET maps to
@Produces(“application/xml”)
String getOrder(@PathParam(“order-id”) int id) {
…
}
}
Andrea Leoncini News from JBoss World
21. JAX-RS: GET /orders/3323
What’s the CONTENT-TYPE
@Path(“/orders”) returned?
public class OrderService {
@Path(“/{order-id}”)
@GET
@Produces(“application/xml”)
String getOrder(@PathParam(“order-id”) int id) {
…
}
}
Andrea Leoncini News from JBoss World
22. JAX-RS: GET /orders/3323
@Path(“/orders”)
public class OrderService {
@Path(“/{order-id}”)
@GET
@Produces(“application/xml”)
String getOrder(@PathParam(“order-id”) int id) {
…
}
}
Inject value of URI segment
into the id Java parameter
Andrea Leoncini News from JBoss World
23. JAX-RS: GET /orders/3323
@Path(“/orders”)
public class OrderService {
@Path(“/{order-id : d+}”)
@GET
@Produces(“application/xml”)
String getOrder(@PathParam(“order-id”) int id) {
…
}
}
Automatically convert URI
string segment into an integer
Andrea Leoncini News from JBoss World
24. JAX-RS: POST /orders
@Path(“/orders”) What CONTENT-TYPE is this
public class OrderService { method expecting from client?
@POST
@Consumes(“application/xml”)
void submitOrder(String orderXml) {
…
}
}
Andrea Leoncini News from JBoss World
25. JAX-RS: POST /orders
@Path(“/orders”)
public class OrderService {
@POST
@Consumes(“application/xml”)
void submitOrder(Order orderXml) {
…
}
}
Un-annotated parameters assumed
to be incoming message body.
There can be only one!
Andrea Leoncini News from JBoss World
26. JAX-RS Implementations
JBoss RESTEasy
http://jboss.org/resteasy
Embeddable
Spring and EJB integration
Client Framework
Asynchronous HTTP abstractions
Jersey
Sun reference implementation
WADL support
Apache CXF
RESTLet
Andrea Leoncini News from JBoss World
27. References
Links
http://jsr311.dev.java.net/
http://jboss.org/resteasy
http://rest.blueoxen.net/
http://java.dzone.com/articles/intro-rest
http://architects.dzone.com/articles/putting-java-rest
Books
Coming this fall “RESTFul Java” by me
O’Reilly’s “RESTful Web Services”
http://oreilly.com/catalog/9780596529260/
Andrea Leoncini News from JBoss World
29. Cloud Computing
Clouds are happening
You cannot escape them! ;)
Traditional datacenters will be marginalized to niche
deployments
Clouds become mainstream
Andrea Leoncini News from JBoss World
30. Why are clouds popular?
●
Piecemeal cost
●
Pay for what you use
●
Massive, global data centers means high availability,
instant backups
●
Everyone benefits from economies of scale
●
Ability to scale on demand
●
Very fast provisioning
●
Proven charging model
●
Remember timesharing on mainframes?
Andrea Leoncini News from JBoss World
31. Data Storage
●
Clouds are inherently stateless and ephemeral
●
Databases on clouds don't make sense
●
Traditional modes of data storage won't work
●
Scalability is crucial
●
Databases still are a bottleneck
●
… and single point of failure!
Andrea Leoncini News from JBoss World
32. Trying to make databases work in the cloud
●
Native database clustering
●
Notoriously slow and non-scalable
●
Unreliable
●
Expensive!
●
Need special hardware, e.g., SAN
Andrea Leoncini News from JBoss World
33. The solution: Data Grids!
●
Data grids are perfect for clouds
●
Highly scalable
●
No single point of failure
●
Works with ephemeral nodes
●
Very low latency
●
Data grids
●
Amazon SimpleDB uses Dynamo
●
Infinispan, etc.
●
Many other commercial and open source offerings
Andrea Leoncini News from JBoss World
34. Introducing Infinispan
●
Highly scalable data grid platform
●
100% open source licensed (LGPL)
●
Based on some JBoss Cache code
●
But mostly all-new!
●
JBoss Cache is a clustered caching library
●
Infinispan is a data grid platform
●
JBoss Cache uses a tree-structured API
●
Infinispan is a Map. Like JSR-107’s JCACHE
Andrea Leoncini News from JBoss World
35. Infinispan != JBoss Cache 4
●
Internal data container design completely different
●
APIs completely different
●
Not backward-compatible
●
Although an code-level compatibility layer is available
Andrea Leoncini News from JBoss World
36. More scalable than JBoss Cache
●
Internal structures more memory efficient
●
Data organised in Map-like structures
●
Making use of CAS
●
minimising synchronized blocks, mutexes
●
Containers are naturally ordered
●
Makes eviction much more efficient
●
Uses JBoss Marshalling
●
Smaller payloads + poolable streams = faster remote
calls
Andrea Leoncini News from JBoss World
37. “Borrowed” from JBoss Cache
●
JTA transactions
●
Replicated data structure
●
Eviction, cache persistence
●
Notifications and eventing API
●
JMX reporting
●
Fine-grained replication
●
MVCC locking
●
Non-blocking state transfer techniques
●
Query API
●
Custom (non-JDK) marshalling
Andrea Leoncini News from JBoss World
38. … and new features!
●
Consistent hash based data distribution
●
Much simpler Map API (JSR-107 compliant)
●
JPA API
●
Client/server module with memcached
compatibility
●
REST API
●
Ability to be consumed by non-JVM platforms
●
JOPR based GUI management console
●
Distributed executors
●
Map/reduce programming model made easy!
Andrea Leoncini News from JBoss World
39. Distributed Cache
●
Consistent hash based data distribution
●
Will allow us to scale to bigger clusters
●
Goal of efficient scaling to 1000’s of nodes
●
Lightweight, “L1” cache for efficient reads
●
On writes, “L1” gets invalidated
●
Dynamic rebalancing
Andrea Leoncini News from JBoss World
40. jboss.org/hornetq
H
HornetQ is the new name for JBoss Messaging 2
HornetQ is an open source community project to build a
multi-protocol asynchronous messaging system
HornetQ is designed for performance
HornetQ is designed with usability in mind
HornetQ is full featured
See the wiki for more information:
http://www.jboss.org/community/wiki/HornetQGeneralFAQs
Andrea Leoncini News from JBoss World
41. How does HornetQ relate to
JBoss Messaging?
We decided to rename JBoss Messaging 2 to HornetQ
JBM 1.x and 2.x code bases 95%+ different.
HornetQ is a different beast to JBM 1.x
HornetQ is not tightly coupled to JBoss Application
Server
Andrea Leoncini News from JBoss World
42. Both standalone and JEE messaging
HornetQ is a fully functional stand-alone messaging
server – if you don't want an app server, don't use an
app server
HornetQ can also be integrated with any JEE application
server, e.g. JBoss Application Server 5.0, using its JCA
adaptor
HornetQ can also be used with any dependency injection
framework, e.g. JBoss MC, Spring, Google Guice
Andrea Leoncini News from JBoss World
43. HornetQ features
Very high performance journal
Support for huge queues and huge messages with small
server and client footprint
Pluggable transport system
Seamless High Availability (HA)
Massively flexible clustering
Extensive management API
Lots, lots, more, but no time here! See the wiki for a full
list:
http://www.jboss.org/community/wiki/HornetQFeatures
Andrea Leoncini News from JBoss World
44. Ultra high performance journal
HornetQ persistence is very fast
Very fast store using Linux asynchronous IO.
Up to 100+ MiB/s on a single node!
JNI interface to aio library (libaio), encapsulated in
Java package.
Automatic switches to Java NIO when not running
on Linux
Andrea Leoncini News from JBoss World
45. Huge queues and messages
HornetQ supports huge queues – far bigger than
can fit in available RAM
Run Terabyte queues while the server is only
running in 50MiB of RAM!
Send and receive huge multi-gigabyte messages
with all the normal transactional semantics
Effectively, only limit to message size is
available disk space. We have tested messages
up to 8 GiB in size.
Andrea Leoncini News from JBoss World
46. Configurable Transport system
Fully pluggable transport
Ships with default implementation using JBoss Netty
http://jboss.org/netty/
TCP transport
SSL transport
HTTP transport
Servlet transport
In-VM transport
Andrea Leoncini News from JBoss World