2014-12-12 6 views
0

Я внедряю приложение Java EE, развернутое в Wildfly 8.2.0. Существует несколько EntityManager, которые я хочу ввести по имени поля. Для этого я создал метод продюсера с @Produces, который получает имя поля из InjectionPoint.CDI Inject EntityManagers по имени поля с @Produces

public class Resources { 

    @PersistenceContext(unitName = "primary") 
    private EntityManager primaryEm; 

    @PersistenceContext(unitName = "secondary") 
    private EntityManager secondaryEm; 

    @Produces 
    public EntityManager getEntityManager(InjectionPoint injectionPoint) 
     throws Exception { 
     Field field = getClass().getDeclaredField(
       injectionPoint.getMember().getName()); 

     return (EntityManager) field.get(this); 
    } 
} 

Тогда я просто впрыснуть EntityManager с соответствующим именем поля:

@Inject 
private EntityManager primaryEm; 

Это решение работает до сих пор, но есть другой, более удобный способ в КДИ осуществить это «впрыскивать полем имя "?

ответ

1

Я думаю, что ваше решение является самым красивым, насколько это возможно. Или, может быть, вы могли бы подробно описать, что это значит для вас элегантность?

+0

Я рад это прочитать. Ну, мне было интересно, есть ли возможность решить эту проблему без этого метода производителя, включая отражение. –