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

目錄
如何在Java Works中使用EJB?
用 Java 實現 EJB 的示例
示例#3
結論
首頁 Java java教程 Java 中的 EJB

Java 中的 EJB

Aug 30, 2024 pm 04:22 PM
java

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

示例輸出:

Java 中的 EJB

示例#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中文網其他相關文章!

本站聲明
本文內容由網友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現有涉嫌抄襲侵權的內容,請聯系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅動的應用程序,用于創(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

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

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

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

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等方法結合原生表達式以提升安

使用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()驗證方法調用次數與參數;3.可模擬異常場景并驗證錯誤處理;4.推薦構造函數注入、避免過度模擬、保持測試原子性;5.使用assertAll()合并斷言,@Nested組織測試場景,從而提升測試可維護性和可靠性。

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

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方法,無需

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

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

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

json.loads()用于將JSON字符串解析為Python數據結構,1.輸入必須是雙引號包裹的字符串且布爾值為true/false;2.支持null→None、對象→dict、數組→list等自動轉換;3.常用于處理API返回的JSON字符串,如response_string經json.loads()解析后可直接訪問嵌套數據,使用時需確保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項目管理和構建的標準工具,答案在于它通過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通過參考示例 Python通過參考示例 Jul 29, 2025 am 12:31 AM

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

See all articles