Top Banner
2007 JavaOne SM Conference | Session TS-4089 | TS-4089 Update on JSR 299: Web Beans Gavin King Red Hat, Inc. JBoss Seam Bob Lee Google, Inc. Google Guice
47

Update on JSR 299: Web Beans

Feb 09, 2022

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 |

TS-4089

Update on JSR 299: Web BeansGavin King

Red Hat, Inc.JBoss Seam

Bob Lee

Google, Inc.Google Guice

Page 2: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 2

JSR 299: Web Beans

Learn how Web Beans can enable you to use a consistent and cohesive component model throughout your application.

Defining a unified Java™ component model

Page 3: Update on JSR 299: Web Beans

32007 JavaOneSM Conference | Session TS-4089

IntroductionsYour Humble Presenters

Page 4: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 4

Gavin King

• JSR 299 spec. lead• Created Hibernate• Created Seam• Heavy contributer to

Enterprise JavaBeans™

(EJB™) 3.0• Author of Hibernate in Action• Former hip hop star

Fellow, Red Hat, Inc.

Page 5: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 5

Software Engineer, Google, Inc.Bob Lee

• Created Google Guice• Java Community

ProcessSM (JCPSM) EC representative for Google

• Struts 2 and WebWork committer

• a.k.a. “Crazy Bob”

Page 6: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 6

JSR 299: Web BeansThe Expert Group

• Companies– Adobe Systems, Inc.– Apache Software

Foundation– Google, Inc.– Oracle– Pramati Technologies– Red Hat, Inc.– Sun Microsystems, Inc.– Tmax Soft, Inc.

• Individual members– Jacob Hookom– Oliver Ihns– Richard Kennard– Conny Lundgren– Chris Maki– Kito Mann– Martin Marinschek

Spec. Lead: Gavin King

Page 7: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 7

JSR 299: Web BeansStatus

• The specification itself is just getting started• But it’s seeded by mature contributions

• Seam• Guice• Shale• And others…

Page 8: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 8

Web Beans addressesProblems

• Need for a unified component model• Managing state

• Scoping components• Conversation management

• Finding components• Configuration

Page 9: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 9

Web Beans is architected with the Java EE platform in mind

Relationship to Java Platform, Enterprise Edition (Java EE Platform) 5

• Web Beans components may be used seamlessly as JavaServer™ Faces technology managed beans• In a sense, the model is an extension/replacement of the

managed beans model that is transactional, secure, etc.

• EJB 3.x technology components may be Web Beans• Web Beans addresses the problem of integrating EJB

technology components into the web tier

• The core of Web Beans is being architected to have no hard dependency upon JavaServer Faces or EJB 3 technology

Page 10: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 10

What Is a Web Bean?

• The Web Beans component model is all about loose coupling:• Decouple implementations of server and client

• By allowing easy overriding of server implementation• Decouple lifecycles of collaborating components

• Using automatic state/lifecycle management• “Contextual components”

• Decouple orthogonal concerns• Using interceptors• (True AOP is a boondoggle—an absurdly overcomplex

solution to a narrow range of problems)

Page 11: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 11

What Is a Web Bean?

• Ingredients• API • Implementation• Scope• Name• Binding annotations• Priority

• Kinds of components• Stateful and stateless session beans

• Even WebService endpoints!• Entity beans• Any Java class file

Page 12: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 12

Simple Example

• Trivial case

public@Stateless@Componentclass Hello {

public String hello(String name) {return “hello “ + name;

}

}

Page 13: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 13

Simple Example

• Java platform client

public@Stateless@Componentclass Printer {

@In Hello hello;

public void hello() {System.out.println( hello.hello(“world”) );

}

}

Page 14: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 14

Simple Example

• EL client

<h:commandButton value=”Say Hello”action=”#{hello.hello}”/>

Page 15: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 15

Overriding Components

• It is legal to have multiple implementations of the same component• i.e., same API, name, binding annotations• But they must specify different priorities

• At runtime, the Web Beans container chooses the implementation with the highest priority from those in the classpath• It is illegal to have two components with the same

name and priority, or same binding annotations and priority

Page 16: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 16

Overriding Components

• Predefined priorities• BUILT_IN• FRAMEWORK• APPLICATION• DEPLOYMENT• MOCK Highest

Lowest

Page 17: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 17

Overriding Components

• Implement an interface

public@Stateless@Component(type=Greeting.class)class Hello implements Greeting {

public String greet(String name) {return “Hello “ + name;

}

}

Page 18: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 18

Simple Example

• Inject by the interface type

public@Stateless@Componentclass Printer {

@In Greeting greeting;

...

}

Page 19: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 19

Simple Example

• Override the default implementation

public@Stateless@Component(type=Greeting.class, priority=DEPLOYMENT)class Hola implements Greeting {

public String greet(String name) {return “Hola “ + name;

}

}

Page 20: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 20

Overriding Components

• We can easily mock out a component for testing

public@Stateless@Component(type=Greeting.class, priority=MOCK)class MockHello extends Hello {

public String greet(String name) {return “Hello World”;

}

}

Page 21: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 21

Interceptors

• EJB 3.0 specification defined a nice interceptor model• For dealing with concerns orthogonal to the

business logic• Extend that model to all kinds of Web Beans

• (Except entities?)• Actually, the Web Beans container is

implemented using EJB 3.0 specification interceptors

Page 22: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 22

Scopes

• A scope is a policy for reusing component instances

• The scope of a component determines its lifecycle

• Web Beans features an extensible set of scopes

Page 23: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 23

Scope Examples

