I have some kind of runtime configuration in my application: entity may contain a reference to the name of some session bean.
public interface MyPolicy
{
public String get();
}
@Stateless
@Local(MyPolicy.class)
public class MyPolicy1 implements MyPolicy
{
public String get()
{
return "This is policy 1";
}
}
@Stateless
@Local(MyPolicy.class)
public class MyPolicy2 implements MyPolicy
{
public String get()
{
return "This is policy 2";
}
}
@Entity
....
public class MyEntity
{
private String policyClass;
...
protected String getPolicyClass()
{
return policyClass;
}
protected void setPolicyClass(String policyClass)
{
this.policyClass = policyClass;
}
}
public class MyEntity
{
private String policyClass;
private transient MyPolicy policy;
...
protected String getPolicyClass()
{
return policyClass;
}
protected void setPolicyClass(String policyClass)
{
this.policyClass = policyClass;
}
@Transient
public MyPolicy getPolicy()
{
if (policy == null)
{
try
{
policy = new InitialContext().lookup(policyClass);
}
catch (NamingException e)
{
throw new IllegalStateException("Misconfiguration exception", e);
}
}
return policy;
}
}
... log.debug(myEntity.getPolicy().get());
... MyPolicy policy = Utils.lookup(myEntity.getPolicyClass()); log.debug(policy.get());