2015-12-23 8 views
0

Мне интересно, как использовать CDI для создания нескольких независимых объектов, представляющих один и тот же тип данных. Вот пример:Динамическое построение независимых деревьев объектов с CDI

У меня есть автомобиль, в котором я хочу ввести GearShift и Engine.
Я также хочу ввести двигатель в GearShift Этот автомобиль + GearShift + Engine - мое дерево.

Если я хочу иметь несколько автомобилей одновременно, что было бы лучшим способом сделать это с помощью CDI?
Я бы ожидал, что вы сможете определить вид сферы или классификатор для каждого дерева. Но области и определители CDI определяются статически, а количество автомобилей - динамическое.

В качестве дополнительного требования я хотел бы добавить другую зависимость, которая будет использоваться между машинами. Например, все автомобили разделяли бы одну и ту же Дорогу на всю свою жизнь (не могли найти что-то другое, что имеет больше смысла).
Заранее спасибо

+0

Я думаю, что CDI предназначен для объекта инъекции, который трудно создать, как EntityManager. Более простое использование агрегата GearShift, Engine для вашего автомобиля. Этот объект POJO и, возможно, использует 'new' для создания. –

+0

Я бы согласился на DTO. Но для объектов, которые имеют поведение (и что вы, возможно, захотите высмеять, например), я считаю хорошей практикой избегать их создания с помощью оператора 'new' – matiouz

ответ

0

Я не уверен, правильно ли я вас понимаю, но я думаю, что вы можете, по крайней мере, использовать Session Scope, потому что вы могли бы создать несколько сеансов с разными идентификаторами. Для каждой сессии у вас будет собственная карта сеансов. Таким образом вы можете управлять отдельным набором объектов автомобилей.

Если вы используете Weld как CDI для своей реализации, вы можете использовать BoundSessionContext, который может быть привязан к любой карте. Контекст автоматически привязывается к карте при активации и отключается при вызове invalidate().

Смежные вопросы