2014-10-07 5 views
1

Я два приложения развернут на GlassFish - приложения А и В.CDI и EJB смешайте с GlassFish 3.1

Оба развернуты в качестве военного пакета, приложение B используют некоторые компоненты из приложения А.

Теперь в приложении ИИ имеет интерфейс:

public interface BusinessInterface() extends SomeOtherInterface { 
    void someAction(); 
} 

у меня 3 реализации этого интерфейса - два в приложении А, один в приложении B: BusinessInterfaceA1, BusinessInterfaceA2, BusinessInterfaceB

До тех пор, пока все они являются CDIBeans, все в порядке - я использую пользовательские аннотации @Qualifier (@ BusinessInterfaceA1, @ BusinessInterfaceA2) и аннотацию @Default для реализации B, чтобы отличать их.

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

Когда я только добавить @Statefull аннотацию на обеих реализациях я получил что-то вроде этого:

javax.servlet.ServletException: org.jboss.weld.exceptions.WeldException: WELD-000049 

детали:

java.lang.IllegalStateException: Unable to convert ejbRef for ejb BusinessInterfaceA1 to a business object of type interface SomeOtherInterface 

Как я могу это исправить? Мне нужно все реализации будет доступен в способе, которым я мог бы придать им нравится

@Inject @SomeAnnotation private BusinessInterface businessInterface; 

ответ

1

Он находится в Glassfish 3.1 bug. Чтобы обойти эту проблему, чтобы отметить реализацию со всеми необходимыми интерфейсами, например .:

@Statefull/@Stateless 
public class BusinessInterfaceImpl implements BusinessInterface, SomeOtherInterface { 
    // implementation 
} 

Даже BusinessInterface расширяет SomeOtherInterface и от Java Спекуляции его бесполезно делать это, но в качестве обходного пути для этой ошибки он работает.

Другим решением является использование Glassfish 4,0

+0

Это было долгое время, так как я нуждался в этом, у меня нет надлежащих условий, чтобы проверить это прямо сейчас, но все равно спасибо. – slnowak