November 2nd 2009
Tags:
Java
No Comments
Sometimes we may have more than one implementation and/or instance of a service to which we need to route requests. Routing may be controlled by a number of different factors, such as the request type, request arguments, runtime configuration, etc.
An implementation of such routing might look something like this:
[java]
public interface ...
October 13th 2009
Tags:
Java
No Comments
Typically object caching in Java is managed by the container or framework in use. Occasionally however there is a need to manually cache domain-specific objects, whereby a java.util.Map implementation will not suffice.
Using the popular ehcache framework as an example, the following pattern is typically observed:
[java]
public class SomeClass {
private ...
October 8th 2009
Tags:
Java
No Comments
In OSGi using a publisher/subscriber design can be somewhat more complicated that traditional Java environments:
[java]
public class SomeBundleActivator implements BundleActivator {
private SomeService service = ...
private ServiceRegistration registration;
public void start(BundleContext context) {
registration = context.registerService(SomeService.class.getName(), service, null);
}
...
}
public class AnotherBundleActivator ...
September 30th 2009
Tags:
Java
2 Comments
The Service Locator pattern is a well-established mechanism for accessing local and remote services in a consistent manner:
[java]
public interface ServiceLocator {
<T> T findService(String serviceName) throws ServiceNotAvailableException;
}
[/java]
Using a structured service name interface we can improve uniformity and reduce the potential for typos:
[java]
public enum ServiceName {
SomeService("SomeService");
...
September 25th 2009
Tags:
Java
No Comments
Application logging always seems to become one of those code smells, typically regarding duplication of code, or conversely, non-uniform log messages.
There are many different ways to log a message in Java, but variations on the following pattern are common:
[java]
public class SomeClass {
private static final Log LOG = ...