首頁 > Java > java教程 > 主體

Java 中的 EJB

WBOY
發布: 2024-08-30 16:22:10
原創
924 人瀏覽過

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());
}
}
}
}
登入後複製

範例輸出:

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 充當業務邏輯應用程式之外的介面;與其他業務邏輯框架相比,它具有更多安全方面的瀏覽器相容性功能。它還維護系統級交易。

以上是Java 中的 EJB的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板