1 package net.sf.crispy.impl;
2
3 import java.util.Properties;
4
5 import net.sf.crispy.InvocationException;
6 import net.sf.crispy.InvocationStrategy;
7 import net.sf.crispy.proxy.StaticProxy;
8 import net.sf.crispy.strategy.NameInvocationStrategy;
9
10 import com.caucho.burlap.client.BurlapProxyFactory;
11
12 /**
13 * Remote-Call with Burlap Remote Invocation (Caucho).
14 *
15 * @author Linke
16 *
17 */
18 public class StaticBurlapProxy extends StaticProxy {
19
20 public final static String DEFAULT_URL_AND_PORT = "http://localhost:8091/crispy/burlap";
21
22 private BurlapProxyFactory factory = new BurlapProxyFactory();
23
24 public StaticBurlapProxy() {
25 factory.setOverloadEnabled(true);
26 }
27
28 /**
29 * Get default url and port. If no url and port is in properties.
30 *
31 * @return Default url and port.
32 */
33 public String getDefaultUrlAndPort() {
34 return DEFAULT_URL_AND_PORT;
35 }
36
37 public InvocationStrategy getDefaultInvocationStrategy(Properties pvProperties) {
38 String lvInterfaceName = (String) pvProperties.get(PROPERTY_CURRENT_INTERFACE_CLASS);
39 return new NameInvocationStrategy(lvInterfaceName);
40 }
41
42 /**
43 * @see net.sf.crispy.proxy.Proxy#newInstance(java.lang.Class)
44 */
45 public Object newInstance(Class pvProxyClass) {
46 String lvUrlAndPort = getUrlAndPort() + "/" + getInvocationStrategy();
47 if (log.isDebugEnabled()) { log.debug("Burlap Url and Port: " + lvUrlAndPort); }
48
49 try {
50 Object lvProxyObject = null;
51 synchronized (factory) {
52 lvProxyObject = factory.create(pvProxyClass, lvUrlAndPort);
53 }
54
55 setProxyObject(lvProxyObject);
56 setProxyClass(pvProxyClass);
57 } catch (Exception e) {
58 throw new InvocationException("Error in newInstance in StaticBurlapProxy: " + e, e);
59 }
60 if (log.isDebugEnabled()) { log.debug("Burlap Object created: " + getProxyObject()); }
61 return getProxyObject();
62 }
63 }