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());