[フレーム]
PDF, PPTX3,771 views

JSR-299 (CDI), Weld & the Future of Seam (JavaOne 2010)

The document discusses JSR-299 (Contexts and Dependency Injection - CDI) and its implementation via Weld in the context of Java EE and the Seam framework. It outlines key concepts such as the CDI programming model, dependency injection, lifecycle management, and the creation of portable extensions. Additionally, it touches on the evolution of managed beans, qualifiers, interceptors, and scopes for various Java EE components.

Download as PDF, PPTX
JSR-299 (CDI), Weld and the Future of Seam Dan Allen Principal Software Engineer JBoss by Red Hat
Agenda くろまる Java EE today くろまる Where JSR-299 fits in くろまる JSR-299 themes くろまる CDI programming model tour くろまる CDI extensions くろまる Weld くろまる Seam 3 2 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Technology terminology くろまる JSR-299 (CDI) くろまる Contexts & Dependency Injection for the Java EE Platform くろまる Weld くろまる JSR-299 Reference Implementation & TCK くろまる Extended CDI support (Servlets, Java SE) くろまる Portable CDI enhancements for extension writers くろまる Seam 3 くろまる Portable extensions for Java EE くろまる Portable integrations with non-Java EE technologies 3 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
What is Java EE? くろまる Standard platform comprised of managed components & services くろまる Business logic as components 1. Less code 2. Higher signal-to-noise ratio 3. Powerful mechanisms for free 4. Portable knowledge 4 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Why reinvest? Java EE 5 5 Seam 2 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Stated goal of JSR-299 Web tier Transactional tier (JSF) (EJB) 6 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
What CDI provides くろまる Services for Java EE components くろまる Lifecycle management of stateful beans bound to well-defined contexts (including conversation context) くろまる A type-safe approach to dependency injection くろまる Interaction via an event notification facility くろまる Reduced coupling between interceptors and beans くろまる Decorators, which intercept specific bean instances くろまる Unified EL integration (bean names) くろまる SPI for developing extensions for the Java EE platform くろまる Java EE architecture  flexible, portable, extensible 7 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
What CDI provides くろまる Services for Java EE components くろまる Lifecycle management of stateful beans bound to well-defined contexts (including conversation context) くろまる A type-safe approach to dependency injection くろまる Interaction via an event notification facility くろまる Reduced coupling between interceptors and beans くろまる Decorators, which intercept specific bean instances くろまる Unified EL integration (bean names) くろまる SPI for developing extensions for the Java EE platform くろまる Java EE architecture  flexible, portable, extensible 8 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
CDI: The big picture くろまる Fill in くろまる Catalyze くろまる Evolve 9 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Why dependency injection? くろまる Weakest aspect of Java EE 5 くろまる Closed set of injectable resources くろまる @EJB くろまる @PersistenceContext, @PersistenceUnit くろまる @Resource (e.g., DataSource, UserTransaction) くろまる Name-based injection is fragile くろまる Lacked rules 10 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Leverage and extend Java’s type system @Annotation <TypeParam> This information is pretty useful! Type 11 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
JSR-299 theme @Produces @WishList Loose coupling... List<Product> getWishList() Event<Order> @InterceptorBinding @Inject @UserDatabase EntityManager @Observes @Qualifier ...with strong typing 12 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Loose coupling くろまる Decouple server and client くろまる Using well-defined types and "qualifiers" くろまる Allows server implementation to vary くろまる Decouple lifecycle of collaborating components くろまる Automatic contextual lifecycle management くろまる Stateful components interact like services くろまる Decouple orthogonal concerns (AOP) くろまる Interceptors & decorators くろまる Decouple message producer from consumer くろまる Events 13 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Strong typing くろまる Type-based injection くろまる Eliminate reliance on string-based names くろまる Refactor friendly くろまる Compiler can detect typing errors くろまる No special authoring tools required くろまる Casting mostly eliminated くろまる Semantic code errors detected at application startup くろまる Tooling can detect ambiguous dependencies (optional) 14 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Who's bean is it anyway? くろまる Everyone throwing around this term "bean" くろまる JSF くろまる EJB くろまる Seam くろまる Spring くろまる Guice くろまる Web Beans くろまる Need a "unified bean definition" 15 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Managed bean specification くろまる Common bean definition くろまる Instances managed by Managed the container Beans くろまる Common services くろまる Lifecycle callbacks くろまる Resource injections くろまる Interceptors JSF EJB CDI JAX-RS くろまる Foundation spec How managed beans evolved: http://www.infoq.com/news/2009/11/weld10 16 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
CDI bean ingredients くろまる Set of bean types くろまる Set of qualifiers くろまる Scope くろまる Bean EL name (optional) くろまる Set of interceptor bindings くろまる Alternative classification くろまる Bean implementation class Auto-discovered! 17 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Welcome to CDI, managed beans! public class Welcome { public String buildPhrase(String city) { return "Welcome to " + city + "!"; } } 18 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Welcome to CDI, EJB 3.1 session beans! @Stateless public class Welcome { public String buildPhrase(String city) { return "Welcome to " + city + "!"; } } 19 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
When is a bean recognized? くろまる Bean archive (WAR) くろまる Bean archive (JAR) beans.xml can be empty! 20 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Injection 101 public class Greeter { @Inject Welcome w; public void welcome() { System.out.println( w.buildPhrase("San Francisco")); } } 21 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Where can it be injected? くろまる Field くろまる Method parameter くろまる Constructor* くろまる Initializer くろまる Producer くろまる Observer 22 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
What can be injected? Managed bean Object returned by producer EJB session bean (local or remote) Java EE resource (DataSource, JMS destination, etc) JTA UserTransaction Persistence unit or context Security principle Bean Validation factory Web service reference Additional resources introduced through SPI 23 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
The bean vs "the other implementation" くろまる Multiple implementations of same interface くろまる One implementation extends another public class Welcome { public String buildPhrase(String city) { return "Welcome to " + city + "!"; } } public class TranslatingWelcome extends Welcome { @Inject GoogleTranslator translator; public String buildPhrase(String city) { return translator.translate( "Welcome to " + city + "!"); } } 24 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Quiz: Which implementation gets injected? public class Greeter { private Welcome welcome; @Inject void init(Welcome welcome) { this.welcome = welcome; } ... } It's ambiguous! 25 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Working out an ambiguous resolution くろまる Qualifier くろまる Alternative くろまる Producer くろまる Veto (or hide) 26 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
qualifier n. an annotation used to resolve an API implementation variant at an injection point 27 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Defining a qualifier @Qualifier @Retention(RUNTIME) @Target({TYPE, METHOD, FIELD, PARAMETER}) public @interface Translating {} @interface means annotation @interface means annotation 28 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Qualifying an implementation @Translating public class TranslatingWelcome extends Welcome { @Inject GoogleTranslator translator; public String buildPhrase(String city) { return translator.translate( "Welcome to " + city + "!"); } } くろまる makes type more specific くろまる assigns semantic meaning 29 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Qualifier as a "binding type" 30 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Explicitly request qualified interface public class Greeter { private Welcome welcome; No reference to implementation class! No reference to implementation class! @Inject void init(@Translating Welcome welcome) { this.welcome = welcome; } public void welcomeVisitors() { System.out.println( welcome.buildPhrase("San Francisco")); } } 31 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Alternative bean くろまる Swap replacement implementation per deployment くろまる Replaces bean and its producer methods and fields くろまる Disabled by default くろまる Must be activated in /META-INF/beans.xml In other words, an override 32 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Defining an alternative @Alternative public class TranslatingWelcome extends Welcome { @Inject GoogleTranslator translator; public String buildPhrase(String city) { return translator.translate( "Welcome to " + city + "!"); } } 33 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Substituting the alternative くろまる Activated using beans.xml <beans> <alternatives> <class>com.acme.TranslatingWelcome</class> </alternatives> </beans> 34 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Assigning a bean (EL) name @Named("greeter") public class Greeter { private Welcome welcome; @Inject void init(Welcome welcome) { this.welcome = welcome; } public void welcomeVisitors() { System.out.println( welcome.buildPhrase("San Francisco")); } } 35 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Assigning a bean (EL) name by convention @Named public class Greeter { private Welcome welcome; Bean name is decapitalized Bean name is decapitalized simple class name simple class name @Inject void init(Welcome welcome) { this.welcome = welcome; } public void welcomeVisitors() { System.out.println( welcome.buildPhrase("San Francisco")); } } 36 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Welcome to CDI, JSF! くろまる Use the bean directly in the JSF view <h:form> <h:commandButton value="Welcome visitors" action="#{greeter.welcomeVisitors}"/> </h:form> 37 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
JSF managed beans CDI 38 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Stashing the bean in a context くろまる Bean saved for the duration of a request @Named @RequestScoped public class Greeter { @Inject private Welcome w; private String city; public String getCity() { return city; } public void setCity(String city) { this.city = city; } public void welcomeVisitors() { System.out.println(w.buildPhrase(city)); } } 39 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Collapsing layers with state management くろまる Now it’s possible for bean to hold state <h:form> <h:inputText value="#{greeter.city}"/> <h:commandButton value="Welcome visitors" action="#{greeter.welcomeVisitors}"/> </h:form> San Francisco Prints: Welcome to San Francisco! 40 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Mission accomplished: We have a deal! Web tier Business tier (JSF) (managed bean) 41 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Scope types and contexts くろまる Default scope - @Dependent くろまる Bound to lifecycle of bean holding reference くろまる Servlet scopes くろまる @ApplicationScoped くろまる @RequestScoped くろまる @SessionScoped くろまる JSF conversation scope - @ConversationScoped くろまる Custom scopes くろまる Define scope type annotation (e.g., @FlashScoped) くろまる Implement the context API in an extension 42 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Scope transparency くろまる Scopes not visible to client (no coupling) くろまる Scoped beans are proxied for thread safety 43 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Conversation context くろまる Request ≤ Conversation ≪ Session くろまる くろまる Boundaries demarcated by application くろまる Optimistic transaction くろまる Conversation-scoped persistence context くろまる No fear of exceptions on lazy fetch operations 44 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Controlling the conversation @ConversationScoped public class BookingAgent { @Inject @BookingDatabase EntityManager em; @Inject Conversation conversation; private Hotel selected; private Booking booking; public void select(Hotel h) { selected = em.find(Hotel.class, h.getId()); conversation.begin(); } ... 45 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Controlling the conversation ... public boolean confirm() { if (!isValid()) { return false; } em.persist(booking); conversation.end(); return true; } } 46 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
producer method n. a method whose return value produces an injectable object 47 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Producer method examples @Produces @RequestScoped public FacesContext getFacesContext() { From non-bean From non-bean return FacesContext.getInstance(); } @Produces public PaymentProcessor getPaymentProcessor( @Synchronous PaymentProcessor sync, Runtime selection Runtime selection @Asynchronous PaymentProcessor async) { return isSynchronous() ? sync : async; } @Produces @SessionScoped @WishList Dynamic result set Dynamic result set public List<Product> getWishList() { return em.createQuery("...").getResultList(); } 48 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Injecting producer return values @Inject FacesContext ctx; @Inject PaymentProcessor pp; @Inject @WishList List<Product> wishlist; Origin of product is hidden at injection point 49 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Bridging Java EE resources くろまる Use producer field to expose Java EE resource @Stateless public class UserEntityManagerProducer { @Produces @UserRepository @PersistenceContext(unitName = "users") EntityManager em; } @Stateless public class PricesTopicProducer { @Produces @Prices @Resource(name = "java:global/env/jms/Prices") Topic pricesTopic; } 50 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Injecting resources in type-safe way くろまる String-based resource names are hidden public class UserManager { @Inject @UserRepository EntityManager userEm; ... } public class StockDisplay { @Inject @Prices Topic pricesTopic; ... } 51 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Rethinking interceptors @Interceptors( SecurityInterceptor.class, TransactionInterceptor.class, LoggingInterceptor.class ) @Stateful public class BusinessComponent { ... } Um, what's the point? 52 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Define an interceptor binding type @InterceptorBinding @Retention(RUNTIME) @Target({TYPE, METHOD}) public @interface Secure {} 53 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Mark the interceptor implementation @Secure @Interceptor public class SecurityInterceptor { @AroundInvoke public Object aroundInvoke(InvocationContext ctx) throws Exception { // enforce security... ctx.proceed(); } } 54 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Interceptor wiring with proper semantics @Secure public class AccountManager { public boolean transfer(Account a, Account b) { ... } } 55 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Enabling and ordering interceptors くろまる Bean archive has no enabled interceptors by default くろまる Interceptors activated in beans.xml of bean archive くろまる Referenced by binding type くろまる Ordering is per-module くろまる Declared in module in which the interceptor is used <beans> <interceptors> <class>com.acme.SecurityInterceptor</class> <class>com.acme.TransactionInterceptor</class> </interceptors> </beans> Interceptors applied in order listed Interceptors applied in order listed 56 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Annotation jam! @Secure @Transactional @RequestScoped @Named public class AccountManager { public boolean transfer(Account a, Account b) { ... } } 57 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
stereotype n. an annotation used to group common architectural patterns (recurring roles) 58 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Define a stereotype to bundle annotations @Secure @Transactional @RequestScoped @Named @Stereotype @Retention(RUNTIME) @Target(TYPE) public @interface BusinessComponent {} 59 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Using a stereotype @BusinessComponent public class AccountManager { public boolean transfer(Account a, Account b) { ... } } 60 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Portable extensions くろまる SPI – Service Provider Interface くろまる Automatically discovered くろまる Application-scoped instance くろまる Observes events from CDI event bus くろまる Before/after bean discovery くろまる After deployment validation くろまる etc... くろまる Can override, augment, replace or veto beans 61 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
62 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Weld: JSR-299 Reference Implementation くろまる Implementation & TCK くろまる Weld (portable) extensions くろまる Apache software licensed (version 2.0) 63 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
64 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Seam’s mission statement To provide a fully integrated development platform for building rich Internet applications based upon the Java EE environment. 65 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Seam’s new modular ecosystem 66 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Portable modules くろまる Module per domain or integration くろまる Independently... くろまる lead くろまる versioned くろまる released くろまる Per-module structure くろまる Based on CDI くろまる API & implementation くろまる Reference documentation & examples 67 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Stack releases 68 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
What's on the menu so far? くろまる Drools くろまる JavaScript remoting くろまる jBPM くろまる Security くろまる JMS くろまる Servlet くろまる Faces くろまる Wicket くろまる International くろまる XML configuration くろまる Persistence くろまる Exception handling ...and more  http://github.com/seam 69 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
XML-based configuration <beans ... xmlns:app="java:urn:com.acme"> <app:TranslatingWelcome> <app:Translating/> <app:defaultLocale>en-US</app:defaultLocale> </app:TranslatingWelcome> </beans> くろまる Define, specialize or override beans くろまる Add annotations (qualifiers, interceptor bindings, ...) くろまる Assign initial property values 70 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Cross-field validator in Seam Faces @FacesValidator("addressValidator") public class AddressValidator implements Validator { @Inject Directory directory; @Inject @InputField String city; @Inject @InputField String state; @Inject @InputField ZipCode zip; public void validate(FacesContext ctx, UIComponent c, Object v) throws ValidatorException { if (!directory.exists(city, state, zip) { throw new ValidatorException("Bad address"); } } } 71 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Wiring the validator to the inputs <h:form id="address"> City: <h:inputText id="city" value="#{bean.city}"/> State: <h:inputText id="state" value="#{bean.state}"/> Zip: <h:inputText id="zipCode" value="#{bean.zip}"/> <h:commandButton value="Update" action="#{addressController.update}"/> <s:validateForm validatorId="addressValidator" fields="zip=zipCode"> </h:form> 72 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Arquillian: Container-oriented testing for Java EE Throwing complexity over the wall Throwing complexity over the wall @RunWith(Arquillian.class) Wed @ 4:45 Wed @ 4:45 public class GreeterTestCase { Hilton, Golden Gate 4/5 Hilton, Golden Gate 4/5 @Deployment public static Archive<?> createDeployment() { return ShrinkWrap.create(JavaArchive.class) .addClasses(Greeter.class, GreeterBean.class); } @EJB private Greeter greeter; @Test public void shouldBeAbleToInvokeEJB() throws Exception { assertEquals("Hello, Earthlings", greeter.greet("Earthlings")); } } 73 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Summary くろまる Java EE 6 is leaner and more productive くろまる JSR-299 (CDI) provides a set of services for Java EE くろまる Bridges JSF and EJB くろまる Offers loose coupling with strong typing くろまる Provides a type-based event bus くろまる Catalyzed managed bean & interceptor specifications くろまる Extensive SPI for third-party integration with Java EE くろまる Weld: JSR-299 reference implementation & add-ons くろまる Seam 3: Portable extensions for Java EE 74 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
How do I get started? くろまる Download a Java EE 6 container くろまる JBoss AS 6 – http://jboss.org/jbossas くろまる GlassFish V3 – http://glassfish.org くろまる Generate a Java EE project using a Maven archetype くろまる http://tinyurl.com/goweld くろまる Read the Weld reference guide くろまる http://tinyurl.com/weld-reference-101 くろまる Browse the CDI JavaDoc くろまる http://docs.jboss.org/cdi/api/latest/ くろまる Check out the Seam 3 project くろまる http://seamframework.org/Seam3 75 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
Q&A Dan Allen Principal Software Engineer JBoss by Red Hat http://seamframework.org/Weld http://seamframework.org/Seam3

More Related Content

Throwing complexity over the wall: Rapid development for enterprise Java (Jav...
PDF
Throwing complexity over the wall: Rapid development for enterprise Java (Jav...
CDI and Weld
PDF
CDI and Weld
CDI, Weld and the future of Seam
PDF
CDI, Weld and the future of Seam
Moving to Java EE 6 and CDI and away from the clutter
PDF
Moving to Java EE 6 and CDI and away from the clutter
The State of Java under Oracle at JCertif 2011
PDF
The State of Java under Oracle at JCertif 2011
OSGi-enabled Java EE applications in GlassFish
PDF
OSGi-enabled Java EE applications in GlassFish
Groovy.Tutorial
PDF
Groovy.Tutorial
groovy
PDF
groovy
Throwing complexity over the wall: Rapid development for enterprise Java (Jav...
Throwing complexity over the wall: Rapid development for enterprise Java (Jav...
CDI and Weld
CDI and Weld
CDI, Weld and the future of Seam
CDI, Weld and the future of Seam
Moving to Java EE 6 and CDI and away from the clutter
Moving to Java EE 6 and CDI and away from the clutter
The State of Java under Oracle at JCertif 2011
The State of Java under Oracle at JCertif 2011
OSGi-enabled Java EE applications in GlassFish
OSGi-enabled Java EE applications in GlassFish
Groovy.Tutorial
Groovy.Tutorial
groovy
groovy

What's hot

OSGi-enabled Java EE Applications using GlassFish at JCertif 2011
PDF
OSGi-enabled Java EE Applications using GlassFish at JCertif 2011
PL/SQL Development
PDF
PL/SQL Development
Running your Java EE applications in the Cloud
PDF
Running your Java EE applications in the Cloud
Dayal rtp q2_07
PDF
Dayal rtp q2_07
Lesson2 software process_contd2
PPTX
Lesson2 software process_contd2
GlassFish v3, OSGi Equinox Felix
PDF
GlassFish v3, OSGi Equinox Felix
Why should i switch to Java SE 7
PDF
Why should i switch to Java SE 7
Glidein startup Internals and Glidein configuration - glideinWMS Training Jan...
PDF
Glidein startup Internals and Glidein configuration - glideinWMS Training Jan...
Cloud Best Practices
PDF
Cloud Best Practices
Running your Java EE 6 applications in the Cloud
PDF
Running your Java EE 6 applications in the Cloud
Airbus Internship Presentation 2012
PDF
Airbus Internship Presentation 2012
Glidein internals
ODP
Glidein internals
The Java EE 7 Platform: Productivity & HTML5 at JavaOne Latin America 2012
PDF
The Java EE 7 Platform: Productivity & HTML5 at JavaOne Latin America 2012
Tdd and a new paradigm for hardware verification
PDF
Tdd and a new paradigm for hardware verification
GlassFish & Java EE Business Update @ CEJUG
PDF
GlassFish & Java EE Business Update @ CEJUG
Java Summit Chennai: JAX-RS 2.0
PDF
Java Summit Chennai: JAX-RS 2.0
OSGi & Java EE in GlassFish @ Silicon Valley Code Camp 2010
PDF
OSGi & Java EE in GlassFish @ Silicon Valley Code Camp 2010
Adopting Agile Tools & Methods In A Legacy Context
PDF
Adopting Agile Tools & Methods In A Legacy Context
Modules all the way down: OSGi and the Java Platform Module System
PDF
Modules all the way down: OSGi and the Java Platform Module System
Quality on Submit
PPTX
Quality on Submit
OSGi-enabled Java EE Applications using GlassFish at JCertif 2011
OSGi-enabled Java EE Applications using GlassFish at JCertif 2011
PL/SQL Development
PL/SQL Development
Running your Java EE applications in the Cloud
Running your Java EE applications in the Cloud
Dayal rtp q2_07
Dayal rtp q2_07
Lesson2 software process_contd2
Lesson2 software process_contd2
GlassFish v3, OSGi Equinox Felix
GlassFish v3, OSGi Equinox Felix
Why should i switch to Java SE 7
Why should i switch to Java SE 7
Glidein startup Internals and Glidein configuration - glideinWMS Training Jan...
Glidein startup Internals and Glidein configuration - glideinWMS Training Jan...
Cloud Best Practices
Cloud Best Practices
Running your Java EE 6 applications in the Cloud
Running your Java EE 6 applications in the Cloud
Airbus Internship Presentation 2012
Airbus Internship Presentation 2012
Glidein internals
Glidein internals
The Java EE 7 Platform: Productivity & HTML5 at JavaOne Latin America 2012
The Java EE 7 Platform: Productivity & HTML5 at JavaOne Latin America 2012
Tdd and a new paradigm for hardware verification
Tdd and a new paradigm for hardware verification
GlassFish & Java EE Business Update @ CEJUG
GlassFish & Java EE Business Update @ CEJUG
Java Summit Chennai: JAX-RS 2.0
Java Summit Chennai: JAX-RS 2.0
OSGi & Java EE in GlassFish @ Silicon Valley Code Camp 2010
OSGi & Java EE in GlassFish @ Silicon Valley Code Camp 2010
Adopting Agile Tools & Methods In A Legacy Context
Adopting Agile Tools & Methods In A Legacy Context
Modules all the way down: OSGi and the Java Platform Module System
Modules all the way down: OSGi and the Java Platform Module System
Quality on Submit
Quality on Submit

Similar to JSR-299 (CDI), Weld & the Future of Seam (JavaOne 2010)

CDI Best Practices with Real-Life Examples - TUT3287
PDF
CDI Best Practices with Real-Life Examples - TUT3287
JBoss AS7 OSDC 2011
ODP
JBoss AS7 OSDC 2011
Designing Java EE Applications in the Age of CDI
PDF
Designing Java EE Applications in the Age of CDI
The future of enterprise dependency injection: Contexts & Dependency Injectio...
KEY
The future of enterprise dependency injection: Contexts & Dependency Injectio...
Vaadin with Java EE 7
PDF
Vaadin with Java EE 7
Contextual Dependency Injection for Apachecon 2010
PDF
Contextual Dependency Injection for Apachecon 2010
Cdi demo
PPT
Cdi demo
Adopt a JSR: CDI 2.0 at Devoxx UK
PDF
Adopt a JSR: CDI 2.0 at Devoxx UK
Seam 3 from a Web developer’s point of view, Matija Mazi (Parsek)
PDF
Seam 3 from a Web developer’s point of view, Matija Mazi (Parsek)
Java EE8 - by Kito Mann
PPTX
Java EE8 - by Kito Mann
Spring - CDI Interop
PDF
Spring - CDI Interop
Java EE 8 Update
PPTX
Java EE 8 Update
Gwt cdi jaxrs_hbraun
PDF
Gwt cdi jaxrs_hbraun
Weld reference
PDF
Weld reference
The path to cdi 2.0
PDF
The path to cdi 2.0
Errai CDI Integration
PDF
Errai CDI Integration
Overview of Java EE 6 by Roberto Chinnici at SFJUG
PDF
Overview of Java EE 6 by Roberto Chinnici at SFJUG
Contexts and Dependency Injection for the JavaEE platform
PPT
Contexts and Dependency Injection for the JavaEE platform
Java EE 8: On the Horizon
PDF
Java EE 8: On the Horizon
JavaOne 2014 Java EE 8 Booth Slides
PDF
JavaOne 2014 Java EE 8 Booth Slides
CDI Best Practices with Real-Life Examples - TUT3287
CDI Best Practices with Real-Life Examples - TUT3287
JBoss AS7 OSDC 2011
JBoss AS7 OSDC 2011
Designing Java EE Applications in the Age of CDI
Designing Java EE Applications in the Age of CDI
The future of enterprise dependency injection: Contexts & Dependency Injectio...
The future of enterprise dependency injection: Contexts & Dependency Injectio...
Vaadin with Java EE 7
Vaadin with Java EE 7
Contextual Dependency Injection for Apachecon 2010
Contextual Dependency Injection for Apachecon 2010
Cdi demo
Cdi demo
Adopt a JSR: CDI 2.0 at Devoxx UK
Adopt a JSR: CDI 2.0 at Devoxx UK
Seam 3 from a Web developer’s point of view, Matija Mazi (Parsek)
Seam 3 from a Web developer’s point of view, Matija Mazi (Parsek)
Java EE8 - by Kito Mann
Java EE8 - by Kito Mann
Spring - CDI Interop
Spring - CDI Interop
Java EE 8 Update
Java EE 8 Update
Gwt cdi jaxrs_hbraun
Gwt cdi jaxrs_hbraun
Weld reference
Weld reference
The path to cdi 2.0
The path to cdi 2.0
Errai CDI Integration
Errai CDI Integration
Overview of Java EE 6 by Roberto Chinnici at SFJUG
Overview of Java EE 6 by Roberto Chinnici at SFJUG
Contexts and Dependency Injection for the JavaEE platform
Contexts and Dependency Injection for the JavaEE platform
Java EE 8: On the Horizon
Java EE 8: On the Horizon
JavaOne 2014 Java EE 8 Booth Slides
JavaOne 2014 Java EE 8 Booth Slides

Recently uploaded

Enhancing Web Security: Key Concepts & Strategies.pptx
PPTX
Enhancing Web Security: Key Concepts & Strategies.pptx
AWS re:Invent 2025 Event Presentation Slides
PDF
AWS re:Invent 2025 Event Presentation Slides
Cybersecurity in ASEAN and Singapore Columbia SIPA 2025.pdf
PDF
Cybersecurity in ASEAN and Singapore Columbia SIPA 2025.pdf
The Smol Training Playbook: The Secrets to Building World-Class LLMs
PDF
The Smol Training Playbook: The Secrets to Building World-Class LLMs
Sephora UAE API Service Real-Time Product & Price Data Access.pptx
PPTX
Sephora UAE API Service Real-Time Product & Price Data Access.pptx
WebXR in Android and Linux with OpenXR
PDF
WebXR in Android and Linux with OpenXR
Unleash AI power with the Dell Pro 14 Plus - Interactive PDF
PDF
Unleash AI power with the Dell Pro 14 Plus - Interactive PDF
Supercharge Your JVM with Project Leyden
PDF
Supercharge Your JVM with Project Leyden
Bulwark Pokemon League Top 8 graphic archive
PPTX
Bulwark Pokemon League Top 8 graphic archive
Q3'25 Financial Results and Earnings Presentation
PDF
Q3'25 Financial Results and Earnings Presentation
Data Center Exit to Cloud _ Managed Datacenter Migration.pdf
PDF
Data Center Exit to Cloud _ Managed Datacenter Migration.pdf
Q8 DIGITAL IDENTITY HUB - WSO2 Oxygenate Italy 2025
PDF
Q8 DIGITAL IDENTITY HUB - WSO2 Oxygenate Italy 2025
Manage Files Using CLI - RHCSA (RH124).pdf
PDF
Manage Files Using CLI - RHCSA (RH124).pdf
Your First Deep Learning project With CNN (workshop).pptx
PPTX
Your First Deep Learning project With CNN (workshop).pptx
GDG Boise - Innovating with Google Cloud Artificial Intelligence
PDF
GDG Boise - Innovating with Google Cloud Artificial Intelligence
A GREEN BUSINESS TOOLKIT FOR EARLY-STAGE ENTREPRENEURS (1).pptx.pptx
PPTX
A GREEN BUSINESS TOOLKIT FOR EARLY-STAGE ENTREPRENEURS (1).pptx.pptx
RR B.Ed. educational trust. Ashish Tiwari
PDF
RR B.Ed. educational trust. Ashish Tiwari
GenAI GraphTalk - Kuala Lumpur - 4 Nov 2025
PPTX
GenAI GraphTalk - Kuala Lumpur - 4 Nov 2025
Control Access to Files - RHCSA (RH124).pdf
PDF
Control Access to Files - RHCSA (RH124).pdf
Do more with the HP Z2 Mini G1a
PDF
Do more with the HP Z2 Mini G1a
Enhancing Web Security: Key Concepts & Strategies.pptx
Enhancing Web Security: Key Concepts & Strategies.pptx
AWS re:Invent 2025 Event Presentation Slides
AWS re:Invent 2025 Event Presentation Slides
Cybersecurity in ASEAN and Singapore Columbia SIPA 2025.pdf
Cybersecurity in ASEAN and Singapore Columbia SIPA 2025.pdf
The Smol Training Playbook: The Secrets to Building World-Class LLMs
The Smol Training Playbook: The Secrets to Building World-Class LLMs
Sephora UAE API Service Real-Time Product & Price Data Access.pptx
Sephora UAE API Service Real-Time Product & Price Data Access.pptx
WebXR in Android and Linux with OpenXR
WebXR in Android and Linux with OpenXR
Unleash AI power with the Dell Pro 14 Plus - Interactive PDF
Unleash AI power with the Dell Pro 14 Plus - Interactive PDF
Supercharge Your JVM with Project Leyden
Supercharge Your JVM with Project Leyden
Bulwark Pokemon League Top 8 graphic archive
Bulwark Pokemon League Top 8 graphic archive
Q3'25 Financial Results and Earnings Presentation
Q3'25 Financial Results and Earnings Presentation
Data Center Exit to Cloud _ Managed Datacenter Migration.pdf
Data Center Exit to Cloud _ Managed Datacenter Migration.pdf
Q8 DIGITAL IDENTITY HUB - WSO2 Oxygenate Italy 2025
Q8 DIGITAL IDENTITY HUB - WSO2 Oxygenate Italy 2025
Manage Files Using CLI - RHCSA (RH124).pdf
Manage Files Using CLI - RHCSA (RH124).pdf
Your First Deep Learning project With CNN (workshop).pptx
Your First Deep Learning project With CNN (workshop).pptx
GDG Boise - Innovating with Google Cloud Artificial Intelligence
GDG Boise - Innovating with Google Cloud Artificial Intelligence
A GREEN BUSINESS TOOLKIT FOR EARLY-STAGE ENTREPRENEURS (1).pptx.pptx
A GREEN BUSINESS TOOLKIT FOR EARLY-STAGE ENTREPRENEURS (1).pptx.pptx
RR B.Ed. educational trust. Ashish Tiwari
RR B.Ed. educational trust. Ashish Tiwari
GenAI GraphTalk - Kuala Lumpur - 4 Nov 2025
GenAI GraphTalk - Kuala Lumpur - 4 Nov 2025
Control Access to Files - RHCSA (RH124).pdf
Control Access to Files - RHCSA (RH124).pdf
Do more with the HP Z2 Mini G1a
Do more with the HP Z2 Mini G1a

JSR-299 (CDI), Weld & the Future of Seam (JavaOne 2010)

  • 1.
    JSR-299 (CDI), Weld and the Future of Seam Dan Allen Principal Software Engineer JBoss by Red Hat
  • 2.
    Agenda くろまる Java EE today くろまる Where JSR-299 fits in くろまる JSR-299 themes くろまる CDI programming model tour くろまる CDI extensions くろまる Weld くろまる Seam 3 2 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 3.
    Technology terminology くろまる JSR-299 (CDI) くろまる Contexts & Dependency Injection for the Java EE Platform くろまる Weld くろまる JSR-299 Reference Implementation & TCK くろまる Extended CDI support (Servlets, Java SE) くろまる Portable CDI enhancements for extension writers くろまる Seam 3 くろまる Portable extensions for Java EE くろまる Portable integrations with non-Java EE technologies 3 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 4.
    What is Java EE? くろまる Standard platform comprised of managed components & services くろまる Business logic as components 1. Less code 2. Higher signal-to-noise ratio 3. Powerful mechanisms for free 4. Portable knowledge 4 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 5.
    Why reinvest? Java EE 5 5 Seam 2 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 6.
    Stated goal of JSR-299 Web tier Transactional tier (JSF) (EJB) 6 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 7.
    What CDI provides くろまる Services for Java EE components くろまる Lifecycle management of stateful beans bound to well-defined contexts (including conversation context) くろまる A type-safe approach to dependency injection くろまる Interaction via an event notification facility くろまる Reduced coupling between interceptors and beans くろまる Decorators, which intercept specific bean instances くろまる Unified EL integration (bean names) くろまる SPI for developing extensions for the Java EE platform くろまる Java EE architecture  flexible, portable, extensible 7 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 8.
    What CDI provides くろまる Services for Java EE components くろまる Lifecycle management of stateful beans bound to well-defined contexts (including conversation context) くろまる A type-safe approach to dependency injection くろまる Interaction via an event notification facility くろまる Reduced coupling between interceptors and beans くろまる Decorators, which intercept specific bean instances くろまる Unified EL integration (bean names) くろまる SPI for developing extensions for the Java EE platform くろまる Java EE architecture  flexible, portable, extensible 8 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 9.
    CDI: The big picture くろまる Fill in くろまる Catalyze くろまる Evolve 9 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 10.
    Why dependency injection? くろまる Weakest aspect of Java EE 5 くろまる Closed set of injectable resources くろまる @EJB くろまる @PersistenceContext, @PersistenceUnit くろまる @Resource (e.g., DataSource, UserTransaction) くろまる Name-based injection is fragile くろまる Lacked rules 10 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 11.
    Leverage and extend Java’s type system @Annotation <TypeParam> This information is pretty useful! Type 11 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 12.
    JSR-299 theme @Produces @WishList Loose coupling... List<Product> getWishList() Event<Order> @InterceptorBinding @Inject @UserDatabase EntityManager @Observes @Qualifier ...with strong typing 12 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 13.
    Loose coupling くろまる Decouple server and client くろまる Using well-defined types and "qualifiers" くろまる Allows server implementation to vary くろまる Decouple lifecycle of collaborating components くろまる Automatic contextual lifecycle management くろまる Stateful components interact like services くろまる Decouple orthogonal concerns (AOP) くろまる Interceptors & decorators くろまる Decouple message producer from consumer くろまる Events 13 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 14.
    Strong typing くろまる Type-based injection くろまる Eliminate reliance on string-based names くろまる Refactor friendly くろまる Compiler can detect typing errors くろまる No special authoring tools required くろまる Casting mostly eliminated くろまる Semantic code errors detected at application startup くろまる Tooling can detect ambiguous dependencies (optional) 14 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 15.
    Who's bean is it anyway? くろまる Everyone throwing around this term "bean" くろまる JSF くろまる EJB くろまる Seam くろまる Spring くろまる Guice くろまる Web Beans くろまる Need a "unified bean definition" 15 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 16.
    Managed bean specification くろまる Common bean definition くろまる Instances managed by Managed the container Beans くろまる Common services くろまる Lifecycle callbacks くろまる Resource injections くろまる Interceptors JSF EJB CDI JAX-RS くろまる Foundation spec How managed beans evolved: http://www.infoq.com/news/2009/11/weld10 16 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 17.
    CDI bean ingredients くろまる Set of bean types くろまる Set of qualifiers くろまる Scope くろまる Bean EL name (optional) くろまる Set of interceptor bindings くろまる Alternative classification くろまる Bean implementation class Auto-discovered! 17 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 18.
    Welcome to CDI, managed beans! public class Welcome { public String buildPhrase(String city) { return "Welcome to " + city + "!"; } } 18 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 19.
    Welcome to CDI, EJB 3.1 session beans! @Stateless public class Welcome { public String buildPhrase(String city) { return "Welcome to " + city + "!"; } } 19 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 20.
    When is a bean recognized? くろまる Bean archive (WAR) くろまる Bean archive (JAR) beans.xml can be empty! 20 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 21.
    Injection 101 public class Greeter { @Inject Welcome w; public void welcome() { System.out.println( w.buildPhrase("San Francisco")); } } 21 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 22.
    Where can it be injected? くろまる Field くろまる Method parameter くろまる Constructor* くろまる Initializer くろまる Producer くろまる Observer 22 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 23.
    What can be injected? Managed bean Object returned by producer EJB session bean (local or remote) Java EE resource (DataSource, JMS destination, etc) JTA UserTransaction Persistence unit or context Security principle Bean Validation factory Web service reference Additional resources introduced through SPI 23 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 24.
    The bean vs "the other implementation" くろまる Multiple implementations of same interface くろまる One implementation extends another public class Welcome { public String buildPhrase(String city) { return "Welcome to " + city + "!"; } } public class TranslatingWelcome extends Welcome { @Inject GoogleTranslator translator; public String buildPhrase(String city) { return translator.translate( "Welcome to " + city + "!"); } } 24 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 25.
    Quiz: Which implementation gets injected? public class Greeter { private Welcome welcome; @Inject void init(Welcome welcome) { this.welcome = welcome; } ... } It's ambiguous! 25 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 26.
    Working out an ambiguous resolution くろまる Qualifier くろまる Alternative くろまる Producer くろまる Veto (or hide) 26 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 27.
    qualifier n. an annotation used to resolve an API implementation variant at an injection point 27 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 28.
    Defining a qualifier @Qualifier @Retention(RUNTIME) @Target({TYPE, METHOD, FIELD, PARAMETER}) public @interface Translating {} @interface means annotation @interface means annotation 28 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 29.
    Qualifying an implementation @Translating public class TranslatingWelcome extends Welcome { @Inject GoogleTranslator translator; public String buildPhrase(String city) { return translator.translate( "Welcome to " + city + "!"); } } くろまる makes type more specific くろまる assigns semantic meaning 29 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 30.
    Qualifier as a "binding type" 30 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 31.
    Explicitly request qualified interface public class Greeter { private Welcome welcome; No reference to implementation class! No reference to implementation class! @Inject void init(@Translating Welcome welcome) { this.welcome = welcome; } public void welcomeVisitors() { System.out.println( welcome.buildPhrase("San Francisco")); } } 31 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 32.
    Alternative bean くろまる Swap replacement implementation per deployment くろまる Replaces bean and its producer methods and fields くろまる Disabled by default くろまる Must be activated in /META-INF/beans.xml In other words, an override 32 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 33.
    Defining an alternative @Alternative public class TranslatingWelcome extends Welcome { @Inject GoogleTranslator translator; public String buildPhrase(String city) { return translator.translate( "Welcome to " + city + "!"); } } 33 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 34.
    Substituting the alternative くろまる Activated using beans.xml <beans> <alternatives> <class>com.acme.TranslatingWelcome</class> </alternatives> </beans> 34 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 35.
    Assigning a bean (EL) name @Named("greeter") public class Greeter { private Welcome welcome; @Inject void init(Welcome welcome) { this.welcome = welcome; } public void welcomeVisitors() { System.out.println( welcome.buildPhrase("San Francisco")); } } 35 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 36.
    Assigning a bean (EL) name by convention @Named public class Greeter { private Welcome welcome; Bean name is decapitalized Bean name is decapitalized simple class name simple class name @Inject void init(Welcome welcome) { this.welcome = welcome; } public void welcomeVisitors() { System.out.println( welcome.buildPhrase("San Francisco")); } } 36 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 37.
    Welcome to CDI, JSF! くろまる Use the bean directly in the JSF view <h:form> <h:commandButton value="Welcome visitors" action="#{greeter.welcomeVisitors}"/> </h:form> 37 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 38.
    JSF managed beans CDI 38 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 39.
    Stashing the bean in a context くろまる Bean saved for the duration of a request @Named @RequestScoped public class Greeter { @Inject private Welcome w; private String city; public String getCity() { return city; } public void setCity(String city) { this.city = city; } public void welcomeVisitors() { System.out.println(w.buildPhrase(city)); } } 39 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 40.
    Collapsing layers with state management くろまる Now it’s possible for bean to hold state <h:form> <h:inputText value="#{greeter.city}"/> <h:commandButton value="Welcome visitors" action="#{greeter.welcomeVisitors}"/> </h:form> San Francisco Prints: Welcome to San Francisco! 40 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 41.
    Mission accomplished: We have a deal! Web tier Business tier (JSF) (managed bean) 41 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 42.
    Scope types and contexts くろまる Default scope - @Dependent くろまる Bound to lifecycle of bean holding reference くろまる Servlet scopes くろまる @ApplicationScoped くろまる @RequestScoped くろまる @SessionScoped くろまる JSF conversation scope - @ConversationScoped くろまる Custom scopes くろまる Define scope type annotation (e.g., @FlashScoped) くろまる Implement the context API in an extension 42 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 43.
    Scope transparency くろまる Scopes not visible to client (no coupling) くろまる Scoped beans are proxied for thread safety 43 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 44.
    Conversation context くろまる Request ≤ Conversation ≪ Session くろまる くろまる Boundaries demarcated by application くろまる Optimistic transaction くろまる Conversation-scoped persistence context くろまる No fear of exceptions on lazy fetch operations 44 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 45.
    Controlling the conversation @ConversationScoped public class BookingAgent { @Inject @BookingDatabase EntityManager em; @Inject Conversation conversation; private Hotel selected; private Booking booking; public void select(Hotel h) { selected = em.find(Hotel.class, h.getId()); conversation.begin(); } ... 45 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 46.
    Controlling the conversation ... public boolean confirm() { if (!isValid()) { return false; } em.persist(booking); conversation.end(); return true; } } 46 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 47.
    producer method n. a method whose return value produces an injectable object 47 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 48.
    Producer method examples @Produces @RequestScoped public FacesContext getFacesContext() { From non-bean From non-bean return FacesContext.getInstance(); } @Produces public PaymentProcessor getPaymentProcessor( @Synchronous PaymentProcessor sync, Runtime selection Runtime selection @Asynchronous PaymentProcessor async) { return isSynchronous() ? sync : async; } @Produces @SessionScoped @WishList Dynamic result set Dynamic result set public List<Product> getWishList() { return em.createQuery("...").getResultList(); } 48 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 49.
    Injecting producer return values @Inject FacesContext ctx; @Inject PaymentProcessor pp; @Inject @WishList List<Product> wishlist; Origin of product is hidden at injection point 49 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 50.
    Bridging Java EE resources くろまる Use producer field to expose Java EE resource @Stateless public class UserEntityManagerProducer { @Produces @UserRepository @PersistenceContext(unitName = "users") EntityManager em; } @Stateless public class PricesTopicProducer { @Produces @Prices @Resource(name = "java:global/env/jms/Prices") Topic pricesTopic; } 50 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 51.
    Injecting resources in type-safe way くろまる String-based resource names are hidden public class UserManager { @Inject @UserRepository EntityManager userEm; ... } public class StockDisplay { @Inject @Prices Topic pricesTopic; ... } 51 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 52.
    Rethinking interceptors @Interceptors( SecurityInterceptor.class, TransactionInterceptor.class, LoggingInterceptor.class ) @Stateful public class BusinessComponent { ... } Um, what's the point? 52 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 53.
    Define an interceptor binding type @InterceptorBinding @Retention(RUNTIME) @Target({TYPE, METHOD}) public @interface Secure {} 53 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 54.
    Mark the interceptor implementation @Secure @Interceptor public class SecurityInterceptor { @AroundInvoke public Object aroundInvoke(InvocationContext ctx) throws Exception { // enforce security... ctx.proceed(); } } 54 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 55.
    Interceptor wiring with proper semantics @Secure public class AccountManager { public boolean transfer(Account a, Account b) { ... } } 55 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 56.
    Enabling and ordering interceptors くろまる Bean archive has no enabled interceptors by default くろまる Interceptors activated in beans.xml of bean archive くろまる Referenced by binding type くろまる Ordering is per-module くろまる Declared in module in which the interceptor is used <beans> <interceptors> <class>com.acme.SecurityInterceptor</class> <class>com.acme.TransactionInterceptor</class> </interceptors> </beans> Interceptors applied in order listed Interceptors applied in order listed 56 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 57.
    Annotation jam! @Secure @Transactional @RequestScoped @Named public class AccountManager { public boolean transfer(Account a, Account b) { ... } } 57 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 58.
    stereotype n. an annotation used to group common architectural patterns (recurring roles) 58 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 59.
    Define a stereotype to bundle annotations @Secure @Transactional @RequestScoped @Named @Stereotype @Retention(RUNTIME) @Target(TYPE) public @interface BusinessComponent {} 59 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 60.
    Using a stereotype @BusinessComponent public class AccountManager { public boolean transfer(Account a, Account b) { ... } } 60 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 61.
    Portable extensions くろまる SPI – Service Provider Interface くろまる Automatically discovered くろまる Application-scoped instance くろまる Observes events from CDI event bus くろまる Before/after bean discovery くろまる After deployment validation くろまる etc... くろまる Can override, augment, replace or veto beans 61 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 62.
    62 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 63.
    Weld: JSR-299 Reference Implementation くろまる Implementation & TCK くろまる Weld (portable) extensions くろまる Apache software licensed (version 2.0) 63 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 64.
    64 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 65.
    Seam’s mission statement To provide a fully integrated development platform for building rich Internet applications based upon the Java EE environment. 65 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 66.
    Seam’s new modular ecosystem 66 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 67.
    Portable modules くろまる Module per domain or integration くろまる Independently... くろまる lead くろまる versioned くろまる released くろまる Per-module structure くろまる Based on CDI くろまる API & implementation くろまる Reference documentation & examples 67 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 68.
    Stack releases 68 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 69.
    What's on the menu so far? くろまる Drools くろまる JavaScript remoting くろまる jBPM くろまる Security くろまる JMS くろまる Servlet くろまる Faces くろまる Wicket くろまる International くろまる XML configuration くろまる Persistence くろまる Exception handling ...and more  http://github.com/seam 69 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 70.
    XML-based configuration <beans ... xmlns:app="java:urn:com.acme"> <app:TranslatingWelcome> <app:Translating/> <app:defaultLocale>en-US</app:defaultLocale> </app:TranslatingWelcome> </beans> くろまる Define, specialize or override beans くろまる Add annotations (qualifiers, interceptor bindings, ...) くろまる Assign initial property values 70 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 71.
    Cross-field validator in Seam Faces @FacesValidator("addressValidator") public class AddressValidator implements Validator { @Inject Directory directory; @Inject @InputField String city; @Inject @InputField String state; @Inject @InputField ZipCode zip; public void validate(FacesContext ctx, UIComponent c, Object v) throws ValidatorException { if (!directory.exists(city, state, zip) { throw new ValidatorException("Bad address"); } } } 71 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 72.
    Wiring the validator to the inputs <h:form id="address"> City: <h:inputText id="city" value="#{bean.city}"/> State: <h:inputText id="state" value="#{bean.state}"/> Zip: <h:inputText id="zipCode" value="#{bean.zip}"/> <h:commandButton value="Update" action="#{addressController.update}"/> <s:validateForm validatorId="addressValidator" fields="zip=zipCode"> </h:form> 72 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 73.
    Arquillian: Container-oriented testing for Java EE Throwing complexity over the wall Throwing complexity over the wall @RunWith(Arquillian.class) Wed @ 4:45 Wed @ 4:45 public class GreeterTestCase { Hilton, Golden Gate 4/5 Hilton, Golden Gate 4/5 @Deployment public static Archive<?> createDeployment() { return ShrinkWrap.create(JavaArchive.class) .addClasses(Greeter.class, GreeterBean.class); } @EJB private Greeter greeter; @Test public void shouldBeAbleToInvokeEJB() throws Exception { assertEquals("Hello, Earthlings", greeter.greet("Earthlings")); } } 73 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 74.
    Summary くろまる Java EE 6 is leaner and more productive くろまる JSR-299 (CDI) provides a set of services for Java EE くろまる Bridges JSF and EJB くろまる Offers loose coupling with strong typing くろまる Provides a type-based event bus くろまる Catalyzed managed bean & interceptor specifications くろまる Extensive SPI for third-party integration with Java EE くろまる Weld: JSR-299 reference implementation & add-ons くろまる Seam 3: Portable extensions for Java EE 74 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 75.
    How do I get started? くろまる Download a Java EE 6 container くろまる JBoss AS 6 – http://jboss.org/jbossas くろまる GlassFish V3 – http://glassfish.org くろまる Generate a Java EE project using a Maven archetype くろまる http://tinyurl.com/goweld くろまる Read the Weld reference guide くろまる http://tinyurl.com/weld-reference-101 くろまる Browse the CDI JavaDoc くろまる http://docs.jboss.org/cdi/api/latest/ くろまる Check out the Seam 3 project くろまる http://seamframework.org/Seam3 75 JSR-299 (CDI), Weld and the Future of Seam | Dan Allen
  • 76.
    Q&A Dan Allen Principal Software Engineer JBoss by Red Hat http://seamframework.org/Weld http://seamframework.org/Seam3

AltStyle によって変換されたページ (->オリジナル) /