我可以使用名稱別名以類似的方式在Spring中使用名稱別名來部署EJB嗎?同一個EJB的多個名稱
0
A
回答
0
根據EJB 3.0規範:
在聲明時間:
名稱
註釋元素名稱定義了豆「名」,缺省值爲bean類的非限定名稱。在包含EJB的模塊的範圍內,bean名稱必須是唯一的。
引用一個EJB:
beanName
的beanName元素指定爲通過name元素或部署描述符,通過部件的@Stateful和@Stateless註解聲明豆「名」 。當一個以上的EJB在應用程序中實現相同的業務接口時,beanName元素是最有用的:beanName允許開發人員引用特定模塊中的特定EJB。
所以,你可以,但ejb必須打包在不同的模塊中,然後通過beanName指向它。
不是春天。,可能有辦法,但這是供應商特定的,不便攜式。
0
是的,可以在多個名稱或使用ejb-jar.xml
描述符的別名下部署相同的EJB。
此外,EJB xml描述符中定義的名稱和註釋中定義的名稱都將被考慮在內(儘管爲了便攜性的原因,我不會在xml描述符和註釋之間混合)。
本例將在JBoss AS 7.1.1.Final:
@Local
public interface PingWorker {
String ping(String name);
}
@Stateless(name = "PingAlias") // first name
public class PingWorkerBean implements PingWorker {
@Override
public String ping(String name) {
return "Hello " + name;
}
}
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0">
<enterprise-beans>
<session>
<ejb-name>PingWorker</ejb-name> <!-- second name -->
<ejb-class>com.xyz.service.PingWorkerBean</ejb-class>
<session-type>Stateless</session-type>
</session>
<session>
<ejb-name>PingProcessor</ejb-name> <!-- third name -->
<ejb-class>com.xyz.service.PingWorkerBean</ejb-class>
<session-type>Stateless</session-type>
</session>
</enterprise-beans>
</ejb-jar>
在參照組件可以聲明:
@Stateless
public class PingBean implements Ping {
@EJB(beanName = "PingAlias")
private PingWorker pingWorkerByAnnotaion;
@EJB(beanName = "PingWorker")
private PingWorker pingWorkerByDescriptorOne;
@EJB(beanName = "PingProcessor")
private PingWorker pingWorkerByDescriptorTwo;
}
,所有三個參考應該是滿意的。在部署有部署了三個EJB的哪些公開相同的接口和實現,但不同的名稱:
java:global/ear-app-1/ejb-1/PingProcessor!com.xyz.service.PingWorker
java:app/ejb-1/PingProcessor!com.xyz.service.PingWorker
java:module/PingProcessor!com.xyz.service.PingWorker
java:global/ear-app-1/ejb-1/PingProcessor
java:app/ejb-1/PingProcessor
java:module/PingProcessor
java:global/ear-app-1/ejb-1/PingAlias!com.xyz.service.PingWorker
java:app/ejb-1/PingAlias!com.xyz.service.PingWorker
java:module/PingAlias!com.xyz.service.PingWorker
java:global/ear-app-1/ejb-1/PingAlias
java:app/ejb-1/PingAlias
java:module/PingAlias
java:global/ear-app-1/ejb-1/PingWorker!com.xyz.service.PingWorker
java:app/ejb-1/PingWorker!com.xyz.service.PingWorker
java:module/PingWorker!com.xyz.service.PingWorker
java:global/ear-app-1/ejb-1/PingWorker
java:app/ejb-1/PingWorker
java:module/PingWorker
正如你可能會看到這個作品不同於春季別名。在Spring別名中,只有不同的名稱引用同一個實例或實例集合(取決於範圍) - 在EJB中,您需要多次聲明EJB。在EJB容器中,它們根據實例池等變成獨立的EJB。
根據您試圖實現的內容 - 您也可以考慮在引用EJB時覆蓋引用的EJB名稱(替代描述符爲<ejb-link/>
的註釋beanName
)。更多關於這裏: Choose EJB to be injected without recompiling。
相關問題
- 1. 在同一行別名多個名稱
- 2. 同一類的多個名稱?
- 3. 在同一個名稱的多個標籤上的C#XML Linq
- 4. 同一個名稱導致vtable問題的多個類
- 5. 將多個名稱的SD卡保存爲同一個文件
- 6. 一個方法中具有相同名稱的多個變量
- 7. 多個div相同名稱的改變
- 8. 多個鍵名稱,相同的值對
- 9. 多個文件,相同的名稱
- 10. 一個輸入字段,多個名稱
- 11. 如何同時將多個名稱分配給一個C#類
- 12. 如何使用同一個類名稱定位多個「li」
- 13. C#多個標籤名稱相同
- 14. SQL:一個表,不同名稱的列?
- 15. 在多個服務器上查找同一個EJB
- 16. 具有相同名稱的jquery多個按鈕觸發多個具有相同名稱的類的事件
- 17. VS2005 - 在同一個項目中具有相同名稱的多個文件
- 18. 更新對同一名稱開頭的多個值的查詢
- 19. Mysql爲同一個模式類型創建一個表名稱多個表
- 20. 如何在一個包含同名的兩個名稱空間?
- 21. move_uploaded_file兩個或多個不同的圖像名稱只移動一個
- 22. 從同一名稱的多個標籤中選擇<select>
- 23. 對同一項目的多個供應商,供應商名稱
- 24. 對同一名稱的多個元素進行分組
- 25. ZF2中同一模塊下的多個名稱空間
- 26. 同一服務器上的多個名稱服務器
- 27. SSIS多個CSV到多個表(名稱相同)
- 28. 使一個EJB-JAR使用另一個EJB-JAR類新在相同的EAR
- 29. 如何檢查一個名稱是否與另一個名稱相同?
- 30. 注入多個EJB