>  기사  >  Java  >  자바의 EJB

자바의 EJB

WBOY
WBOY원래의
2024-08-30 16:22:10902검색

Ejb는 서버 측 소프트웨어 구성 요소라고도 하는 Enterprise Java Bean 구성 요소로 표시됩니다. 주로 애플리케이션의 비즈니스 로직으로 사용됩니다. 런타임 환경에 사용되는 웹 컨테이너에는 소프트웨어 구성 요소, 컴퓨터 보안, 서블릿 수명주기 관리, 트랜잭션 처리 및 웹 서비스가 포함됩니다. EJB는 컴퓨터 네트워크의 서버 측에서 실행되는 Java 프로그래밍 언어로 작성된 아키텍처 스타일이므로 애플리케이션에서는 클라이언트-서버 모델을 따랐습니다. 또한 ejb는 웹 컴포넌트를 클라이언트 측에 배포하는 Java Bean 기술로 여러 웹 애플리케이션에서 재사용 가능한 컴포넌트라는 기능을 가지고 있습니다.

무료 소프트웨어 개발 과정 시작

웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등

구문:

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 Bean과 2.Message Driven BeansSession Bean입니다. 세션 빈은 클라이언트-서버 상호 작용에 사용됩니다. 이는 클라이언트 호출에 의한 프로그래밍 방식을 통해 애플리케이션의 비즈니스 로직을 캡슐화합니다. 로컬 시스템 또는 원격 시스템 Bean이 수행되며 웹 서비스의 도움으로 클라이언트가 사용됩니다. Session Bean은 세 가지 범주로 나뉩니다. 1. Stateless, 2.Stateful 및 3.Singleton.Stateless Bean 클라이언트가 이러한 유형의 Bean을 사용할 때 웹 컨테이너에는 영구 상태가 없으므로 비교할 때 스레드로부터 안전한 성능이 매우 빠릅니다. 상태 저장 빈에. 이 빈은 동시에 여러 클라이언트와 공유됩니다.
  • 상태 저장 Bean은 상태를 컨테이너에 저장할 수 있습니다. 클라이언트가 세션을 종료하면 이러한 상태도 서버에서 삭제됩니다. Singelton Bean에는 해당 애플리케이션의 전체 수명주기 동안 단일 인스턴스 세션이 있습니다. 이 Bean은 또한 여러 클라이언트와 상태를 공유했습니다. 이 Bean은 스레드로부터 안전하므로 개발자가 Stateful Bean에 비해 더 쉽게 사용할 수 있고 성능도 빠릅니다.
  • Message Driven Beans(MDB)는 JMS 메시지 리스너와 마찬가지로 비동기식 메시지 유형으로 사용되는 Bean 유형이지만 메시지 응답을 이벤트가 아닌 JMS 메시지로 수신합니다. 메시지가 추가 프로세스를 위해 onMessage() 메서드를 사용하여 MDB 빈을 호출하는 컨테이너를 수신할 때마다 jndi 서비스를 사용하여 메시지를 매핑할 수 있습니다. onMessage() 메소드를 사용하는 MDB의 전체 프로세스는 단일 트랜잭션이 됩니다. 메시지 프로세스가 롤백이라고 가정하면 수신자 메시지가 다시 재전송됩니다.

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

샘플 출력:

자바의 EJB

예시 #2

웹 서비스의 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 naming 디렉토리 인터페이스)를 사용하여 책을 추가 및 삭제합니다. 고객을 위한 웹 서비스는 웹 최종 예제를 통해 작업을 수행했으며 추가 보안을 사용했습니다.

결론

일반적으로 EJB는 비즈니스 로직 애플리케이션 외부의 인터페이스 역할을 합니다. 다른 비즈니스 로직 프레임워크와 비교할 때 보안 측면에서 브라우저 호환성 기능이 더 뛰어납니다. 또한 시스템 수준의 트랜잭션도 유지합니다.

위 내용은 자바의 EJB의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:자바 이메일다음 기사:자바 이메일