Lead (9Y.) | CIC, IBM. • Duke Award Winner 2016. • IBM/Open Group Certified Experienced IT Specialist. • M.Sc. in Information System, FCI, Egypt. • MIBA in Global Management, ESLSCA, France. • OCEJPA | OCPWCD | OCPJP | OCP PL/SQL | MCP(s). • JAVA Community Process (JCP) Member. • Blogger Author and Academic Researcher.
JSR is a document of a proposed specification used in the Java Community Process (JCP). • Classes specify what their dependencies • NOT how to obtain them (container responsibility)
rich programming model • The theme of CDI is loosecoupling with strong typing. • A bean specifies only the type and semantics of other beans it depends upon • It need not be aware of the actual lifecycle, concrete implementation, threading model or other clients of any bean it interacts with • Even better, the concrete implementation, lifecycle and threading model of a bean may vary according to the deployment scenario, without affecting any client • This loose-coupling makes your code easier to maintain
• By detecting the presence of “beans.xml” in application archive • For WAR file, the “beans.xml” is under WEB-INF directory • For JAR file, the “beans.xml” is under META-INF directory • • “beans.xml” • It is not for declaring beans (like in Spring) • It can be empty • Used for some other purposes (like declaring an alternative)
are container-managed POJOs • Lightweight component model • Instances are managed by the container • You could see everything as a Managed Bean with extra services • • An EJB is a Managed Bean with • Transaction support • Security • Thread safety • Persistence • • A REST service is a Managed Bean with • HTTP support • • A CDI bean is a Managed Bean with • CDI services (explained in the next slide)
injection • <Java-Type> can be Java interface • Bean can be injected at “Injection points” • Field • Method parameter • Method can be • Constructor (useful for created immutable object) • Initializer • Setter method • Producer • Observer
(class or interface), there may be multiple beans which implement the type (in the classpath) • For an interface, there could be multiple implementations • For a class, there could be multiple child types • Ambiguity error will result • A qualifier is an annotation that lets a client choose one between multiple candidates of a certain type • Make type more specific • Assigns semantic meaning • Injected type is identified by • Qualifier(s) + Java type
type makes a composite type (extended type) • Again, think of a Qualifier as a type • Qualifiers make type safe injection possible • Qualifiers replace “look-up via string-based names” • Qualifier and Type Safety (Strong Typing)
not considered for injection • Lets you package multiple beans that match injection type without ambiguity errors • In order to be considered for injection, it has to be activated in “beans.xml” • Provide a replacement implementation during deployment • You can apply the @Alternative annotation to two or more beans, then, based on your deployment, specify the bean you want to use in the “beans.xml” configuration file • Useful for providing mock objects for testing – mock objects are annotated with @Alternative
shared across all users’ interactions with a web application. • The container provides the same instance of the @ApplicationScoped annotated bean to all client requests.
object exists to serve exactly one client (bean) and has the same lifecycle as that client (bean). • This is the default scope for a bean which does not explicitly declare a scope type. • An instance of a dependent bean is never shared between different clients or different injection points. • It is strictly a dependent object of some other object. • It is instantiated when the object it belongs to is created, and destroyed when the object it belongs to is destroyed.
• Retains the scope lifespan for current page view • If the controller navigates away to a different page view the bean is de-scoped • Therefore view-scope is great for form validation and rich AJAX request and response sequences!
Request scope and Http Session scope • Maintains state for the unique interaction • Works for individual tab in web browsers • Better than @ViewScoped bean controllers • Application defined lifespan
is that beans must be serializable. • This is because the container passivates the HTTP session from time to time, so when the session is activated again the beans’ state must be retrieved.
• It defines that a bean is once instantiated. • When a CDI managed bean is injected into another bean, the CDI container makes use of a proxy. • The proxy is the one to handle calls to the bean. • Though, @Singleton annotated beans don’t have a proxy object. • Clients hold a direct reference to the singleton instance.
a client is serialized ? • We must ensure that the singleton bean remains a singleton. • To do so there are a fiew ways, such as, have the singleton bean implement writeResolve() and readReplace() (as defined by the Java serialization specification), make sure the client keeps only a transient reference to the singleton bean, or give the client a reference of type Instance<X> where X is the bean type of the singleton bean.
specification. • The Interceptors specification defines three kinds of interception points: • Business method interception, • Lifecycle callback interception, and • Timeout method interception (EJB only). • A business method interceptor applies to invocations of methods of the bean by clients of the bean • By default, all interceptors are disabled
pattern • Allows implementation of an additional business logic for a bean • A Decorator decorates interfaces they implement • @Delegate is used to inject the original object • Original object business logic can be be invoked within the decorator • Decorators must be activated through “beans.xml”
cross-cutting logic. • Bypass traditional complexity associated with AOP by avoiding point-cuts. • Interceptors are designed for system-level crosscutting concerns very decoupled from business logic. • Decorators intended for concerns that should be compartmentalized but are still very close to business logic.
and reactions • (event consumers) • Qualifiers tune which event notifications are received • Define Event Class • Event producer fires an event • Event consumer observes event through @Observes
an injected javax.enterprise.event.Event object • Event Consumer (Event Observer) • The only thing event consumer has to do is to use @Observes <Event-class> annotation
• Locking • @Lock(READ • @Lock(WRITE) • @AccessTimeout • Allows for synchronization of methods without complex code • Usable by • @Singleton • Not @Stateless • Not @Stateful
in your app (Java EE 6) • No CDI for you! • Not understanding @Typed • Think @Local from EJB • Bites you when using @Produces • Not understanding what Dependent and NormalScope • Dependent == plain object • NormalScoped == proxied object • Bites you when creating custom scopes
group • Fully extendable • Beans can be added at development, deployment, or even runtime • Fully Open Source • Spec is open source • All implementations are open source • Compliance test (TCK) suite is open source