![]() | ![]() | ![]() | ||||||||
![]() | ||||||||||
documentation examples changes overview quick start installation command-line configuration admin amber clustering caching database deployment ejb 3.0 embedding filters hessian hmtp ioc jsp logging messaging performance quercus/php remoting scheduled tasks security server push servlets third-party troubleshooting virtual hosting watchdog webapp xml and xslt hessian hessian 1.0 spec hessian 2.0 draft spec java binding burlap burlap 1.0 spec burlap design notes hessian messaging | burlap
Burlap is a simple XML-based protocol for connecting web services. The com.caucho.burlap.client and com.caucho.burlap.server packages do not require any other Resin classes, so can be used in smaller clients, like applets. Because Burlap is a small protocol, J2ME devices like cell-phones can use it to connect to Resin servers. Because it's powerful, it can be used for EJB services. Using a Burlap service from a Java client is like calling a method. The BurlapProxyFactory creates proxies which act like normal Java objects, with possibility that the method might throw a protocol exception if the remote connection fails. Using BurlapProxyFactory requires JDK 1.3. Each service will have a normal Java interface describing the service. The trivial hello, world example just returns a string. Because the Burlap services support Java serialization, any Java type can be used. API for Basic service package burlap.test; public interface Basic { public String hello(); } The following is an example of a standalone Burlap client. The client creates a BurlapProxyFactory. The client uses the factory to create client stubs with the given target URL and a Java interface for the API. The returned object is a stub implementing the API. Burlap Client for Basic service package burlap.test; import java.net.URL; import com.caucho.burlap.client.BurlapProxyFactory; public class BasicClient { public static void main(String []args) throws Exception { URL url = new URL("http://www.caucho.com/burlap/test/basic"); BurlapProxyFactory factory = new BurlapProxyFactory(); Basic basic = (Basic) factory.create(Basic.class, url); System.out.println("Hello: " + basic.hello()); } } There are no more complications to using the client. The service can add methods and use any Java type for parameters and results. While most Burlap services will use Resin-CMP or Resin-EJB, to take advantage of the benefits of EJB, the Burlap library makes it possible to write services by extending BurlapServlet. Any public method is treated as a service method. So adding new methods is as easy as writing a normal Java class. Because the service is implemented as a Servlet, it can use all the familiar servlet data in the ServletContext, just like a normal servlet. Hello Service package burlap.test; import com.caucho.burlap.server.BurlapServlet; public class BasicService extends BurlapServlet implements Basic { public String hello() { return "Hello, world"; } } Burlap can be used for even small Java devices. The following classes from com.caucho.burlap.client can be extracted into a J2ME jar:
The following example shows the code for using a cell phone as a client. It's a bit more complicated than using the proxy, since the client is responsible for creating the connection and writing the data. Hello, world import javax.microedition.io.Connector; import javax.microedition.io.HttpConnection; ... MicroBurlapInput in = new MicroBurlapInput(); String url = "http://www.caucho.com/burlap/test/basic"; HttpConnection c = (HttpConnection) Connector.open(url); c.setRequestMethod(HttpConnection.POST); OutputStream os = c.openOutputStream(); MicroBurlapOutput out = new MicroBurlapOutput(os); out.call("hello", null); os.flush(); is = c.openInputStream(); MicroBurlapInput in = new MicroBurlapInput(is); Object value = in.readReply(null); The Burlap classes can be used for serialization and deserialization. Serialization Object obj = ...; OutputStream os = new FileOutputStream("test.xml"); BurlapOutput out = new BurlapOutput(os); out.writeObject(obj); os.close(); Deserialization InputStream is = new FileInputStream("test.xml"); BurlapInput in = new BurlapInput(is); Object obj = in.readObject(null); is.close();
|