Occasionally, users have the need to override the version of JSF included in the application server by bundling a different version of JSF with their application. If you are trying to use CDI in such a scenario, you might have noticed it does not work. Is there a way out?
Yes, there is, by including a small JAR and some configuration in your web application you can make this scenario work.
Add the following Maven dependency to your web application.
<dependency>
<groupId>com.oracle.cdi-enabler</groupId>
<artifactId>cdi-enabler-1_0</artifactId>
<version>1</version>
<scope>compile</scope>
</dependency>
Then add the following beans.xml to your WEB-INF directory and you are set to go!
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
<alternatives>
<class>com.oracle.cdi_enabler.CdiConversation</class>
</alternatives>
</beans>
Note this particular version of the JAR requires you to use this on a JavaEE6 container that bundles a CDI 1.0 implementation, like Glassfish 3.1.2.2 or Weblogic 12.1.2.
Posted December 10, 2013