Ejb全稱為Enterprise Java Bean Component,也稱為服務器端軟件組件;它將主要用作應用程序的業(yè)務邏輯。用于運行時環(huán)境的 Web 容器包括軟件組件、計算機安全、servlet 生命周期管理、事務處理和 Web 服務。 EJb 是運行在計算機網絡服務器端的 Java 編程語言編寫的架構風格,因此它在應用程序中遵循客戶端-服務器模型。而且,ejb 是一種在客戶端分發(fā) Web 組件的 Java bean 技術,它具有在多個 Web 應用程序中稱為可重用組件的功能。
開始您的免費軟件開發(fā)課程
網絡開發(fā)、編程語言、軟件測試及其他
語法:
java編程中EJB模型的基本語法如下。
import javax.ejb.*; import java packages; class classname { Main? method() { -----Some programming logics---- } }
以上代碼是使用ejb包開發(fā)應用程序的基本步驟。
如何在Java Works中使用EJB?
- 在EJB中,java bean類將使用多個ejb規(guī)范的注釋,這將有助于根據業(yè)務目的滿足用戶需求。EJB有一組不同的版本,并且遵循了JNDI的功能(java命名目錄接口)。服務器jndi中的資源之一是目錄服務,用于定位或分配資源,如ejb、數據源和JMS隊列服務。服務器對 jndi 資源有一個默認方案名稱,但如果我們更改配置部分的名稱,它應該被覆蓋。
- EJB 將在 Java bean 上工作;它有兩種不同的類型 1. Session beans 和 2.Message Driven BeansSession beans。會話 bean 將用于客戶端-服務器交互;它通過客戶端調用以編程方式封裝應用程序的業(yè)務邏輯,該調用將由本地計算機或遠程計算機完成,客戶端將在 Web 服務的幫助下使用 bean。會話bean將分為三種不同的類別1.無狀態(tài),2.有狀態(tài)和3.單例。無狀態(tài)bean當客戶端使用這些類型的bean時,Web容器中沒有永久狀態(tài),因此相比之下,它們是線程安全的,性能方面非??煊袪顟B(tài)的 Bean。這些 Bean 同時與多個客戶端共享。
- 有狀態(tài)bean可以將狀態(tài)存儲在容器中;一旦客戶端終止會話,這些狀態(tài)也會在服務器中被破壞。 Singelton beans 在該應用程序的整個生命周期中都有一個實例會話;這些 bean 還與多個客戶端共享狀態(tài)。這些 Bean 是線程安全的,因此開發(fā)人員可以更輕松地使用它們,并且與有狀態(tài) Bean 相比,性能也更快。
- 消息驅動Bean(MDB)是一種像JMS消息監(jiān)聽器一樣用作異步消息類型的bean,但它將接收消息響應作為JMS消息而不是事件。每當消息接收到容器時,我們就可以使用 jndi 服務映射消息,容器使用 onMessage() 方法調用 MDB bean 進行進一步處理。 MDB 使用 onMessage() 方法的整個過程將是一個事務。如果假設消息處理是回滾,則接收方消息會再次重新投遞。
用 Java 實現 EJB 的示例
以下是提到的示例:
示例#1
界面:
package JPAEJB; import java.util.List; import javax.ejb.Remote; @Remote public interface CustomerInterface { void addBooks(String name); List getBooks(); }
實施:
import java.util.ArrayList; import java.util.List; import javax.ejb.Stateless; import JPAEJB.CustomerInterface; @Stateless public class CustomerClass implements CustomerInterface { List<String>books; public CustomerClass() { books = new ArrayList<String>(); } public void addBooks(String name) { books.add(name); } public List<String> getBooks() { return books; } }
客戶界面:
import JPAEJB.CustomerInterface; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.List; import java.util.Properties; import javax.naming.InitialContext; import javax.naming.NamingException; public class CustomerInterfaceImplem { BufferedReader brConsoleReader = null; Properties p; InitialContext c; { p = new Properties(); try { p.load(new FileInputStream("jndi.properties")); } catch (IOException ex) { ex.printStackTrace(); } try { c = new InitialContext(p); } catch (NamingException ex) { ex.printStackTrace(); } brConsoleReader = new BufferedReader(new InputStreamReader(System.in)); } public static void main(String[] args) { CustomerInterfaceImplem cust = new CustomerInterfaceImplem(); cust.testStatelessEjb(); } private void show() { System.out.println("Welcome to my domain"); System.out.print("Options \n1. Add the Books\n2. Exit \nEnter your Choice: "); } private void StatelessEjb() { try { intc = 1; CustomerInterface cust = (CustomerInterface)ctx.lookup("CustomerInterface/remote"); while (c != 2) { String books; show(); String str = brConsoleReader.readLine(); c = Integer.parseInt(str); if (c == 1) { books = brConsoleReader.readLine(); cust.addBooks(books); }elseif (c == 2) { break; } } List<String>books1 = cust.getBooks(); System.out.println(books1.size()); for (inti = 0; i<books1.size(); ++i) { System.out.println((i+1)+". " + books1.get(i)); } CustomerInterface cust1 = (CustomerInterface)ctx.lookup("cust/remote"); List<String>books2 = cust.getBooks(); System.out.println(books2.size()); for (inti = 0; i<books2.size(); ++i) { System.out.println((i+1)+". " + books2.get(i)); } } catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace(); } finally { try { if(brConsoleReader !=null) { brConsoleReader.close(); } } catch (IOException ex) { System.out.println(ex.getMessage()); } } } }
示例輸出:
示例#2
Web 服務中的 EJB:
package JPAEJB; import java.util.List; import Customers.CustomerInterfaceImplem; public class Ejbclients{ public static void main(String[] args) { for(CustomerInterface cust:getBooks()) { System.out.println(cust.getBooks()); } } private static List <CustomerInterface> getBooks() { CustomerInterfaceImplem s = new CustomerInterfaceImplem(); CustomerInterface c = s.getCustomerInterfacePort(); return c.getBooks(); } }
示例#3
EJB 安全性:
import javax.ejb.* @Stateless @DeclareRoles({"customer""books"}) public class CustSecurity implements CustomerInterface { @RolesAllowed({"books"}) public void delete(CustomerInterface cust) { System.out.println("customer delete the books"); } @PermitAll public void showBooks(CustomerInterface cust) { System.out.println("customer viewed the books"); } @DenyAll public void deleteAll() { System.out.println("customer delete all the books in libraries"); } }
安全 XML:
<?xml version="1.0"encoding="UTF-8"?> <!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 EJB 3.0//EN""http://www.sun.com/software/appserver/dtds/sun-ejb-jar_3_0-0.dtd"> <ejb-jar> <security-role-mapping> <role-name>customer</role-name> <group-name>customer-groups</group-name> </security-role-mapping> <security-role-mapping> <role-name>Books</role-name> <group-name>Books-group</group-name> </security-role-mapping> <enterprise-beans/> </ejb-jar>
說明:以上三個示例是相同的輸出,我們使用了ejb的不同功能,第一個示例我們使用客戶將使用jndi(java命名目錄接口)添加和刪除書籍第二個示例我們使用客戶的 Web 服務通過 Web 完成操作 最后一個示例我們使用了額外的安全性。
結論
通常,EJB 充當業(yè)務邏輯應用程序之外的接口;與其他業(yè)務邏輯框架相比,它具有更多安全方面的瀏覽器兼容性功能。它還維護系統(tǒng)級交易。
以上是Java 中的 EJB的詳細內容。更多信息請關注PHP中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣服圖片

