亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
如何在Java Works中使用EJB?
用 Java 實作 EJB 的範例
範例#3
結(jié)論
首頁 Java java教程 Java 中的 EJB

Java 中的 EJB

Aug 30, 2024 pm 04:22 PM
java

Ejb全稱為Enterprise Java Bean Component,也稱為伺服器端軟體元件;它將主要用作應(yīng)用程式的業(yè)務(wù)邏輯。用於執(zhí)行時間環(huán)境的 Web 容器包括軟體元件、電腦安全、servlet 生命週期管理、事務(wù)處理和 Web 服務(wù)。 EJb 是運行在電腦網(wǎng)路伺服器端的 Java 程式語言編寫的架構(gòu)風格,因此它在應(yīng)用程式中遵循客戶端-伺服器模型。而且,ejb 是一種在客戶端分發(fā) Web 元件的 Java bean 技術(shù),它具有在多個 Web 應(yīng)用程式中稱為可重複使用元件的功能。

開始您的免費軟體開發(fā)課程

網(wǎng)頁開發(fā)、程式語言、軟體測試及其他

文法:

java程式設(shè)計中EJB模型的基本語法如下。

import javax.ejb.*;
import java packages;
class classname
{
Main? method()
{
-----Some programming logics----
}
}

以上程式碼是使用ejb套件開發(fā)應(yīng)用程式的基本步驟。

如何在Java Works中使用EJB?

  • 在EJB中,java bean類別將使用多個ejb規(guī)範的註釋,這將有助於根據(jù)業(yè)務(wù)目的滿足使用者需求。 EJB有一組不同的版本,並且遵循了JNDI的功能(java命名目錄介面)。伺服器jndi中的資源之一是目錄服務(wù),用於定位或分配資源,如ejb、資料來源和JMS佇列服務(wù)。伺服器對 jndi 資源有一個預設(shè)方案名稱,但如果我們更改配置部分的名稱,它應(yīng)該被覆蓋。
  • EJB 將在 Java bean 上工作;它有兩種不同的類型 1. Session beans 和 2.Message Driven BeansSession beans。會話 bean 將用於客戶端-伺服器互動;它透過客戶端呼叫以程式設(shè)計方式封裝應(yīng)用程式的業(yè)務(wù)邏輯,該呼叫將由本機或遠端電腦完成,客戶端將在 Web 服務(wù)的協(xié)助下使用 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 在該應(yīng)用程式的整個生命週期中都有一個實例會話;這些 bean 也與多個客戶端共用狀態(tài)。這些 Bean 是線程安全的,因此開發(fā)人員可以更輕鬆地使用它們,並且與有狀態(tài) Bean 相比,效能也更快。
  • 訊息驅(qū)動Bean(MDB)是一種像JMS訊息監(jiān)聽器一樣用作非同步訊息類型的bean,但它將接收訊息回應(yīng)作為JMS訊息而不是事件。每當訊息接收到容器時,我們就可以使用 jndi 服務(wù)來映射訊息,容器使用 onMessage() 方法呼叫 MDB bean 進行進一步處理。 MDB 使用 onMessage() 方法的整個過程將是一個事務(wù)。如果假設(shè)訊息處理是回滾,則接收方訊息會再次重新投遞。

用 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());
}
}
}
}

範例輸出:

Java 中的 EJB

範例#2

Web 服務(wù)中的 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 服務(wù)透過Web 完成操作最後一個範例我們使用了額外的安全性。

結(jié)論

通常,EJB 充當業(yè)務(wù)邏輯應(yīng)用程式之外的介面;與其他業(yè)務(wù)邏輯框架相比,它具有更多安全方面的瀏覽器相容性功能。它還維護系統(tǒng)級交易。

以上是Java 中的 EJB的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應(yīng)的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

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

Laravel Raw SQL查詢示例 Laravel Raw SQL查詢示例 Jul 29, 2025 am 02:59 AM

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

使用Junit 5和Mockito在Java進行單位測試和嘲笑 使用Junit 5和Mockito在Java進行單位測試和嘲笑 Jul 29, 2025 am 01:20 AM

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

以身作則 以身作則 Jul 29, 2025 am 04:10 AM

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

CSS桌面固定示例 CSS桌面固定示例 Jul 29, 2025 am 04:28 AM

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

Python JSON負載示例 Python JSON負載示例 Jul 29, 2025 am 03:23 AM

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

MongoDB的索引策略 MongoDB的索引策略 Jul 29, 2025 am 01:05 AM

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

Java項目管理Maven的開發(fā)人員指南 Java項目管理Maven的開發(fā)人員指南 Jul 30, 2025 am 02:41 AM

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

Python通過參考示例 Python通過參考示例 Jul 29, 2025 am 12:31 AM

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

See all articles