<document>
<localtoc/>

The Resin distribution for 3.0.9 has been refactored into two distributions:

- Resin Professional - Most companies and organizations will use Resin Professional. Includes performance, caching, and clustering capabilities.
- Resin Open Source (GPL) - Contains all functional components of Resin, including EJB, but excludes performance and clustering capabilities.

The EJB implementation has been refactored to use a new underlying persistence engine (Amber). It would be wise for current CMP/EJB users to take extra care verifying Resin 3.0.9 before putting it into production.

See the EJB 3.0 tutorials for examples.

Resin 3.0.9 includes an implementation the EJB 3.0 early-draft spec features. EJB 3.0 has a number of significant changes over EJB 2.1:

- Uses JDK 1.5 annotations (@Entity, @Column, etc.) instead of deployment descriptors.
- Home interfaces are no longer needed
- Entities are beans (i.e. not pooled objects as in EJB 2.1)
- Entities can use JDO-style field-enhancement instead of method enhancement

Resin 3.0.9 has an experimental support for annotation-based transactions. The annotations use the EJB 3.0 markers. The enhancement is configured as part of the <class-loader> configuration.

The following code instructs Resin to enhance MyBean so a transaction is always started when businessMethod is called. The `ResinEnhanced` is required.

package qa; import javax.ejb.TransactionAttribute; import javax.ejb.TransactionAttributeType; import com.caucho.java.enhancer.ResinEnhanced; @ResinEnhanced public class MyBean { ... @TransactionAttribute(TransactionAttributeType.REQUIRED) public void businessMethod(String arg1) throws FooException { ... } }

The configuration adds the bytecode enhancer with the transaction enhancer enabled.

<web-xml xmlns="http://caucho.com/ns/resin"> <class-loader> <enhancer resin:type="com.caucho.java.enhancer.ClassEnhancer"> <enhancer resin:type="com.caucho.transaction.enhancer.TransactionEnhancer"/> </enhancer> </class-loader> .. </web-xml>

As an experimental feature, servlets can use JDK 1.5 Injection annotations.

Hessian and Burlap services can now pick up the protocol headers using the `ServiceContext.getHeader` method.

<example> package qa; import com.caucho.services.server.GenericService; import com.caucho.services.server.ServiceContext; public class MyService extends GenericService { public Object header() { return ServiceContext.getContextHeader("a"); } }

Allows the taglib schema validation to be turned off. This should only be used in the case where a .tld file in a third-party jar is invalid.

The Hessian servlet can now specify its SerializerFactory. You can use this to avoid sending the collection type with Hessian.

<servlet servlet-name="my-service" servlet-class="qa.MyService"> <init> <serializer-factory> <send-collection-type>false<send-collection-type> </serializer-factory> </init> </servlet> <servlet servlet-name="my-service" servlet-class="qa.MyService"> <init> <send-collection-type>false<send-collection-type> </init> </servlet>

The filter-mapping can now accept more sophisticated matches, allowing filters to exclude URLs.

<example> <filter-mapping filter-name="gzip"> <url-pattern> <exclude-regexp>\.(pdf,mov)</exclude-regexp> </url-pattern> </filter-mapping>

JSSE now has an <alias> tag to select the alias from the keystore.

com.caucho.jsp.JspCompiler can now accept a -conf argument, which points to a web-app configuration.

<web-app xmlns="http://caucho.com/ns/resin"> <document-directory>/opt/www/foo</document-directory> <resin:import path="/opt/resin/conf/app-default.xml"/> </web-app> unix> java com.caucho.jsp.JspCompiler -conf /opt/resin/compile-app.xml" test/foo.jsp

The preloaded tlds can now be configured with the <tld-file-set> tag. By default all tlds in WEB-INF are loaded. In some cases where the WEB-INF contains many files, this is inappropriate.

<web-app xmlns="http://caucho.com/ns/resin"> <jsp> <tld-file-set dir="WEB-INF"> <include name="tld/**/*.tld"/> </tld-file-set> </jsp> </web-app>
</document>