2014-10-07 183 views
1

EJB結構我有兩個應用程序部署在GlassFish - 應用程序A和B.CDI和GlassFish的3.1

兩者都部署爲war包,應用B應用從應用A.使用一些組件現在

AI有一個接口:

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

我有這種接口的3個實施方式 - 兩個應用程序A,在一個應用程序B:BusinessInterfaceA1, BusinessInterfaceA2, BusinessInterfaceB

只要它們都是CDIBeans,一切都很好 - 我使用自定義@Qualifier批註(@ BusinessInterfaceA1,@ BusinessInterfaceA2)和@Default批註B的實現來區分它們。

但是現在我需要應用程序的A實現成爲有狀態的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 

我怎樣才能解決呢?我需要所有的實現是在一個方式avaliable我可以注入他們喜歡

@Inject @SomeAnnotation private BusinessInterface businessInterface; 

回答

1

正是在Glassfish的3.1 bug。解決方法是,以紀念實施所有必需的接口,例如:

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

即使BusinessInterface延伸SomeOtherInterface,並從Java規範其用武之地要做到這一點,但是對於這個bug解決方法很有效。

另一種解決方案是使用Glassfish的4.0

+0

這是一個很長的時間,因爲我需要它,我沒有適當的環境,現在對其進行測試,但還是要謝謝你。 – slnowak 2014-12-03 16:08:26