Mule+Servlet+JPA

From Resin 3.0

Revision as of 22:26, 12 February 2008 by Emil (Talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Mule and Resin using the Mule Servlet provider and JPA (Amber)

Mule can be run within Resin and use objects created by it as components. This allows Mule to take advantage of Resin IoC and Amber, Caucho's implementation of JPA. This example shows how to use all of these technologies together.

(The following has been tested with Resin 3.1.5 and Mule 1.4.3)

  1. Download Resin from http://www.caucho.com/download
  2. Unzip Resin into /usr/local/share/resin
  3. Create the Mule webapp directory structure:
    mkdir -p /usr/local/share/resin/webapps/mule/WEB-INF/lib/
    mkdir -p /usr/local/share/resin/webapps/mule/WEB-INF/classes/example/
    mkdir -p /usr/local/share/resin/webapps/mule/WEB-INF/classes/META-INF/
  4. Download Mule from http://mule.mulesource.org/display/MULE/Download
  5. Unzip Mule
  6. Copy all the jars included the Mule lib/ directory to
    /usr/local/share/resin/webapps/mule/WEB-INF/lib/
  7. Create the configuration file /usr/local/share/resin/webapps/mule/WEB-INF/resin-web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://caucho.com/ns/resin">
      <database>
        <jndi-name>jdbc/resin</jndi-name>
        <driver type="org.gjt.mm.mysql.Driver">
          <url>jdbc:mysql://localhost:3306/MuleJPA</url>
          <user>root</user>
          <password/>
        </driver>
      </database>
    
      <ejb-server data-source="jdbc/resin"/>
    
      <bean class="example.CourseComponent" name="courseComponent"/>
    
      <context-param>
        <param-name>org.mule.config</param-name>
        <param-value>/WEB-INF/course-config.xml</param-value>
      </context-param>
    
      <listener>
        <listener-class>com.caucho.mule.MuleResinContextListener</listener-class>
      </listener>
    
      <servlet servlet-name="mule-servlet"
               servlet-class="org.mule.providers.http.servlet.MuleReceiverServlet"/>
    
      <servlet-mapping url-pattern="/*" servlet-name="mule-servlet"/>
    </web-app>
    
  8. Create a data bean file /usr/local/share/resin/webapps/mule/WEB-INF/classes/example/CourseBean.java
    package example;
    
    import javax.persistence.*;
    
    @Entity@Table(name="basic_courses")
    public class CourseBean {
      private int _id;
      private String _course;
      private String _teacher;
    
      @Id@Column(name="id")
      @GeneratedValue
      public int getId()
      {
        return _id;
      }
    
      public void setId(int id)
      {
        _id = id;
      }
    
      @Basic
      public String getCourse()
      {
        return _course;
      }
    
      public void setCourse(String course)
      {
        _course = course;
      }
    
      @Basic
      public String getTeacher()
      {
        return _teacher;
      }
    
      public void setTeacher(String teacher)
      {
        _teacher = teacher;
      }
    }
    
  9. Create the implementation file /usr/local/share/resin/webapps/cxf/WEB-INF/classes/demo/StrLenImpl.java
    package demo;
    
    import javax.jws.WebService;
    
    @WebService(endpointInterface="demo.StrLen")
    public class StrLenImpl
    {
      public int strlen(String x)
      {
        return x.length();
      }
    }
    
  10. Create a Servlet to access the service /usr/local/share/resin/webapps/cxf/WEB-INF/classes/demo/StrLenDemo.java
    package demo;
    
    import java.io.IOException;
    import java.io.Writer;
    
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.webbeans.In;
    
    public class StrLenDemo extends HttpServlet
    {
      @In StrLen strlenClient;
    
      public void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws IOException
      {
        Writer out = resp.getWriter();
        out.write("strlen(\"hello, world\") = " + 
                  strlenClient.strlen("hello, world"));
      }
    }
    
  11. Start Resin with java -jar /usr/local/share/resin/lib/resin.jar
  12. Look at http://localhost:8080/cxf/StrLenDemo
    It should show
    strlen("hello, world") = 12
    
Personal tools