`
tianqinghua
  • 浏览: 27506 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
阅读更多

 大家一至认为EJB是比较重量级组件,没有spring+Hibernate+struts2来的轻量,但是工作中,在大型企业级应用过程中,使用轻量级的开源框架有时,或多或少会有一些问题,比如:集群环境下并发,事务,分布式。等问题是比交头疼的一件事,为了解决这些问题,我们会到处找相应的开源产品或者自己实现(一般不可能),最近,在工作中发现,项目越来越大,在200人以上人的开发规模是:项目管理、模块划分、版本控制,异构系统交互发面;暴露了大量的问题,由于,我们的开发模式是比较的传统的瀑布模式:一般流程如下:分析需求----->需求评审------》设计-----》设计评审-----》写伪代码-------》开发--------》测试(压力测试和单元测试)--------》评审测试报告--------》发布申请--------》发布。最初为了进入迅速电子商务的行业项目的架构不是很好,比如,模块划分,项目的规划等问题没有考虑周全,现在发现,每天的访问量独立IP占到40W,加上没过一个时间就会有活动,所以开发新功能是难免的,那问题来了,我们花了大量的时间在优化网站的性能、数据库的性能,但是,在优化的过程中发现,模块

的紧耦合导致,有些优化方案无能为力,所有,最近,老大们在想,我们现有的机构已经不符合我们的业务发展速度了,因为我们花了大量的人力和物力,效果不是很明显,所以,决定要从新开发 ,由于,我们决定发展的方向是云计算,所以,为了适应中模式,我个人认为,我们技术选型,EJB3.0是肯定了,因为EJB3.0的编程模型和EJB1.X 和EJB2.X相比,有了很好的改善,个人认为:我们的架构会趋向模块化,系统化,服务化,这真是云计算SOA体系的核心,对于业务BEAN,我们会采用分布式部署:当然也是独立化,比如:我们会按照一定的业务某块,单独在服务器上只部署EJB,在另外机器上部署其他项目,今天晚了,明天继续。。。

1、ant脚本

 

<?xml version="1.0" encoding="UTF-8"?>
<project name="ejb学习" default="begin" basedir=".">
	<property name="build.dir" value="${basedir}/build" />
	<property name="build.classes.dir" value="${build.dir}/classes" />
	<target name="begin" depends="jar,deploy" description="开始">
		<echo message="开始了--------------"></echo>
	 <echo message="结束了--------------"></echo>
	</target>
	<!--初始化-->
	<target name="init" description="初始化" depends="clean">
		<mkdir dir="${build.dir}" />
		<mkdir dir="${build.classes.dir}" />
		<mkdir dir="${basedir}/dist" />
	</target>
	<!--编译-->
	<target name="compile" description="编译">
		<javac srcdir="${basedir}/src" destdir="${build.classes.dir}">
			<classpath>
				<pathelement path="${basedir}/lib/javaee.jar" />
				<pathelement path="${basedir}/lib/jboss-annotations-ejb3.jar" />
			</classpath>
		</javac>
	</target>
	<!--打成JAR包-->
	<target name="jar" description="打包成jar" depends="init,compile">
		<jar destfile="${basedir}/dist/ejb.jar">
			<fileset dir="${build.classes.dir}">
				<include name="**/*.class" />
			</fileset>
			<metainf dir="${basedir}/src/META-INF">
				<include name="**" />
			</metainf>
		</jar>
		<jar destfile="${basedir}/dist/ejbclient.jar">
			<fileset dir="${build.classes.dir}">
				<include name="**/ejb/*.class" />
			</fileset>
		</jar>
		<jar destfile="${basedir}/dist/ejbentity.jar">
			<fileset dir="${build.classes.dir}">
				<include name="**/entity/*.class" />
			</fileset>
		</jar>
	</target>
	<!--清理-->
	<target name="clean" description="清理描述">
		<delete dir="${build.dir}" />
		<delete dir="${basedir}/dist" />
		<delete file="J:\ejb3.0\ejbstudy\server\jboss-4.2.0.GA\server\default\deploy\ejb.jar"/>
	</target>
	<!--部署EJB-->
	<fileset dir="${basedir}/dist" includes="ejb.jar" id="source.fileset" />
	<target name="deploy"  description="部署EJB">
			<copy todir="J:\ejb3.0\ejbstudy\server\jboss-4.2.0.GA\server\default\deploy\">
				<fileset refid="source.fileset" />
			</copy>
		</target>
</project>

 2、第一个EJB

 

package com.dongwenhua.ejb;

public interface HelloWorld {

	public String sayHello(String name);
}

 

package com.dongwenhua.impl;

import javax.ejb.Remote;
import javax.ejb.Stateless;

import com.dongwenhua.ejb.HelloWorld;
@Stateless
@Remote(HelloWorld.class)
public class HelloWorldBean implements HelloWorld {

	public String sayHello(String name) {
		
		return name+":说你好吗,这是我第一个EJB哦!";
	}

}
 
	@Test
	public void test01() throws NamingException {
		InitialContext ctx = new InitialContext();
		HelloWorld hello;
		try {
			hello = (HelloWorld) ctx.lookup("HelloWorldBean/remote");
			String say = hello.sayHello("dongwenhua");
			System.out.println(say);
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

 jndi.properties

 

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

 3、定时服务

package com.dongwenhua.ejb;

public interface TimeService {

	public void scheduleTimer(long milliseconds);
}
  
package com.dongwenhua.impl;

import java.util.Date;

import javax.annotation.Resource;
import javax.ejb.Remote;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import javax.ejb.Timeout;
import javax.ejb.Timer;

import com.dongwenhua.ejb.TimeService;
@Stateless
@Remote(TimeService.class)
public class TimeServiceBean implements TimeService {

	private int count=1;
	@Resource
	private SessionContext ctx;
	public void scheduleTimer(long milliseconds) {
		count=1;
		ctx.getTimerService().createTimer(new Date(new Date().getTime()+milliseconds), milliseconds,"大家好这是我的第一个定时器!");
		
	}
	@Timeout
	public void timeoutHandle(Timer timer){
		System.out.println("------------");
		System.out.println("定时器事件发生,传进的参数为:"+timer.getInfo());
		System.out.println("------------");
		if(count>=5){
			timer.cancel();
		}
		count++;
	}
}

 EJB注入

package com.dongwenhua.ejb;

public interface Injection {

	public String sayHello(String name);
}
  
package com.dongwenhua.impl;

import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;

import com.dongwenhua.ejb.HelloWorld;
import com.dongwenhua.ejb.Injection;

@Stateless
@Remote(Injection.class)
public class InjectionBean implements Injection {
	@EJB(name="HelloWorldBean")
	private HelloWorld helloWorld;
	public String sayHello(String name) {
		return this.helloWorld.sayHello(name+"@ejb");
	}

}

 拦击器

package com.dongwenhua.ejb;

public interface InterceptorOption {

	public String sayHello(String name);
	
	public String getName();
}
  
package com.dongwenhua.impl;

import javax.interceptor.AroundInvoke;
import javax.interceptor.InvocationContext;

public class HelloInterceptor {
	@AroundInvoke
	public Object log(InvocationContext ctx) throws Exception{
		System.out.println("HelloInterceptor beign......");
		long start = System.currentTimeMillis();
		if(ctx.getMethod().getName().equals("sayHello")){
			System.out.println("sayHello is invoke......");
		}
		if(ctx.getMethod().getName().equals("getName")){
			System.out.println("getName is invoke......");
		}
		long time = System.currentTimeMillis()-start;
		System.out.println("总共用了:"+time);
		return ctx.proceed();
		
	}
}
 
package com.dongwenhua.impl;

import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.interceptor.AroundInvoke;
import javax.interceptor.Interceptors;
import javax.interceptor.InvocationContext;

import org.jboss.annotation.ejb.RemoteBinding;

import com.dongwenhua.ejb.InterceptorOption;
@Stateless
@Remote(InterceptorOption.class)
@RemoteBinding(jndiBinding="interceptor/InterceptorBean")
//@Interceptors(HelloInterceptor.class)
public class InterceptorOptionBean implements InterceptorOption {

	public String getName() {
		// TODO Auto-generated method stub
		return "我很好!";
	}

	public String sayHello(String name) {
		// TODO Auto-generated method stub
		return name+":你好吗?";
	}
	@AroundInvoke
	public Object log(InvocationContext ctx) throws Exception{
		System.out.println("HelloInterceptor beign......");
		long start = System.currentTimeMillis();
		if(ctx.getMethod().getName().equals("sayHello")){
			System.out.println("sayHello is invoke......");
		}
		if(ctx.getMethod().getName().equals("getName")){
			System.out.println("getName is invoke......");
		}
		long time = System.currentTimeMillis()-start;
		System.out.println("总共用了:"+time);
		return ctx.proceed();
		
	}
}

 4、自定义JNDI名称

package com.dongwenhua.ejb;

public interface JndiBuildingRemoteOption {

	public String sayHello(String name);
}
package com.dongwenhua.ejb;

public interface JndiBuildingLocalOption {

	public String sayHello(String name);
}
  
package com.dongwenhua.impl;

import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateless;

import org.jboss.annotation.ejb.LocalBinding;
import org.jboss.annotation.ejb.RemoteBinding;

import com.dongwenhua.ejb.JndiBuildingLocalOption;
import com.dongwenhua.ejb.JndiBuildingRemoteOption;
@Stateless
@Remote(JndiBuildingRemoteOption.class)
@RemoteBinding(jndiBinding="ejb/RemoteOption")
@Local(JndiBuildingLocalOption.class)
@LocalBinding(jndiBinding="ejb/LocalOption")
public class JndiBuildingOptionBean implements JndiBuildingLocalOption,JndiBuildingRemoteOption {

	public String sayHello(String name) {
		
		return name+":改变JNDI的名字!";
	}

}

 5、EJB生命周期

package com.dongwenhua.ejb;

public interface LifeCycle {

	public String sayHello(String name);
	
	public void stopSession();
}
  
package com.dongwenhua.impl;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Init;
import javax.ejb.PostActivate;
import javax.ejb.Remote;
import javax.ejb.Remove;
import javax.ejb.Stateful;

import org.jboss.annotation.ejb.RemoteBinding;

import com.dongwenhua.ejb.LifeCycle;
@Stateful
@Remote(LifeCycle.class)
@RemoteBinding(jndiBinding="life/RemoteOption")
public class LifeCycleBean implements LifeCycle {

	public String sayHello(String name) {
		try {
			Thread.sleep(1000*30);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "这个是BENA生命周期的例子!";
	}

	@Init
	public void init(){
		System.out.println("init is begin....");
	}
	
	@PostConstruct
	public void construct(){
		System.out.println("construct");
	}
	@PreDestroy
	public void exit(){
		System.out.println("exit");
	}
	@PostActivate
	public void active(){
		System.out.println("active");
	}
	@Remove
	public void stopSession() {
		System.out.println("stopSession");

	}

}

 

 

 3

分享到:
评论

相关推荐

    ejb开发

    本教程针对新手,是一个很好的EJB开发入门学习资源。 在提供的压缩包文件中,我们有两个SWF文件,它们可能是基于Flash的教学演示,详细解释了EJB的开发过程。文件名分别为: 1. `jbossmyeclipse_entity.swf` - 这...

    ejb开发使用手册,非常适合初学者

    总的来说,EJB开发涉及到了服务器端组件的编程、对象持久化和数据库交互等多个方面,是企业级Java应用开发的重要组成部分。对于初学者来说,理解EJB的原理和使用方法,结合实际案例和详细的步骤说明,将有助于快速...

    EJB开发手册,便于你的开发,是可以让你更能得心应手

    EJB开发手册,便于你的开发,是可以让你更能得心应手EJB开发手册,便于你的开发,是可以让你更能得心应手EJB开发手册,便于你的开发,是可以让你更能得心应手EJB开发手册,便于你的开发,是可以让你更能得心应手EJB...

    EJB开发及调试方法

    EJB(Enterprise JavaBeans)是Java平台上用于构建企业级应用的一种组件模型,它提供了一种标准的方式来封装业务逻辑,使得应用程序可以更容易地管理和部署。...在实际工作中,持续学习和实践是提高EJB开发技能的关键。

    jsf+EJB开发实例

    **结合JSF与EJB开发实例** 1. **通信机制**:JSF通常通过Managed Beans调用EJB服务,Managed Beans作为两者的桥梁,接收前端请求并转发给EJB处理。 2. **数据展示**:JSF组件可以绑定到Managed Bean的属性,当EJB...

    EJB 开发环境配置 (附图)

    EJB(Enterprise JavaBeans)是...总的来说,配置EJB开发环境需要细心和耐心,但一旦完成,你就可以享受到EJB带来的强大功能和便利性。通过不断的实践和学习,你将能够熟练掌握EJB开发,构建出健壮的企业级解决方案。

    myeclipse ejb 开发经典教程

    这份“myeclipse ejb 开发经典教程”应该会详尽地介绍以上知识点,帮助初学者建立起完整的EJB开发技能,为后续的Java EE项目开发打下坚实基础。通过实践这些教程,读者不仅可以掌握MyEclipse的使用,还能深入理解EJB...

    JBuilder 9 EJB 开发新功能-pdf.rar

    《JBuilder 9 EJB开发新功能》是针对Java企业级应用开发的一款强大的集成开发环境(IDE)的深度解析。JBuilder是由Borland公司推出的一款面向对象的开发工具,尤其在EJB(Enterprise JavaBeans)开发方面具有显著...

    EJB介绍简单的开发

    EJB开发介绍,一些关于EJB的基础知识,以及在企业中的简单应用,交你怎么简单的开发

    电子教程:EJB开发

    **企业级JavaBeans(Enterprise JavaBeans...理解和掌握EJB开发与部署对于任何希望在企业级应用开发领域有所建树的程序员来说都是至关重要的。通过深入学习和实践,你可以更好地利用EJB来创建高效、可靠的分布式系统。

    EJB开发--2.0

    【EJB开发--2.0】是一个关于企业级JavaBean(Enterprise JavaBeans,简称EJB)的开发教程,主要关注EJB 2.0版本。EJB是Java平台上的一个核心组件,用于构建可扩展、安全且事务处理能力强的企业级应用。在EJB 2.0时代...

    EJB开发——Java 2 SDK.rar_java ppt

    【标题】"EJB开发——Java 2 SDK.rar_java ppt" 涉及的主要知识点是企业级Java Bean(Enterprise JavaBeans,简称EJB)的开发,以及与Java 2 Software Development Kit(SDK)相关的编程概念。这个标题暗示了一个PPT...

    Eclipse开发EJB文档

    在配置EJB开发环境时,需注意EJB 2.0规范所对应的Java环境版本。由于EJB 2.0规范发布时间较早(2001年),其对JDK的要求相对较低。为了确保兼容性和稳定性,建议使用与EJB 2.0规范相匹配的JDK版本,即JDK 1.4或更低...

    EJB的一个开发实例

    ### EJB 开发实例:学校管理系统 #### 一、引言 随着企业级应用程序的不断发展,EJB(Enterprise JavaBeans)作为一种重要的Java EE组件模型,为构建可伸缩且易于维护的企业级应用提供了强有力的支持。本文旨在通过...

    EJB开发代码实例

    ### EJB开发代码实例分析 #### 一、概述 企业JavaBeans (EJB) 是Java平台对企业级应用程序组件的一种标准规范。它定义了一种软件组件模型,这些组件可以在分布式环境中运行,提供高可用性、安全性和事务管理等功能...

    JBuilder9 EJB开发.pdf

    ### JBuilder9 EJB开发知识点详解 #### 一、引言 JBuilder 9是一款强大的集成开发环境(IDE),特别适合于Java企业级应用的开发。本文将详细介绍如何利用JBuilder 9进行EJB(Enterprise JavaBeans)组件的开发,...

    EJB开发技术简介

    j2ee开发工具myeclipse的详细使用方法介绍,前端EJB开发,web开发必备教程。。

    EJB开发总结

    本文将深入探讨EJB开发的核心知识点,帮助程序员掌握EJB的使用技巧和最佳实践。 ### 1. EJB类型 EJB主要分为三种类型: - **会话Bean(Session Beans)**:代表一次客户端会话或一个业务操作。它们可以是无状态...

Global site tag (gtag.js) - Google Analytics