KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jboss > portal > core > servlet > TransactionFilter


1 /*****************************************
2  * *
3  * JBoss Portal: The OpenSource Portal *
4  * *
5  * Distributable under LGPL license. *
6  * See terms of license at gnu.org. *
7  * *
8  *****************************************/

9 package org.jboss.portal.core.servlet;
10
11 import java.io.IOException JavaDoc;
12
13 import javax.naming.InitialContext JavaDoc;
14 import javax.naming.NamingException JavaDoc;
15 import javax.naming.Context JavaDoc;
16 import javax.servlet.Filter JavaDoc;
17 import javax.servlet.FilterChain JavaDoc;
18 import javax.servlet.FilterConfig JavaDoc;
19 import javax.servlet.ServletException JavaDoc;
20 import javax.servlet.ServletRequest JavaDoc;
21 import javax.servlet.ServletResponse JavaDoc;
22 import javax.transaction.TransactionManager JavaDoc;
23 import javax.transaction.Transaction JavaDoc;
24
25 import org.apache.log4j.Logger;
26 import org.jboss.portal.common.transaction.Transactions;
27 import org.jboss.portal.common.transaction.NestedException;
28 import org.jboss.portal.common.transaction.TransactionException;
29
30 /**
31  * Wraps a servlet into a user transaction. Behaviour
32  * is similar as RequiresNew in EJB world.
33  *
34  * @author <a HREF="mailto:julien@jboss.org">Julien Viet</a>
35  * @version $Revision: 1.5 $
36  */

37 public class TransactionFilter implements Filter JavaDoc
38 {
39
40   // Attributes ----------------------------------------------------
41

42    /** The JNDI context. */
43    private TransactionManager JavaDoc tm;
44
45    // Static --------------------------------------------------------
46

47    private static Logger log = Logger.getLogger(TransactionFilter.class);
48
49    // Filter implementation -----------------------------------------
50

51    public void init(FilterConfig JavaDoc filterConfig) throws ServletException JavaDoc
52    {
53       try
54       {
55          Context JavaDoc ctx = new InitialContext JavaDoc();
56          tm = (TransactionManager JavaDoc)ctx.lookup("java:/TransactionManager");
57       }
58       catch (NamingException JavaDoc e)
59       {
60          throw new ServletException JavaDoc(e);
61       }
62    }
63
64    public void destroy()
65    {
66       this.tm = null;
67    }
68
69    public void doFilter(final ServletRequest JavaDoc request,
70                         final ServletResponse JavaDoc response,
71                         final FilterChain JavaDoc chain)
72            throws ServletException JavaDoc, IOException JavaDoc
73    {
74
75       Transaction JavaDoc oldTx = null;
76       try
77       {
78          oldTx = Transactions.applyBefore(Transactions.TYPE_REQUIRED, tm);
79          chain.doFilter(request, response);
80       }
81       catch (TransactionException e)
82       {
83          throw new ServletException JavaDoc(e);
84       }
85       finally
86       {
87          try
88          {
89             Transactions.applyAfter(Transactions.TYPE_REQUIRED, tm, oldTx);
90          }
91          catch (TransactionException e)
92          {
93             log.error("", e);
94          }
95       }
96    }
97 }
98
Popular Tags