Java EE – inject @ EJB beans according to conditions
A novice question: can I inject different beans according to the conditions I set in the properties file This is what I want to achieve:
I set some values in the properties file If it's true, I think
public class MyClass{
    @EJB
    private MyBean bean;
  }
If it's false, then
public class MyClass{
  @EJB
  private MyBean2 bean2;
 }
Is this feasible
Solution
As Gonzalo said, if you want to declare it as a class field and use its different implementation, you first need to specify the public interface of the bean
In addition, I think you can use CDI's @ produces method to achieve more elegance; Between these lines:
@Singleton
@Startup
public class Configuration {
    private boolean someCondition;
    @postconstruct
    private void init() {
        someCondition = ... // get a value from DB,JMS,XML,etc.
    } 
    @EJB(lookup="java:comp/env/myParticularBean")
    MyBean myBean1;
    @EJB(beanName="anotherTypeOfBeanInjectedByName")
    MyBean myBean2;
    @Produces
    public MyBean produceMyBean() {
        if (someCondition)
            return myBean1;
        } else {
            return myBean2;
        }
    }
}
Then in your code, you can use:
@Inject MyBean myBean;
And will fill you with appropriate beans according to your conditions
If you don't need class level fields, you can use the old methods and locate EJBs in JNDI – in this way, you can control what types and what beans should be located and used
Edit: I added @ EJB annotated beans to show where 'mybean1' and 'mybean2' instances may come from
This example shows that you can have a single location where you can define all dependencies on different EJB implementations and other components In one example, this can be implemented as a singleton EJB with @ EJB field, @ persistencecontext field, etc
Instead of performing this operation in a rendered manner, you can change return mybean1 to return context Lookup ("jndi_namespace_coordinates"), where context is an instance of initialcontext
I hope this makes it clearer
