2016-02-27 4 views
0

Я хотел бы создать повторно используемую независимую платформу регистрации пользователей. В Уровне доступа к данным он должен создать конкретный пользовательский объект приложения. Я создал интерфейс UserFactory, чтобы ввести конкретный экземпляр экземпляра приложения.Инъекционная инъекция в рамках

public interface UserFactory 
{ 
    public UserWithRoles createUser(); 
} 

@Dependent 
class UserWithRolesDAL 
{ 
    @Inject 
    private UserFactory userFactory; 
    ... 
} 

NetBeans говорит: «Неудовлетворенный зависимость: нет бобов не совпадает с точкой впрыска» Я знаю, что я должен использовать Классификатор. Но в этом случае он не будет независимой от приложения картой. Как я могу использовать реализацию UserFactory, которая зависит от конфигурации приложения?

Язык Java. Это происходит в модуле EJB WabApp. Сам UserWithRolesDAL вводится CDI в сессионный компонент без состояния.

Как highstakes рекомендуется ниже я сделал это:

@Alternatives 
@ApplicationScoped 
class XUserFactory implements UserFactory 
{ 
    ... 
} 

И зарегистрировал его в beans.xml:

<alternatives> 
    <class>x.XUserFactory</class> 
</alternatives> 

Но сообщение одно и то же! Зачем?

+0

Пожалуйста, укажите язык программирования. Ява? – JJJ

+0

Я забыл об этом. Но поскольку аннотации указывают на то, что язык - это Java. И это происходит в модуле EJB WabApp. Сам UserWithRolesDAL вводится CDI в сессионный компонент без состояния. Я обновляю qustion. –

ответ

0

OK. Ошибка после альтернативной регистрации bean-компонента в bean.xml, вызванная аннотацией @ApplicationScoped от неправильного пакета.

неправильный:

import javax.faces.bean.ApplicationScoped; 

Право один:

import javax.enterprise.context.ApplicationScoped; 
1
  1. Зачем использовать завод, если вы можете использовать пользователя @Produces для генерации пользователя?

  2. Если у вас есть несколько реализаций фабрики вы должны пометить их как @Alternative и в beans.xml каждого из вашего приложения вы можете определить, используется реализация: https://docs.oracle.com/javaee/6/tutorial/doc/gjsdf.html

Edit: одна сторона примечания , если у вас все эти приложения полностью изолированы вне EAR, я не думаю, что CDI поддерживает перекрестное внедрение, поэтому это также может быть проблемой

+0

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

+0

Я отметил реализацию @Alternative аннотации, и я зарегистрировал класс в beans.xml. Но сообщение одно и то же :( –

+0

, если у вас только одна реализация, это не проблема. Скорее всего, ваша структура развертывания. Если вы разместите ее вместе с вашими beans.xml-адресами, которые помогут. – highstakes

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