Undresser.AI Undress
人工智能驅動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Clothoff.io
AI脫衣機

Video Face Swap
使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的代碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6
視覺化網頁開發(fā)工具

SublimeText3 Mac版
神級代碼編輯軟件(SublimeText3)

Laravel支持使用原生SQL查詢,但應優(yōu)先使用參數綁定以確保安全;1.使用DB::select()執(zhí)行帶參數綁定的SELECT查詢,防止SQL注入;2.使用DB::update()執(zhí)行UPDATE操作并返回影響行數;3.使用DB::insert()插入數據;4.使用DB::delete()刪除數據;5.使用DB::statement()執(zhí)行如CREATE、ALTER等無結果集的SQL語句;6.推薦在QueryBuilder中使用whereRaw、selectRaw等方法結合原生表達式以提升安

使用JUnit5和Mockito能有效隔離依賴進行單元測試,1.通過@Mock創(chuàng)建模擬對象,@InjectMocks注入被測實例,@ExtendWith啟用Mockito擴展;2.使用when().thenReturn()定義模擬行為,verify()驗證方法調用次數與參數;3.可模擬異常場景并驗證錯誤處理;4.推薦構造函數注入、避免過度模擬、保持測試原子性;5.使用assertAll()合并斷言,@Nested組織測試場景,從而提升測試可維護性和可靠性。

