DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports Events Over 2 million developers have joined DZone. Join Today! Thanks for visiting DZone today,
Edit Profile Manage Email Subscriptions Moderation Admin Console How to Post to DZone Article Submission Guidelines
View Profile
Sign Out
Refcards
Trend Reports
Events
Zones
Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Partner Zones AWS Cloud
by AWS Developer Relations
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Partner Zones
AWS Cloud
by AWS Developer Relations
The Latest "Software Integration: The Intersection of APIs, Microservices, and Cloud-Based Systems" Trend Report
Get the report
  1. DZone
  2. Coding
  3. Java
  4. Q&A with Norman Richards: Contexts And Dependency Injection in Java EE

Q&A with Norman Richards: Contexts And Dependency Injection in Java EE

James Sugrue user avatar by
James Sugrue
CORE ·
Jan. 19, 10 · Interview
Like (1)
Save
Tweet
Share
13.72K Views

Join the DZone community and get the full member experience.

Join For Free

This week's refcard from DZone covers Contexts and Dependency Injection, as included in the JavaEE 6 Platform. The card gives a solid introduction to using Weld, the reference implementation for CDI. I met the author, Norman Richards, to find out more about the topic.

DZone: Could you introduce yourself and your experience in software development and JavaEE?

Norman: I've been in the software industry for nearly 20 years, and I've spent most of that time working on middleware and server side technologies.  I've spent the last 5 years working at Red Hat and JBoss, where I was a member of the Seam development team.  I'm currently working at Socialware developing social middleware solutions while remaining an independent contributor to both Seam and Weld.

DZone: What is CDI and what problem is CDI trying to solve?

Norman: CDI is the contexts and dependency injection standard.  It provides a core set of component management and injection services to the EE platform.  The goal of CDI is not to create a new set of a technologies for developers to learn, but to bring existing technologies together in a way that makes applications simpler.  Simplicity is really the most important thing that Java developers need to keep in mind when evaluating language changes, libraries, programming frameworks, etc...  Generally speaking, as Java developers we already have all the tools needed to tackle any development task.  The issue is no longer whether the technology is sufficient for our tasks, the issue is truly how easy is it to implement a task in a way that is both clear and correct.  That is the fundamental guiding principle in the design of CDI.

DZone: Just in case, could you give an explanation of Dependency Injection in simple terms?

Norman: Dependency injection is a mechanism to achieve a simplicity of code and a simplicity of architecture by removing the need for the application to perform component/service lookup and management.  Instead of having to worry about how a component interacts with its environment, a component can simply perform its tasks in a clear and natural way and assume that the environment connects the dots.  When you have a piece of code where there is more code interacting with the environment than performing application-specific tasks, something is wrong that dependency injection can improve.

DZone: So what is Context and Dependency Injections all about in JavaEE?

Norman: CDI is the heart of the continued simplification of the EE platform.  CDI levels the playing field among EE component types.  Whether you are writing a full EE component like an EJB or a Servlet or you are using plain Java objects, everything you write now integrates with everything else in the same way and can make full use of the annotation-driven, type-safe dependency injection system.  But CDI goes a bit deeper than that.

CDI actually goes a step further than just dependency injection though.  CDI provides a declarative way to manage the scope, state and life-cycle of components bound to contexts.  This is really important on two levels.  The first is that many dependency injection mechanisms only understand the easy things: stateless components, singletons and dependent objects.  Things get more complex when you are talking about components that live in the HTTP session or that are conversational.  CDI understands the context of components and can manage them in an intelligent manner across their entire lifespan.

Finally, one of the largest contributions of CDI is the service provider interface. (SPI)   Like most SPIs, it's easy to overlook it.  However, a lot of care has gone into it to provide an extremely robust way to write portable extensions.  Every aspect of CDI, from bean declaration to contexts is extensible.  How extensible?  Well, the SPI was designed with the goal of being able to deliver frameworks like Seam as a portable extension to CDI.  In fact, Seam 3 is being rewritten around the CDI SPI meaning that Seam itself will be usable on any CDI implementation on any Java EE 6 environment.

DZone: Does CDI provide anything beyond dependency injection?

Norman: Definitely.  CDI introduces several new features across all beans.  There are interceptors and decorators.  Interceptors have been a feature of EJBs for some time, but now the interception model spans all CDI types.  Decorators are a type-specific kind of interceptor that really makes traditional interceptor code less-ugly.  CDI also introduces an event model, which allows components to be very decoupled.

DZone: Is CDI only for enterprise and web applications?

Norman: CDI's main use case is enterprise applications, and CDI is at the core of both the web and full EE profiles.  However, CDI actually fully usable in a Java SE world, and there are examples of people using CDI in standalone web applications. 

DZone: What is your top tip from your Refcard?

Norman: I'm very impressed by the Maven archetypes for Weld, the CDI reference implementation.   The Refcard shows how to use maven to get up and going with a new CDI project in just a few minutes.

Dependency injection CDI Java EE Java (programming language)

Opinions expressed by DZone contributors are their own.

Popular on DZone

  • Configure Kubernetes Health Checks
  • Implementing PEG in Java
  • Chaos Engineering Tutorial: Comprehensive Guide With Best Practices
  • File Uploads for the Web (2): Upload Files With JavaScript

Comments

Partner Resources

X

ABOUT US

  • About DZone
  • Send feedback
  • Careers
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 600 Park Offices Drive
  • Suite 300
  • Durham, NC 27709
  • support@dzone.com
  • +1 (919) 678-0300

Let's be friends: