Mule+Servlet+JPA
From Resin 3.0
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)
- Download Resin from http://www.caucho.com/download
- Unzip Resin into
/usr/local/share/resin
- 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/
- Download Mule from http://mule.mulesource.org/display/MULE/Download
- Unzip Mule
- Copy all the jars included the Mule lib/ directory to
/usr/local/share/resin/webapps/mule/WEB-INF/lib/
- 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>
- 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; } }
- 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(); } }
- 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")); } }
- Start Resin with
java -jar /usr/local/share/resin/lib/resin.jar
- Look at http://localhost:8080/cxf/StrLenDemo
It should showstrlen("hello, world") = 12