- 1 ухо на одном GF, содержащем 2 ejb-jars с компонентами EJB. < /li>
< li> 1 война на другом сервере Glassfish ( => Другое JVM ), содержащий веб -компоненты, получающие доступ к компонентам EJB.
У меня есть 2 бизнес-услуги EJB в каждом EJB-Jar моего уха, и все они развиваются так: < /p>
Код: Выделить всё
@Remote
public interface ServiceAItf {
...
}
@Stateless
@Local
public class ServiceAImpl implements ServiceAItf {
...
}
В моем ухе я очень запутался в лучшей практике для инъекций, с точки зрения производительности, архитектуры и т. Д.
У меня есть следующие вопросы:
Как вы можете видеть, я объявил аннотацию "@local" < /b> в реализации службы без определения локального интерфейса. Это правильно? По крайней мере, у меня нет ошибок при развертывании. Но, может быть, мне следует использовать аннотацию "@localbean" ? Я полагаю, что аннотация "@LocalBean" просто позволяет вызывать реализацию напрямую как "Local" EJB, но вы должны использовать реализацию в своем коде, как это: < /p>
Код: Выделить всё
@Stateless
@Local
public class ServiceBImpl implements ServiceBItf {
@EJB
private ServiceAImpl serviceA;
...
}
< /code>
< /li>
Какой лучший способ ввести один ejb в другой? < /b>
Это работает так : < /p>
@Stateless
@Local
public class ServiceBImpl implements ServiceBItf {
@EJB
private ServiceAItf serviceA;
...
< /code>
} < /p>
< /li>
< /ul>
Но из того, что я заметил, «Servicea» вводила является удаленным прокси, в то время как он находится в том же JVM в том же файле уха. Поэтому я полагаю, что окажет влияние на производительность. Вот почему я попытался ввести услугу таким образом: < /p>
@Stateless
@Local
public class ServiceBImpl implements ServiceBItf {
@Inject
private ServiceAItf serviceA;
...
}
< /code>
Но это не работает в GF, у меня есть следующее исключение: < /p>
WELD-001408 Unsatisfied dependencies for type [...] ...
< /code>
Я затем попытался создать локальный интерфейс, и инъекция с помощью аннотации "@Inject" работает, когда оба сервиса < /p>
Даже если я создаю локальный интерфейс, как этот, сервис не вводится через аннотацию "@inject" [/b], но null: [b]@Local
public interface ServiceALocalItf {
...
}
Для каждой услуги я создаю "@local" < /b> и "@remote " Интерфейс. < /li> От войны до ejb-jar of char, сделайте поиск JNDI в удаленный интерфейс. , сделайте инъекцию через "@ejb" к местному интерфейсу. "@Inject" на локальный интерфейс. < /Li>
< /ul>
Что вы об этом думаете? Это правильно?
Подробнее здесь: https://stackoverflow.com/questions/736 ... c-confused