Skip to main content

Learning CDI (Contexts and Dependency Injection) Part 1

Please see the second part here


Contexts and Dependency Injection (CDI ) JSR 299 is a new feature in Java EE 6 Web Profile .  Its Enhance the JSR 330 Dependency Injection in Java. CDI are highly used annotation. CDI makes Loose coupling between classes. To use javax.inject.Inject annotation, we can inject any class into another classes 
  
In traditional way, we create the instance using 'new' operator in another class. here thats instance life time is dependent on target class. its tightly coupled. Here CDI makes to loosely coupled and change the life-cycle for that instance.




CDI provides

  • Life-cycle context to objects
  • type safe injection
  • Interceptor and event-notification 

Dependency Injection is one of the great feature in Spring. but there used String based DI. here finding  problems (i.e string misspelling, Incompatible classes) are in runtime only. In CDI uses annotation its find most of the problem in compile time.


Traditional Way 




In ClassB class we create ClassA instance using 'new' operator and life-cycle of ClassA is bounded.  But if we use CDI then instance creation responsibility goes to container (Java EE Container)



CDI Implementations
  • Weld from JBoss Community
  • Open WebBeans from Apache

In Weld is integrated in GlassFish server 3.0 by default. When we create project in Netbeans we need to check the Enable Context and Dependency Injection Checkbox in Project Creation wizard, Netbeans automatically create beans.xml in WEB-INF Folder . Otherwise CDI is not enabled. If u use old netbeans (older  than Netbeans 6.9) then that option is not present, so u need to manualy create empty  beans.xml file in WEB-INF folder. If beans.xml file is present then CDI is enabled, Otherwise its disabled.


Example





Tester.java

here we are not using any 'new' operator. Container take the responsibility to create the instance where its needed. If u inject the interface, container automatically find the implementaion of the interface and inject it.

If we have more than one implementation of particular interface then its show ambiguity exception in compile time. because container confuse which one should inject?. We solve the problem in two ways.

  1. We directly inject the implementation instead of interface 
  2. We use Qualifier annotation 

Please see the second part here



Screen Cast



Comments are welcomed



Please see the second part here






Popular posts from this blog

Understanding Virtual Host Concept in Tomcat

Hi in this post we will see how to setup virtual host in Apache Tomcat server. Virtual Host is in-built feature that allows to deploy multiple website(domains) in single instance of tomcat server. The main benefit in this way is its cost effective. Scenario: I am going to deploy 3 website with following domain names in single tomcat http://www.ramki.com http://www.krishnan.com http://www.blog.ramki.com The following diagram is my outline. Outline structure of Virtual Host Concept in Tomcat Here my tomcat IP address 192.168.1.15. or any IP address allocated my ISP. but it should be public IP address. How all domain names are pointing to my Tomcat?                   When we purchase the domain name we need to update the our tomcat IP address to it. like or we can simulate same DNS Setup through hosts file in both Linux and Windows. In Linux tha file is located at /etc/hosts Now How Setup Virtual Host Concept? Before going to setup the virtual host. first tak

Docker : Tomcat Clustering with Load Balancer (Tomcat and Nginx)

In this post i will show Tomcat Clustering in Docker Container. In  my previous post i discussed how to achieve tomcat clustering with Nginx Front end . Its almost same scenario, but this time we will achieve via docker container. Docker Docker  is an  open-source  project that automates the deployment of  applications  inside  software containers , by providing an additional layer of abstraction and automation of  operating-system-level virtualization  on  Linux . [4]  Docker uses resource isolation features of the Linux kernel  such as  cgroups  and kernel  namespaces  to allow independent "containers" to run within a single Linux instance, avoiding the overhead of starting and maintaining  virtual machine   --Wikipedia

Virtual Host + Apache httpd server + Tomcat + mod_jk connector

In my last post ( Virtual Host in Tomcat ) we discussed about how setup the virtual host in Tomcat. Its cost effective technique because only one public IP is enough to host multiple domain. If we have big organization and each department want to host their website in locally in different machine. then how to achieve the virtual host concept?. In this post we will see the how we do this. Update :   I posted  Virtual Host + Nginx + Tomcat  Its easy to configure, compare to Apache httpd server Problem Scenario:         In big organization they have multiple department, each department want to host their website in different machine. so these websites are accessed locally with different local IP address. When we mapping to public address then we face the problem. We have two choice either purchase as many public address or Put one server front  and delegate these request.  We going to use 2nd option. we put Apache httpd web server in front of all department servers. so onl