EJB

?Enterprise JavaBean,企業級javabean,是J2EE的一部分,定義了一個用于 ? 開發基于組件的企業多重應用程序的標準。其特點包括網絡服務支持和核心開發工具(SDK)。 是Java的核心代碼,分別是會話Bean(Session Bean),實體Bean(Entity Bean)和消息驅動Bean(MessageDriven Bean)。
會話Bean是為了完成業務邏輯, ?實體Bean是為了完成數據/映射, ?消息驅動Bean是為了完成消息發送. ? 有點像SSH.都是框架性的東西。



Enterprise JavaBean(EJB)是一種服務器端組件體系結構,它簡化了Java開發企業級的分布式組件應用程序的過程。通過EJB,我們能寫出可擴展的、健壯的和安全的應用程序,而不用自己去寫復雜的分布式組件框架,EJB 開發服務器端應用程序,通過利用由業界提供的預先寫好的分布式基礎結構,我們可以快速而且輕松地利用Java構建服務器端組件



EJB是sun的服務器端組件模型,最大的用處是部署分布式應用程序,類似微軟的.com技術。憑借java跨平臺的優勢,用EJB技術部署的分布式系統可以不限于特定的平臺。


  EJB (Enterprise JavaBean)是J2EE的一部分,定義了一個用于開發基于組件的企業多重應用程序的標準。其特點包括網絡服務支持和核心開發工具(SDK)。

  在J2EE里,Enterprise Java Beans(EJB)稱為Java 企業Bean,是Java的核心代碼,分別是會話Bean(Session Bean),實體Bean(Entity Bean)和消息驅動Bean(MessageDriven Bean)。

  1.Session Bean用于實現業務邏輯,它可以是有狀態的,也可以是無狀態的。每當客戶端請求時,容器就會選擇一個Session Bean來為客戶端服務。Session Bean可以直接訪問數據庫,但更多時候,它會通過Entity Bean實現數據訪問。

  2.Entity Bean是域模型對象,用于實現O/R映射,負責將數據庫中的表記錄映射為內存中的Entity對象,事實上,創建一個Entity Bean對象相當于新建一條記錄,刪除一個Entity Bean會同時從數據庫中刪除對應記錄,修改一個Entity Bean時,容器會自動將Entity Bean的狀態和數據庫同步。

  3.MessageDriven Bean是EJB2.0中引入的新的企業Bean,它基于JMS消息,只能接收客戶端發送的JMS消息然后處理。MDB實際上是一個異步的無狀態Session Bean,客戶端調用MDB后無需等待,立刻返回,MDB將異步處理客戶請求。這適合于需要異步處理請求的場合,比如訂單處理,這樣就能避免客戶端長時間的等待一個方法調用直到返回結果。

  EJB實際上是SUN的J2EE中的一套規范,并且規定了一系列的API用來實現把EJB概念轉換成EJB產品.EJB是BEANS,BEANS是什么概念,那就是得有一個容納她,讓她可勁造騰的地方,就是得有容器.EJB必須生存在EJB容器中.這個容器可是功能強大之極!她首先要包裝你BEAN, EJB的客戶程序實際上從來就不和你編寫的EJB直接打交道,他們之間是通過HOME/REMOTE接口來發生關系的.它負責你的BEAN的所有的吃喝拉薩睡,比如BEAN的持續化,安全性,事務管理...

  一.什么是 EJB?

  一個技術規范:EJB 從技術上而言不是一種"產品"
  EJB 是一種標準描述了構建應用組件要解決的:
  可擴展 (Scalable)
  分布式 (Distributed)
  事務處理 (Transactional)
  數據存儲 (Persistent)
  安全性 (Secure)

ejb一直是一個讓我很糾結的技術,雖然ejb作為sun推薦的最佳實踐,在sun的J2EE教程中,推薦jsp和servlet作為view層,ejb作為業務邏輯層。

image

