EJB容器之遠端呼叫
在開發分散式系統,用的框架是EJB,其中需要呼叫Bean,這裡分析兩種EJB呼叫的方法。
遠端呼叫
通過Remote介面,找到EJB服務的Bean代理,然後由代理和Bean實現互動,返回呼叫的結果。
- Remote介面@remote
Bean的客戶端直接與EJB物件打交道,而不是Bean實現類。所以EJB必須複製Bean物件的每一個方法,Remote Interface告訴EJB物件自動生成工具需要賦值Bean類的哪些方法。
<!-- 客戶bean --> <jee:local-slsb id="EditTrainingProgramBean" jndi-name="java:global/itoo-basic-editTrainingprogram-ear/itoo-basic-editTrainingprogram-core/editTrainingProgramsBeanImpl!com.tgb.itoo.basic.service.EditTrainingProgramBean" business-interface="com.tgb.itoo.basic.service.EditTrainingProgramBean" /> <bean name="editTrainingProgramsController" class="com.tgb.itoo.basic.controller.EditTrainingProgramsController"> <property name="editTrainingProgramBean" ref="EditTrainingProgramBean"></property> </bean>
@Remote(PubliceditTrainingProgramBean.class) @TransactionManagement(TransactionManagementType.CONTAINER) @TransactionAttribute(TransactionAttributeType.REQUIRED) public class PubliceditTrainingProgramBeanImpl extends BaseBeanImpl<PubliceditTrainingProgram> implements PubliceditTrainingProgramBean { editTrainingProgramBeanImpl editTrainingProgramBeanImpl = new editTrainingProgramBeanImpl(); private editTrainingProgramBean editTrainingProgramBean = null; private editTrainingProgramGradeCollegeBean editTrainingProgramGradeCollegeBean; private CourseRoundBean courseRoundBean; public PubliceditTrainingProgramBeanImpl() { /* 培養計劃 */ String ronndAddress = "itoo-basic-editTrainingProgram-ear/itoo-basic-editTrainingProgram-core-0.0.1-SNAPSHOT/editTrainingProgramBeanImpl!com.tgb.itoo.basic.service.editTrainingProgramBean"; try { editTrainingProgramBean = (editTrainingProgramBean) this .lookupRemoteBean(ronndAddress); } catch (NamingException e) { // TODO Auto-generated catch block e.printStackTrace(); } editTrainingProgram roundResult = new editTrainingProgram(); roundResult = editTrainingProgramBean.saveRound(roundid, beginTime, endTime, leaststTime, dataBaseName); } }
- 本地呼叫@local
有時Bean的呼叫並不經過網路,比如在同一個容器中不同Bean之間的呼叫,使用者可以使用Local物件來呼叫Bean例項。
客戶端必須與被呼叫的Bean在同一個JVM環境中,可以是web應用或者其他的企業Bean。
package EJBTest; /** * 本地呼叫-客戶端 * @author bobo * */ public class EJBRemotecontroller { // 注入services層 private EditTrainingProgramBean editTrainingProgramBean; /** * services層get方法 * * @return */ public EditTrainingProgramBean EditTrainingProgramBean() { return editTrainingProgramBean; } /** * services層set方法 * * @param editTrainingProgramBean */ public void setEditTrainingProgramBean( EditTrainingProgramBean editTrainingProgramBean) { this.editTrainingProgramBean = editTrainingProgramBean; } /** * 日誌 */ private static final Logger logger = Logger.getLogger(EditTrainingProgramsController.class.getName()); /** * 培養計劃 */ @RequestMapping("/tremList") public String toTremList(HttpServletRequest request, HttpServletResponse response) throws Exception { String dataBaseName=(String) request.getSession().getAttribute (CloudContext.DatabaseName)+"_basic"; try{ // 查詢所有的學期名稱顯示到介面上 List<DictionaryNow> tremList = editTrainingProgramBean.queryTremList( "學期", dataBaseName); if (tremList.size() > 0) { request.setAttribute("tremlist", tremList); } else { request.setAttribute("tremlist", ""); } // 獲取專業id和專業名稱 String institutionId = request.getParameter("institutionId"); String institutionName = new String(request.getParameter( "institutionName").getBytes("ISO-8859-1")); request.setAttribute("institutionId", institutionId); request.setAttribute("institutionName", institutionName); }catch (Exception e) { e.printStackTrace(); logger.error("QuestionController.addAllUser called error {}",e); //輸入日誌之後將異常丟擲 throw e; } return "/tremList"; } }
兩種呼叫方法,主要取決於是否在不同Bean容器中。小型系統考慮效能最好用本地呼叫,分散式系統會部署到不同的伺服器和JVM中,選擇遠端呼叫。
相關推薦
EJB容器之遠端呼叫
在開發分散式系統,用的框架是EJB,其中需要呼叫Bean,這裡分析兩種EJB呼叫的方法。 遠端呼叫 通過Remote介面,找到EJB服務的Bean代理,然後由代理和Bean實現互動,返回呼叫的結果。 Remote介面@remote Bean的客戶端直接與EJB物件打交道,
SpringCloud之遠端呼叫Feign
一.Feign 在上篇文章中,我們使用了Ribbon的負載均衡功能,大大簡化了遠端呼叫時的程式碼: String baseUrl = "http://user-service/user/"; User user = this.restTemplate.getForObject(bas
ejb遠端呼叫 之 weblogic
個人認為ejb遠端呼叫非常有用,效能應該比webservice之流要好很多,配置也並不是很複雜,搞了一個下午重要搞定,記錄下來 1. 加入jar包javax.ejb_3.0.1.jar 2. 寫服務端 package com.test; public interfac
服務通訊之遠端過程呼叫(RPI)
背景 您已應用微服務架構模式。服務必須處理來自應用程式客戶端的請求。此外,服務有時必須協作處理這些請求。他們必須使用程序間通訊協議。 解決方案 使用RPI進行服務間通訊。客戶端使用基於請求/回覆的協議向服務發出請求。 例子 RPI技術有很多例子 REST GRP
JAVA序列化之RMI遠端呼叫
RMI(Remote Method Invocation)是Java中的遠端過程呼叫(Remote Procedure Call,RPC)實現,是一種分散式Java應用的實現方式。它的目的在於對開發人員遮蔽橫跨不同JVM和網路連線等細節,使得分佈在不同JVM上的
TIM 之API遠端呼叫
Tivoli identity manager 是IBM的一種身份管理軟體,提供了對企業使用者資料的統一管理的功能。 在絕大多數情況下,開發人員可以使用tim 提供的各種介面實現使用者的需求,只有在需要更高階定製的時候,才會使用TIM的api. 一般地,可以直接把TIM的應用
Java 遠端呼叫之Hessian簡例
1,匯入jar包 <dependency> <groupId>org.resthub</groupId> <artifactId>hessian&
JBOSS系列(一) --EJB遠端呼叫-客戶端的配置
EJB訪問方式分為遠端客戶端訪問、本地客戶端訪問和WebService客戶端。 所謂的EJB的遠端呼叫是說客戶端與服務端的EJB物件不在同一個JVM程序中。 本地客戶端是說客戶端與服務
【spring源碼學習】spring的IOC容器之BeanFactoryPostProcessor接口學習
時機 process roc sta 自動 註解 lis nbsp factor 【一】org.springframework.beans.factory.config.BeanFactoryPostProcessor接口==>該接口實現方法的執行時機:該接口void
C++ STL 容器之棧的使用
http fff bsp 結果 sta 文件 demo pac 換行 Stack 棧是種先進後出的容器,C++中使用STL容器Stack<T> 完美封裝了棧的常用功能。 下面來個demo 學習下使用棧的使用。 1 //引入IO流頭文件 2 #incl
Java並發--並發容器之ConcurrentHashMap
替代 性能 新的 targe net 出現 float 分別是 unlock 下面這部分內容轉載自: http://www.haogongju.net/art/2350374 JDK5中添加了新的concurrent包,相對同步容器而言,並發容器通過一些機制改進
Java並發--並發容器之CopyOnWriteArrayList
數據 ice log 個人 one map 正在 jdk null 原文鏈接:http://ifeve.com/java-copy-on-write/ Copy-On-Write簡稱COW,是一種用於程序設計中的優化策略。其基本思路是,從一開始大家都在共享同一個內容
JAVA並發容器之CopyOnWrite容器
最終一致性 使用 當我 .com 比較 響應時間 get 理解 資源 學習資源:http://www.cnblogs.com/dolphin0520/p/3938914.html CopyOnWrite容器即寫時復制的容器。通俗的理解是當我們往一個容器添加元素的時候,不
並發容器之ConcurrentHashMap(轉載)
find 介紹 CI num trie 大小 vector containe 循環 Java並發編程:並發容器之ConcurrentHashMap(轉載) 下面這部分內容轉載自: http://www.haogongju.net/art/2350374 JDK
acm的STL容器之Map篇
刪除記錄 namespace 內部數據 比賽 簡單 find函數 元素 second 處理 1.對map的簡單介紹 Map是STL的一個關聯容器,它提供一對一(其中第一個稱為關鍵字,每個關鍵字只能在map中出現一次,第二個稱為該關鍵字的值)的數據處理能力。 這裏說下map
acm的STL容器之隊列篇
strong 函數 如果 name col ESS 數據 pre 適配 優先隊列,即Priority Queues 1.簡單介紹一下隊列(介紹功能,不作分析) C++隊列是一種容器適配器,它給予程序員一種先進先出(FIFO)的數據結構。1.back() 返回一個引用,指向最
ACM__容器之vector
algorithm algo ive 功能 申請 for include 翻轉 vector 今天做題碰到了深搜的題,有一種存圖方式需要用到vector,對vector不是很熟悉,回顧了一下 vector都知道是一個容器,但並不準確,它是一個多功能的能夠操作多種數據結構和算
在Dubbo中開發REST風格的遠端呼叫(RESTful Remoting)
dubbo支援多種遠端呼叫方式,例如dubbo RPC(二進位制序列化 + tcp協議)、http invoker(二進位制序列化 + http協議,至少在開源版本沒發現對文字序列化的支援)、hessian(二進位制序列化 + http協議)、WebServices (文
Linux簡介之遠端管理常用命令
1、重啟電腦 $ shutdown -r now # 重新啟動作業系統,其中 now 表示現在 $ shutdown now # 立刻關機,其中 now 表示現在 $ shutdown 20:25 # 系統在今天的 20:25 會關機 $ shutdown +10 # 系統再
C++STL模板庫關聯容器之set/multiset
目錄 一丶關聯容器簡介.set/multiset 二丶演示程式碼. 一丶關聯容器簡介.set/multiset 我們的序列容器,底層都是線性表構成的. 比如 vector list deque. 關聯容器底層就是紅黑樹. 以set集合為例. set內部元素根據其值自動排序.每個元素的值只允