• no scope (new instance each time)• request• session• conversation• application (singleton)• custom extensions

• business process• cluster• method

Page 24: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 24

Injection

• Pico, Spring, Guice, EJB 3.0 technology: injection at component instantiation time• Via constructor, setter methods, direct field access

• Seam: injection at method invocation time• Via setters or direct field access• Allows components in a narrower scope

(e.g., request) to be injected into a component in a wider scope (e.g., session, conversation)

• Extreme loose coupling

Page 25: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 25

Specifying Component Scope

• Use a scoping annotation

public@SessionScoped@Stateful@Componentclass ShoppingCart { ... }

Page 26: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 26

Defining a New Scope

• Create a custom scoping annotation

public@Documented@Target(TYPE)@Rentention(RUNTIME)@ScopeTypeclass MethodScoped { ... }

Page 27: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 27

Defining a New Scope

• Use the Contexts API to manage the lifecycle

public class MethodScopeInterceptor {

@AroundInvokepublic Object manageMethodScope(Invocation invocation){

Contexts.createContext(MethodScoped.class, new Context() );

try {return invocation.proceed();

}finally {

Contexts.destroyContext(MethodScoped.class);}

}}

Page 28: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 28

Defining a New Scope

• Now apply it to the component

public@Stateful@MethodScoped@Componentclass Timer {

public void start() { ... }public void stop() { ... }

}

Page 29: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 29

Components With Multiple Roles

• What if we want to use the same component implementation class in different ways?• We might need two instances of the component

at once• From different scopes, even

Page 30: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 30

Components With Multiple Roles

• The implementation class defines the default role

public@ConversationScoped@Entity@Component(name=”user”) @Roles(LoggedIn.class)class User {

...}

Page 31: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 31

Components With Multiple Roles

• The binding annotation defines an additional role

public@Documented@Rentention(RUNTIME)@SessionScoped@Component(name=”loggedInUser”)@interface LoggedIn {}

Page 32: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 32

Components With Multiple Roles

• Using both roles together is easy

public@Stateless@Componentclass BanUser {

@In User user;@In @LoggedIn User administrator;

public void ban() {user.bannedBy(administrator);

}

}

Page 33: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 33

Components With Multiple Roles

• Or, in EL

#{user} was banned by #{loggedInUser}

Page 34: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 34

Finding Components by Name

• Dynamically typed• Used exclusively in Seam• Each component has a unique string identifier• Useful for:

• Expression languages (JavaServer Faces technology, JavaServer Pages™ (JSP™))

• XML configuration

Page 35: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 35

Finding Components by Type

• Statically typed• Used exclusively in Guice• Each component has:

• A mandatory invariant type• A parent of the implementation type• Noun

• An optional set of annotation types• Adjectives

• Useful for Java platform clients• Enables concise dependency injection

Page 36: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 36

Binding Annotations

• Used to find components by type• Describe the component—adjectives• Reusable across types

•@Transactional DataSource•@Transactional WebService

• Not just markers•They can have attribute values, too•@Named(“Gavin”)

Page 37: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 37

Example: Find by Typeclass Client {

@In Service service;@In @Transactional DataSource dataSource;

...}

• @In• Methods• Fields• Constructors?

• Component annotations go on:• The field declaration• Parameter declarations

Page 38: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 38

Names vs. Types

• Use names in dynamically typed contexts• Expressions• XML• Scripting languages

• Use types for Java platform (and Groovy) clients• Full support for generic types• More up front checking• Better tool support• Simpler testing

Page 39: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 39

Defining Component Externally

• An alternative way to define new roles<componentclass=’Material’role=’Hard’scope=’ApplicationScoped’name=’concrete’

/>

Page 40: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 40

Conversation Scope

• Primarily used with servlets• Bigger than a request• Smaller than a session• Spans multiple requests• Useful for implementing wizards• Support multiple instances of the same wizard

running in different browser windows • Manage persistence context

• Optimistic locking• Lazy fetching

Page 41: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 41

Configuration

• Unify existing configuration mechanisms• JavaServer Faces technology has something nice

(but doesn’t go far enough)• EJB 3 technology has something awful• We need one way to do it

• Inject literal values directly• Support conversion/validation of values• Wire components together view EL

Page 42: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 42

BPM

• A business process is a long-running collaboration between multiple users

• A business process engine can manage (persist and share) state associated with a process instance

• The engine also manages the process workflow (tasks, and dependencies between tasks)

• A “task” is just a special kind of conversation• Java EE platform has no standard business

process management engine• So Web Beans will be extensible, to allow addition

of a business process scope

Page 43: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 43

Packaging and Deployment

• Currently, Java EE platform requires a complex deployment archive structure• EJB technology, Java Archive (JAR), WAR nested

inside the EAR• Web Beans breaks down the traditional barrier

between the web and transactional tiers• So we need to simplify the packaging model• Java EE 6 platform should allow deployment

of EJB technology components (and any other Web Beans) directly into the classes/directory of a WAR

Page 44: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 44

Summary

• Early stages of the specification• Strong existing contributions• The Future Is Bright

Page 45: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 45

For More Information

• Check out• Seam• Guice

Page 46: Update on JSR 299: Web Beans

462007 JavaOneSM Conference | Session TS-4089 |

Q&AGavin King and Bob Lee

Page 47: Update on JSR 299: Web Beans

2007 JavaOneSM Conference | Session TS-4089 |

TS-4089

Update on JSR 299: Web BeansGavin King

Red Hat, Inc.JBoss Seam

Bob Lee

Google, Inc.Google Guice