Go泛型從1.18開始支持,用于編寫類型安全的通用代碼。1.泛型函數PrintSlice[Tany](s[]T)可打印任意類型切片,如[]int或[]string。2.通過類型約束Number限制T為int、float等數字類型,實現Sum[TNumber](slice[]T)T安全求和。3.泛型結構體typeBox[Tany]struct{ValueT}可封裝任意類型值,配合NewBox[Tany](vT)*Box[T]構造函數使用。4.為Box[T]添加Set(vT)和Get()T方法,無需

table-layout:fixed會強制表格列寬由第一行單元格寬度決定,避免內容影響布局。1.設置table-layout:fixed并指定表格寬度;2.為第一行th/td設置具體列寬比例;3.配合white-space:nowrap、overflow:hidden和text-overflow:ellipsis控制文本溢出;4.適用于后臺管理、數據報表等需穩(wěn)定布局和高性能渲染的場景,能有效防止布局抖動并提升渲染效率。

json.loads()用于將JSON字符串解析為Python數據結構,1.輸入必須是雙引號包裹的字符串且布爾值為true/false;2.支持null→None、對象→dict、數組→list等自動轉換;3.常用于處理API返回的JSON字符串,如response_string經json.loads()解析后可直接訪問嵌套數據,使用時需確保JSON格式正確,否則會拋出異常。

Choosetheappropriateindextypebasedonusecase,suchassinglefield,compound,multikey,text,geospatial,orTTLindexes.2.ApplytheESRrulewhencreatingcompoundindexesbyorderingfieldsasequality,sort,thenrange.3.Designindexestosupportcoveredqueriesbyincludingallque

Maven是Java項目管理和構建的標準工具,答案在于它通過pom.xml實現項目結構標準化、依賴管理、構建生命周期自動化和插件擴展;1.使用pom.xml定義groupId、artifactId、version和dependencies;2.掌握核心命令如mvnclean、compile、test、package、install和deploy;3.利用dependencyManagement和exclusions管理依賴版本與沖突;4.通過多模塊項目結構組織大型應用并由父POM統(tǒng)一管理;5.配

Python中函數傳參是“傳遞對象引用”,即1.對于可變對象(如列表、字典),函數內進行原地修改(如append、賦值切片)會直接影響原對象;2.對于不可變對象(如整數、字符串),函數內無法改變原對象,重新賦值只會創(chuàng)建新對象;3.參數傳遞的是引用的副本,若在函數內重新綁定變量(如lst=[...]),則斷開與原對象的連接,不影響外部變量。因此,修改可變對象會影響原數據,而不可變對象和重新賦值則不會,這解釋了為何列表在函數內修改后外部可見,而整數變化僅限局部。