上述就是J2EE教程講J2EE體系中J2EE的EJB示意圖了,講了EJB的位置,詳情可以看:http://docs.oracle.com/javaee/1.4/tutorial/doc/

然而我所接觸使用ejb開發的程序員(都是國內),用了ejb,都沒什么特別好感,甚至我以前的項目經理說,很多人被sun給欺騙了。

目前ejb已經出到了3.x了,然而國內已經幾乎沒有使用ejb3.x,有的也是ejb2.x,都是老系統遺留,有的是銀行項目,有的是erp項目(都是大型項目)。

之前jboss出名就是因為它支持ejb,并且支持得最好,然而現在隨著ejb的使用份額下降,這幾年jboss在國內的使用份額也下降了,用tomcat和其他開源服務器多了很多。

我也很少用ejb,在開發中根本不用,除非是以前為了支持一些老系統,才會接觸,而且為了應付ejb的,學了ejb3.0,但是遇到的項目全部是ejb2.x,ejb3.0相比ejb2.0,簡單了很多,不想ejb2.0那么繁瑣,為了一個業務邏輯類,要寫業務接口類,home類啥啥的,我覺得進步很大,但是在國內依然沒什么人使用。

這里就談一下我對ejb的一些看法:

1.ejb是比較重量級:實現ejb是一件很復雜的事情,J2EE規范中ejb規范的實現是一塊硬骨頭,而ejb實在復雜,很多開發人員都喜歡簡單的東西,復雜的東西,會帶來未知風險。

2.ejb的移植性低:雖然ejb是遵循J2EE規范的,但是各個廠家在實現J2EE EJB的規范的同時,也會加入自己的一些實現,例如你要讓一個EJB查找一個數據源,這個數據源如何配置,幾乎所有的應用服務器廠商都不一樣,weblogic,websphere,jboss,apusic都有自己的一套實現方式。我每次想到移植ejb的應用,最怕是去找這些不同點,然后一一修改相應配置。這無疑加大了開發人員的負擔,java的東西,平臺可移植性就是一大亮點。

3.ejb調用流程:ejb是支持遠程調用,客戶端值需要ejb的業務類接口,服務端值需要ejb的業務類實現,然后客戶端只需要調用jndi(這個規范實現很復雜,使用比較簡單,還是很多人用)的lookup方法,就可以使用業務類接口直接調用服務端實現類的方法了,這中間,應用服務器做了很多處理,基本流程都是:客戶端通過jndi和業務類接口,調用對應ejb應用服務器廠商jndi的lookup服務端實現類方法,然后ejb應用服務器生成業務類的存根和代理,存根從服務端序列化到客戶端,客戶端調用的ejb業務接口就是調用這個存根,然后這個存根又通過rmi協議或者iiop協議發送命令到業務類的代理,代理再調用業務類實現,最終把執行結果返回到客戶端。

3.ejb難以調試:看到ejb的調用流程,雖然看上去ejb讓用戶不用了解遠程調用細節,使用簡單,但是由于里面的調用過程復雜,一旦有一個環節錯了,用戶都難以調試,排錯,開發過程中出現問題不可避免,而解決ejb的問題,解決周期要比較久。出錯的時候,錯誤信息也千奇百怪。

4.ejb的性能問題:ejb的調用涉及太多類的序列化和反序列化,本來通過網絡傳輸已經很慢了,還要傳遞對象,數據量又更大了,還要涉及了對象的序列化和反序列化,這中間有太多的開銷了。

5.ejb的替換開源產品太多了:現在業務邏輯,在java上要用框架的有spring,遠程調用,有webservice(apache cxf已經做得很好了,而且webservice又是通用標準),mina(一個apache的NIO框架),netty(現在性能最快的NIO框架,來自jboss).而且這些產品都是可移植,社區交流多,出了問題,google就找到了。

?

?
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284281.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284281.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284281.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java 連接redis 以及基本操作

