Java 中的 EJB
Ejb全稱為Enterprise Java Bean Component,也稱為伺服器端軟體元件;它將主要用作應用程式的業務邏輯。用於執行時間環境的 Web 容器包括軟體元件、電腦安全、servlet 生命週期管理、事務處理和 Web 服務。 EJb 是運行在電腦網路伺服器端的 Java 程式語言編寫的架構風格,因此它在應用程式中遵循客戶端-伺服器模型。而且,ejb 是一種在客戶端分發 Web 元件的 Java bean 技術,它具有在多個 Web 應用程式中稱為可重複使用元件的功能。
開始您的免費軟體開發課程
網頁開發、程式語言、軟體測試及其他
文法:
java程式設計中EJB模型的基本語法如下。
import javax.ejb.*; import java packages; class classname { Main method() { -----Some programming logics---- } }
以上程式碼是使用ejb套件開發應用程式的基本步驟。
如何在Java Works中使用EJB?
- 在EJB中,java bean類別將使用多個ejb規範的註釋,這將有助於根據業務目的滿足使用者需求。 EJB有一組不同的版本,並且遵循了JNDI的功能(java命名目錄介面)。伺服器jndi中的資源之一是目錄服務,用於定位或分配資源,如ejb、資料來源和JMS佇列服務。伺服器對 jndi 資源有一個預設方案名稱,但如果我們更改配置部分的名稱,它應該被覆蓋。
- EJB 將在 Java bean 上工作;它有兩種不同的類型 1. Session beans 和 2.Message Driven BeansSession beans。會話 bean 將用於客戶端-伺服器互動;它透過客戶端呼叫以程式設計方式封裝應用程式的業務邏輯,該呼叫將由本機或遠端電腦完成,客戶端將在 Web 服務的協助下使用 bean。會話bean將分為三種不同的類別1.無狀態,2.有狀態和3.單例。無狀態bean當客戶端使用這些類型的bean時,Web容器中沒有永久狀態,因此相比之下,它們是線程安全的,性能方面非常快有狀態的 Bean。這些 Bean 同時與多個客戶端共用。
- 有狀態bean可以將狀態儲存在容器中;一旦客戶端終止會話,這些狀態也會在伺服器中被破壞。 Singelton beans 在該應用程式的整個生命週期中都有一個實例會話;這些 bean 也與多個客戶端共用狀態。這些 Bean 是線程安全的,因此開發人員可以更輕鬆地使用它們,並且與有狀態 Bean 相比,效能也更快。
- 訊息驅動Bean(MDB)是一種像JMS訊息監聽器一樣用作非同步訊息類型的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 充當業務邏輯應用程式之外的介面;與其他業務邏輯框架相比,它具有更多安全方面的瀏覽器相容性功能。它還維護系統級交易。
以上是Java 中的 EJB的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

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

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

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

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

SetupaMaven/GradleprojectwithJAX-RSdependencieslikeJersey;2.CreateaRESTresourceusingannotationssuchas@Pathand@GET;3.ConfiguretheapplicationviaApplicationsubclassorweb.xml;4.AddJacksonforJSONbindingbyincludingjersey-media-json-jackson;5.DeploytoaJakar

要使用Java生成哈希值,可通過MessageDigest類實現。 1.獲取指定算法的實例,如MD5或SHA-256;2.調用.update()方法傳入待加密數據;3.調用.digest()方法獲取哈希字節數組;4.將字節數組轉換為十六進製字符串以便讀取;對於大文件等輸入,應分塊讀取並多次調用.update();推薦使用SHA-256而非MD5或SHA-1以確保安全性。

理解區塊鏈核心組件,包括區塊、哈希、鍊式結構、共識機制和不可篡改性;2.創建包含數據、時間戳、前一哈希和Nonce的Block類,並實現SHA-256哈希計算與工作量證明挖礦;3.構建Blockchain類管理區塊列表,初始化創世區塊,添加新區塊並驗證鏈的完整性;4.編寫主類測試區塊鏈,依次添加交易數據區塊並輸出鏈狀態;5.可選增強功能包括交易支持、P2P網絡、數字簽名、RESTAPI和數據持久化;6.可選用HyperledgerFabric、Web3J或Corda等Java區塊鏈庫進行生產級開

是的,一個常見的CSS下拉菜單可以通過純HTML和CSS實現,無需JavaScript。 1.使用嵌套的ul和li構建菜單結構;2.通過:hover偽類控制下拉內容的顯示與隱藏;3.父級li設置position:relative,子菜單使用position:absolute進行定位;4.子菜單默認display:none,懸停時變為display:block;5.可通過嵌套實現多級下拉,結合transition添加淡入動畫,配合媒體查詢適配移動端,整個方案簡潔且無需JavaScript支持,適合大

@property裝飾器用於將方法轉為屬性,實現屬性的讀取、設置和刪除控制。 1.基本用法:通過@property定義只讀屬性,如area根據radius計算並直接訪問;2.進階用法:使用@name.setter和@name.deleter實現屬性的賦值驗證與刪除操作;3.實際應用:在setter中進行數據驗證,如BankAccount確保餘額非負;4.命名規範:內部變量用_前綴,property方法名與屬性一致,通過property統一訪問控制,提升代碼安全性和可維護性。

首先通過JavaScript獲取用戶系統偏好和本地存儲的主題設置,初始化頁面主題;1.HTML結構包含一個按鈕用於觸發主題切換;2.CSS使用:root定義亮色主題變量,.dark-mode類定義暗色主題變量,並通過var()應用這些變量;3.JavaScript檢測prefers-color-scheme並讀取localStorage決定初始主題;4.點擊按鈕時切換html元素上的dark-mode類,並將當前狀態保存至localStorage;5.所有顏色變化均帶有0.3秒過渡動畫,提升用戶

使用Flexbox或Grid可實現全屏佈局,核心是讓頁面最小高度為視口高度(min-height:100vh);2.通過flex:1或grid-template-rows:auto1frauto使內容區域佔滿剩餘空間;3.設置box-sizing:border-box確保內邊距不超出容器;4.配合響應式媒體查詢優化移動端體驗;該方案兼容性好且結構清晰,適用於登錄頁、儀錶盤等場景,最終實現內容垂直居中並佔滿視口的全屏頁面佈局。
