|
Page Edited :
OPENEJB :
Service Locator
Service Locator has been edited by David Blevins (Sep 28, 2007). Content:The functionality of the openejb.jndiname.format allows for writing some really fun service locator code. Creating the exact layout you want using the exact data you want means you can create robust libraries for pulling things out of JNDI. Lookup examplesTo get the creative juices flowing here are a few examples of lookup methods you could create for your service locator, the jndi name formats that would work with those lookups, and examples of client code using the service locator. For simplicity, we'll assume all the lookup examples start with this basic class that has a built-in lookup allowing for a common prefix to be optionally applied to the beginning of all lookup strings. MyLocator.java public class MyLocator { private final Context context;
public MyLocator(String commonPrefix) throws NamingException {
this(null);
}
public MyLocator(String commonPrefix) throws NamingException {
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.RemoteInitialContextFactory");
properties.put(Context.PROVIDER_URL, "ejbd://localhost:4201/");
this.context = new InitialContext(properties);
}
public Object lookup(String name) {
try {
if (commonPrefix != null) name = commonPrefix + "/" +name;
return context.lookup(name);
} catch (NamingException e) {
throw new IllegalArgumentException(e);
}
}
}
Just the interfaceUsable with JNDI name formats ending in the full class name of the interface such as:
public <T> T lookup(Class<T> type) { return (T) lookup(type.getName()); } MyLocator locator = new MyLocator();
Widget widget = locator.lookup(Widget.class);
Or with a common prefix or with a common prefix supplied in constructor such as:
MyLocator locator = new MyLocator("ejb/superbiz"); Widget widget = locator.lookup(Widget.class); Store store = locator.lookup(Store.class); Interface class and a prefixUsable with JNDI name formats including a varying prefix such as ejbName or deploymentID
public <T> T lookup(String prefix, Class<T> type) { return (T) lookup(prefix + "/" + type.getName()); } MyLocator locator = new MyLocator(); Widget redWidget = locator.lookup("RedWidgetBean", Widget.class); Widget blueWidget = locator.lookup("BlueWidgetBean", Widget.class); Or with a common prefix or with a common prefix supplied in constructor such as:
MyLocator locator = new MyLocator("accountingApp"); Widget widget = locator.lookup("RedWidgetBean", Widget.class); Store store = locator.lookup("StoreBean", Store.class); Interface class and ejb classUsable with JNDI name formats comprised of the interfaceClass and ejbClass For variation, the interface class is the prefix and the ejb class is the Works with:
public <T> T lookup(Class<T> type, Class ejbClass) { return (T) lookup(type.getName() + "/" + ejbClass.getName()); } MyLocator locator = new MyLocator();
Widget widget = locator.lookup(Widget.class, BlueWidgetBean.class);
Or with a common prefix or with a common prefix supplied in constructor such as:
MyLocator locator = new MyLocator("ejb/purchasingApp"); Widget widget = locator.lookup(Widget.class, RedWidgetBean.class); Store store = locator.lookup(Store.class, StoreBean.class); Interface class and ejb class with simple namesSimilar to the above example but using the simple name of the classes resulting public <T> T lookup(Class ejbClass, Class<T> type) { return (T) lookup(ejbClass.getSimpleName() + "" + type.getSimpleName()); } MyLocator locator = new MyLocator();
Widget widget = locator.lookup(RedWidgetBean.class, Widget.class);
Or with a common prefix or with a common prefix supplied in constructor such as: MyLocator locator = new MyLocator("shippingApp"); Widget widget = locator.lookup(GreenWidgetBean.class, Widget.class); Store store = locator.lookup(SuperStoreBean.class, Store.class); |
Unsubscribe or edit your notifications preferences