一、首先下載安裝redis 二、項目搭建 1.搭建一個maven 工程 2. 在pom.xml文件的dependencies節點下增加如下內容&#xff1a; <!-- resis --><dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version&…

WinForm(一):開始一個WinForm程序

WinForm程序只能運行在Windows上&#xff0c;即使是基于.NET5&#xff0c;6&#xff0c;7也一樣。因為WinForm的UI層對接的底層API是基于Windows的。用VisualStudio創建一個WinForm應用很簡單&#xff0c;建議使用非.NET Framework版&#xff0c;因為.NET Framework微軟漸漸不支…

【ArcGIS微課1000例】0050:Geodatabase屬性域操作全解

文章目錄 1. 屬性域的創建2. 屬性域的查看3. 屬性域的刪除與修改4. 屬性域的關聯地理數據庫按照面向對象的模型存儲地理信息,也可以將其非空間信息保存在表中。對于要素和表可以設置一些規則進行限制,對屬性的約束稱為屬性域。 屬性域是描述字段合法值的規則,是一種增強數據…

ctype.h

isalpha&#xff1a;int isalpha(char ch);檢查ch是否是字母.是字母返回非0&#xff0c;否則返回0。iscntrl&#xff1a; int iscntrl(int ch); 檢查ch是否控制字符(其ASCII碼在0和0x1F之間,數值為 0-31).是返回非0,否則返回 0.isdigit&#xff1a;int isdigit(char ch);檢查ch…

『JavaScript』核心

為什么80%的碼農都做不了架構師&#xff1f;>>> 弱類型語言 JavaScript是一種弱類型的語言。變量可以根據所賦的值改變類型。原始類型之間也可以進行類型轉換。其弱類型的物質為其帶來了極大的靈活性。 注意&#xff1a;原始類型使用值傳遞&#xff0c;復合類型使用…

優酷VIP會員周卡只需7.5元,看《沉香如屑》用優酷視頻

由楊紫、成毅主演的《沉香如屑》已上線7天。站內熱度值已經破萬&#xff0c;也拿下了4次日冠的好成績。追優酷視頻最新熱劇不能沒有優酷VIP會員啊&#xff0c;優酷的會員&#xff0c;價格算是最便宜的了&#xff0c;下面是幻海優品優酷VIP會員特價充值的價格。優酷VIP會員特價充…

Solr6.1.0Windows安裝步驟

一、 環境 solr 6.1.0 下載地址 http://archive.apache.org/dist/lucene/solr/6.1.0/ jdk 1.8 tomcat8 二、 安裝solr到tomcat 1.解壓solr&#xff0c;把 solr-6.1.0\solr-6.1.0\server 下的solr-webapp 文件夾拷貝到tomcat 的webapps下&#xff0c;重命名為solr&#xff1b;…

[轉]Autofac 框架初識與應用

一、前言 這上一篇中&#xff0c;主要講述了什么是IoC容器&#xff0c;以及了解到它是DI構造函注入的框架&#xff0c;它管理著依賴項的生命周期以及映射關系&#xff0c;同時也介紹實踐了在ASP.Net Core中,默認提供的內置IoC容器&#xff0c;以及它的實例注冊方式和相應的生命…

【ArcGIS微課1000例】0051:Geodatabase子類型操作全解

子類型是要素類中具有相同屬性的要素的子集&#xff0c;或表中具有相同屬性的對象的子集。可 通過它們對數據進行分類。 子類型是特征類(或對象類)中特征(或對象)的次級分類。例如一個公路線要素類可以根 據其字段類型的值細分為“高速公路”和“普通公路”兩個子類型。 子類…

作為Java程序員應該掌握的10項技能

本文詳細羅列了作為Java程序員應該掌握的10項技能。分享給大家供大家參考。具體如下&#xff1a; 1、語法&#xff1a;必須比較熟悉&#xff0c;在寫代碼的時候IDE的編輯器對某一行報錯應該能夠根據報錯信息知道是什么樣的語法錯誤并且知道任何修正。 2、命令&#xff1a;必須熟…

