首页 > Java > java教程 > 正文

Java 中的 EJB

WBOY
发布: 2024-08-30 16:22:10
原创
923 人浏览过

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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板