`
talin2010
  • 浏览: 520506 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

EJB学习笔记(by quqi99)

阅读更多

EJB学习笔记(by quqi99)

作者:张华 发表于:2010-01-14

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明

下面看看如何在eclipse中开发一个EJB,以及一个EJB client

1)新建EJB Project, 名称为SFSBejb, EJB Module version选择3.0,点击“Add project to an EAR"它会自动创建EAR工程,

然后再点击“Create an EJB Client JAR module to hold the client interfaces and classes“,它也会自动

创建名为”SFSBejbClient“的工程了。

2)在SFSBejb工程的ejbModule目录下新建两个源文件SFSB.java与SFSBRemote.java

package ha.failover.beans.sfsb;

import javax.ejb.Remote;
import java.util.Vector;
import java.util.Hashtable;
@Remote
public interface SFSBRemote
{
public void ejbCreate(String name) throws Exception;
public String addAttribute(String name,String value) throws Exception;
public String removeAttribute(String name) throws Exception ;
public Hashtable getAttributes() throws Exception;

}

package ha.failover.beans.sfsb;
import javax.ejb.Stateful;
import javax.ejb.EJB;
import javax.ejb.EJBs;
import javax.ejb.Remove;
import javax.ejb.EJBException;
import javax.ejb.SessionContext;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.ejb.TransactionAttributeType;
import javax.ejb.TransactionAttribute;

import javax.naming.InitialContext;
import java.util.Vector;
import java.util.Hashtable;
import javax.annotation.Resource;
import javax.transaction.UserTransaction;


@Stateful(name="SFSBEjbRef")
public class SFSB implements SFSBRemote
{
String name=null;
Hashtable attribs = new Hashtable();

public void ejbCreate(String name)
{
this.name=name;
}

@TransactionAttribute(TransactionAttributeType.REQUIRED)
public String addAttribute(String name,String value)
{
System.out.println("addAttribute"+name+" "+value);

attribs.put(name,value);

return ("Attribute "+ name + " added "+ "on instance: "+ System.getProperty("com.sun.aas.instanceName"));
}

@TransactionAttribute(TransactionAttributeType.REQUIRED)

public String removeAttribute(String name)
{
System.out.println("removeAttribute"+name);

attribs.remove(name);
return ("Attribute "+ name + " removed "+ "on instance: "+ System.getProperty("com.sun.aas.instanceName"));
}

public Hashtable getAttributes() {
return attribs;

}

}

3)在SFSBejbClient的ejbModule目录下新建客户端源代码:

package ha.failover.client;
import java.io.*;
import java.util.*;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import javax.ejb.*;
import java.sql.*;
import java.rmi.*;
import ha.failover.beans.sfsb.*;

/**
* A simple java client. This uses the services provided by
* the SFSB Bean.
*/

public class EJBClient
{

private SFSBRemote sfsbremote;
private Context myEnv;
EJBClient client;
static BufferedReader reader1;

/*
* The main method of the client. This invokes the bean to use its service.
* It then invokes validate method in the bean.
*
*/
public EJBClient()
{
}

public static void main(String[] args)
{
boolean quit=false;
EJBClient client=null;
try
{
client= new EJBClient();
client.lookup();
System.out.println("Bean Lookup Successful");
while(!quit){
client.printQuery();
reader1 = new BufferedReader(new InputStreamReader(System.in));
String line=reader1.readLine();
client.printStars();
quit = client.processQuery(line);
client.printStars();
}
}
catch(Exception exc)
{
System.err.println("Caught an unexpected exception!");
exc.printStackTrace();
}
}

private void printQuery ()
{
System.out.println("Add an Attribute(a)");
System.out.println("Remove an Attribute(r)");
System.out.println("Print Attributes(p)");
System.out.println("Quit(q)");
}
private void lookup()
{
try
{
myEnv = new InitialContext();
sfsbremote = (SFSBRemote) myEnv.lookup("ha.failover.beans.sfsb.SFSBRemote");

}
catch(Exception exc)
{
System.err.println("Caught an unexpected exception during lookup!");
exc.printStackTrace();
System.exit(0);
}
}

private String addAttribute(String name , String value)
{
try
{
return sfsbremote.addAttribute(name,value);
}
catch(Exception exc)
{
exc.printStackTrace();
}
return null;
}

private String removeAttribute(String name)
{
try
{
return sfsbremote.removeAttribute(name);
}
catch(Exception exc)
{
exc.printStackTrace();
}
return null;
}

private void printAttributes() {
try {
Hashtable table = sfsbremote.getAttributes();
for (Enumeration e = table.keys() ; e.hasMoreElements() ;) {
String name = (String)e.nextElement();
System.out.println("Name : " + name +", Value: "+ table.get(name));

}
} catch(Exception exc)
{
exc.printStackTrace();
}
}

private void printStars()
{
System.out.println("**********************************************");
}

private boolean processQuery(String received){

String value=received.toLowerCase();
try
{
if (value.equals("a")){
System.out.print("Enter name :" );
System.out.flush();
String name =reader1.readLine();
System.out.print("Enter value :" );
System.out.flush();
String value1 =reader1.readLine();
System.out.println(addAttribute(name,value1));
return false;
}
if (value.equals("r")) {
System.out.println("Enter name :" );
String name =reader1.readLine();
System.out.println(removeAttribute(name));
return false;
}


if (value.equals("p")) {
printAttributes();
return false;

}

if (value.equals("q")) {
return true;
}

} catch (Exception ex) {
ex.printStackTrace();
}
return true;

}

}

注意,请将SFSBRemote.java类在这里再复制一遍

4)由于在新建工程时,缺少application文件,那么在SFSBejbEAR工程下的META-INF目录下新建application.xml文件,如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN" "http://java.sun.com/dtd/application_1_3.dtd">
<application>
<display-name>clusterjsp</display-name>
<description>J2EE Application webslPloginApp</description>
<module>
<java>SFSBejbClient.jar</java>
</module>

<module>
<ejb>SFSBejb.jar</ejb>
</module>
</application>

5) 在SFSBejbClient工程的META-INF目录下的MANIFEST.MF文件的末行添加一句:

Main-Class: ha.failover.client.EJBClient

6)如果要写客户化配置,可在SFSBejb工程下的META-INF文件中添加配置sun-application.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-application PUBLIC "-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 7.0 J2EE Application 1.3//EN" "http://www.sun.com/software/sunone/appserver/dtds/sun-application_1_3-0.dtd">
<sun-application>

</sun-application>

7)假如在glassfish下部署,可用如下命令:

EJB服务:asadmin deploy --host localhost --port 4848 --type application --target cluster1 --retrieve ./ --availabilityenabled=true c:\test\SFSBejbEAR.ear

EJB Client : appclient -xml c:\glassfish\domains\domain1\config\sun-acc.xml -client c:\test\SFSBejbClient.jar

当然,在使用appclient命令时,请先修改sun-acc.xml文件,将你的集群(我这里是cluster1)的所有实例用

target-server元素配上,例如:

<client-container>

<target-server name="zhanghua" address="zhanghua" port="33071"/>

....

</client-contianer>

当然,如果不想用命令执行client,也可以通过main方法像普通JAVA一样执行,只不过要查找JNDI时

要加上属性如下属性:

Properties props = new Properties();

props.setPropery("com.sun.appserv.iiop.endpoints","zhanghua:33700,zhanghua:33701");

InitialContext ctx = new InitialContext(props);

分享到:
评论

相关推荐

    Weblogic Ejb 学习笔记

    WebLogic EJB学习笔记主要涵盖了企业级Java Bean(Enterprise JavaBeans,简称EJB)在Oracle WebLogic Server中的应用和管理。EJB是Java EE(Java Platform, Enterprise Edition)平台的核心组件,用于构建可扩展、...

    ejb 学习笔记6

    ### EJB学习笔记第六部分详解 #### 一、EJB之间的调用 EJB (Enterprise JavaBeans) 是Java EE平台中用于开发分布式企业应用程序的重要组件。在实际开发过程中,经常需要一个EJB调用另一个EJB来实现更复杂的业务...

    Weblogic EJB 学习笔记

    Weblogic EJB 学习笔记主要涵盖了EJB(Enterprise JavaBeans)的基础知识,包括无状态会话bean、有状态会话bean和实体bean这三种主要的EJB类型,以及EJB在Weblogic服务器中的配置和事务管理。 1. **无状态会话bean*...

    ejb学习笔记

    在深入探讨《ejb学习笔记》这一主题之前,我们首先需要理解什么是EJB(Enterprise JavaBeans)。EJB是Java平台为企业级应用开发提供的一套组件模型,它属于J2EE(Java 2 Platform, Enterprise Edition)的一部分,...

    EJB学习笔记、运行机制

    【EJB学习笔记、运行机制】 企业级程序(Enterprise Application)是围绕商业目的设计的,具有分布分层的程序架构。这种类型的程序旨在满足大型企业的复杂需求,通常涉及多个组件和层,确保系统的稳定性和可扩展性...

    EJB学习笔记.doc

    【EJB学习笔记】 EJB,全称为Enterprise Java Beans,是Java平台上的一个标准,用于开发和部署服务器端的分布式组件。它基于Java语言,为创建高效能、安全且可扩展的企业级应用提供了框架。EJB规范由Java ...

    EJB学习笔记2

    【EJB学习笔记2】 EJB,全称Enterprise JavaBeans,是Java EE(现在被称为Jakarta EE)平台的一部分,主要用于构建可复用的、安全的、可伸缩的服务器端应用程序。EJB标准定义了一组规范,使得开发者可以创建分布式...

    ejb 学习笔记7

    ### EJB学习笔记7知识点详解 #### 实体(消息)- 重点篇章解析 ##### 继承映射策略深入理解 在实体继承映射中,我们主要探讨了三种不同的策略,每种策略都有其特定的应用场景及优缺点。 1. **所有继承结构一张表...

    ejb 学习笔记4

    ### EJB学习笔记4:深入理解实体与JPA #### 实体的概念与作用 实体,在企业级Java开发中,特别是EJB(Enterprise JavaBeans)框架下,指的是具有持久化能力的POJO(Plain Old Java Object)类。不同于实体Bean...

    ejb 学习笔记5

    ### 深入解析《ejb学习笔记5》——消息驱动Bean详解 #### 消息驱动Bean概述 消息驱动Bean(MDB,Message Driven Bean)是Enterprise JavaBeans(EJB)框架中的一个重要组成部分,主要用于接收并处理来自消息中间件...

    ejb 学习笔记8

    ### EJB学习笔记8:深入理解事务处理机制 #### 一、事务的背景知识 **事务**是指一系列操作,这些操作作为一个不可分割的工作单元来执行,即要么全部完成,要么完全不执行。事务的主要特性包括: - **原子性...

    EJB学习笔记.rar

    从最初的EJB 1.0到EJB 2.x,再到EJB 3.0,其复杂性和学习曲线逐渐降低。EJB 3.0引入了注解,极大地简化了代码,并且与JPA、JSF等其他Java EE技术更好地集成。最新的EJB 3.2版本继续优化了API,提高了开发效率。 **...

    基于Weblogic 的ejb 学习笔记

    ### 基于Weblogic的EJB学习笔记详解 #### EJB基础知识概览 ##### 1. 无状态会话Bean (Stateless Session Bean) 无状态会话Bean是一种不保存客户端会话状态的EJB组件。这意味着每个客户端的请求都不依赖于前一个...

    EJB学习笔记

    【EJB学习笔记】 EJB(Enterprise JavaBeans)是Java EE平台的核心组成部分,主要用于构建分布式、面向服务的企业级应用程序。EJB技术旨在解决多层架构体系中的问题,尤其是在服务器端计算场景下的应用。 1. **...

    ejb 学习笔记3

    经典资料+个人心得,希望大家能喜欢

    ejb 学习笔记

    ### EJB学习笔记知识点梳理 #### 一、EJB概览 **EJB**(Enterprise JavaBeans)是一种Java EE技术,用于开发、部署服务器端的分布式应用组件。它旨在简化企业级应用程序的开发过程,通过将复杂的底层服务(如事务...

Global site tag (gtag.js) - Google Analytics