在Winform程序中設置管理員權限及為用戶組添加寫入權限

在我們一些Winform程序中&#xff0c;往往需要具有一些特殊的權限才能操作系統文件&#xff0c;我們可以設置運行程序具有管理員權限或者設置運行程序的目錄具有寫入的權限&#xff0c;如果是在操作系統里面&#xff0c;我們可以設置運行程序以管理員身份運行&#xff0c;或者設…

數據庫性能系列之索引(上)

前言上一次&#xff0c;我們從優化子查詢的角度&#xff0c;講解了一些簡單的數據庫性能優化方面的知識。通過優化子查詢的順序&#xff0c;包括合理使用IN和EXISTS&#xff0c;可以起到部分查詢的效率提升。但對于其他大多數場景&#xff0c;如單表記錄很大&#xff0c;或多表…

題目1023:EXCEL排序---------Case后面的是count,不是C

#include<stdio.h> #include<algorithm> #include<cstring> using namespace std;struct student {char num[10];char name[10];int grade; }s[100002]; int cmp1(student s1,student s2)//case 1 按照學號遞增 {return strcmp(s1.num,s2.num)<0; } int…

【ArcGIS微課1000例】0052:創建地理數據庫注記(標準注記、要素關聯注記、尺寸注記)

本文講述創建地理數據庫注記(標準注記、要素關聯注記、尺寸注記)的方法。 文章目錄 一、創建標準注記二、創建與要素關聯的注記三、創建尺寸注記一、創建標準注記 標準注記不與地理數據庫中的要素關聯。標準注記的一個例子是,地圖上標記某山脈的文字,沒有特定的要索代表該…

Lambda表達式超詳解

目錄 背景 Lambda表達式的用法 函數式接口 Lambda表達式的基本使用 語法精簡 變量捕獲 匿名內部類 匿名內部類中的變量捕獲 Lambda的變量捕獲 Lambda表達式在類集中的使用 Collection接口 List接口 Map接口 總結 背景 Lambda表達式是Java SE 8中的一個重要的新特性.…

用十條命令在一分鐘內檢查Linux服務器性能

這種干活必須要和大家分享的啊。 如果你的Linux服務器突然負載暴增&#xff0c;告警短信快發爆你的手機&#xff0c;如何在最短時間內找出Linux性能問題所在&#xff1f;來看Netflix性能工程團隊的這篇博文&#xff0c;看它們通過十條命令在一分鐘內對機器性能問題進行診斷。 概…

[javaEE] JDBC快速入門

JDBC&#xff1a;Java Data Base Connectivity java數據庫連接 1.組成JDBC的兩個包&#xff1a;主要是接口 java.sql javax.sql 2.相應JDBC的數據庫實現 在tomcat的目錄下面添加mysql-connector-java-5.0.8-bin.jar這個數據庫驅動包 package com.tsh.web;import java.io.IOExce…

【ArcGIS微課1000例】0053:注記(水平、沿直線、跟隨要素、牽引線、彎曲注記)的創建與編輯

文章目錄 一、創建注記1.創建注記要素類2. 水平注記3. 沿直線4. 隨沿要素5. 沿引線6. 彎曲二、修改注記1. 復制粘貼2. 移動注記3. 旋轉注記4. 刪除注記5. 堆疊和取消堆疊6. 向注記添加引線7. 將注記轉換為多部分8. 編輯關聯要素的注記一、創建注記 注記的創建方法參考:【ArcG…

定制.NET 6.0的依賴注入

本章是《定制ASP NET 6.0框架系列文章》的第三篇。在本章&#xff0c;我們將學習ASP.NET Core的依賴項注入&#xff08;DI&#xff09;以及如何自定義它。我們將討論以下主題&#xff1a;使用不同的DI容器探索ConfigureServices方法使用其他的ServiceProviderScrutor簡介技術準…