`

ejb简单入门细节随笔

 
阅读更多

本章内容是在学习ejb过程中记录的入门的知识点,主要讲述了几个标签的使用以及一些细节问题

接口PersonRemote.java

 

package org.guo.ejb.remote;

public interface PersonRemote {
	
	public void hello(String userName);
	
	public void run(int age);
	
	public void methodForward();
}

 

接口CheckRemote.java

package org.guo.ejb.remote;

public interface CheckRemote {
	public String doCheck();
}

 

实现类PersonBean.java

package org.guo.ejb.bean;

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

import org.guo.ejb.remote.CheckRemote;
import org.guo.ejb.remote.PersonRemote;
import org.jboss.ejb3.annotation.Clustered;

@Remote(PersonRemote.class)
@Stateless(name="person")
@Clustered
@Interceptors({Interceptor1.class,Interceptor2.class})
public class PersonBean implements PersonRemote {
	
	
	@EJB(beanName="check")
	private CheckRemote check;
	
	public void hello(String userName) {
		System.out.println(userName + "你好");
	}
	
	public void run(int age) {
		System.out.println("我的年龄是" + age);
	}
	
	public void methodForward() {
		System.out.println("测试获取EJB对象 方法调用结果为 --" + check.doCheck());
	}
	
	@AroundInvoke
	public Object mySelfInterceptor(InvocationContext ctx) throws Exception{
		System.out.println("这是我业务类中自己定义的拦截器...");
		return ctx.proceed();
	}
}

 

实现类CheckBean.java

package org.guo.ejb.bean;

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

import org.guo.ejb.remote.CheckRemote;

@Remote(CheckRemote.class)
@Stateless(name="check")
public class CheckBean implements CheckRemote {

	public String doCheck() {
		String msg = "执行必要检查....";
		return msg;
	}

}

 

   客户端测试程序

package org.guo.ejb;

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;

import org.guo.ejb.remote.PersonRemote;


public class TestEJB {
	public static void main(String[] args) throws Exception{
		String providerUrl = "10.10.62.133:1099,10.10.62.193:1099";
		String factoryInit =  "org.jnp.interfaces.NamingContextFactory";
		Hashtable<String, String> env = new Hashtable<String, String>();
		env.put(Context.INITIAL_CONTEXT_FACTORY, factoryInit);
		env.put(Context.PROVIDER_URL, providerUrl);
		Context ctx = new InitialContext(env);
		PersonRemote personRemote = (PersonRemote)ctx.lookup("person/remote");
		
		personRemote.run(23);
		personRemote.methodForward();
		
	}

}

 

 需要注意的问题:
(1)在实现类上写Remote标签时,如果标签括号内不写xxx.class 则在调用ejb lookup强转后会有类型转换错误。
(2)在jboss下如果ejb应用打包为ear包则发布的路径为 <应用>/<公布的接口名>/remote,如果是jar的方式直接部署则为<公布的接口名>/remote 或者 <公布的接口名>
(3)不同的服务器发布的jndi名称是不相同的,jboss是(2)这种写法  而weblogic则是 xxxx#xxx 类似于这种
(4)jboss下 Stateless注解括号内如果是写name="hello" 则绑定的jndi名称为 hello/remote 如果是mappedName="hello" jndi名称为 "hello" 当前这两个属性和jndi名称的关系没
搞太明白,不同的容器实现也不同,在EJB In Action 一书 3.2.2 Using the @Stateless Annotation 中有段说明可以参考一下
:::
As we know, the @Stateless annotation marks the  BidManagerBean  POJO as a Stateless 
Session Bean. Believe it or not, other than marking a POJO for the purposes of making the container 
aware of its purpose, the annotation really does not do very much else. The specification of the  
 
@Stateless annotation is as follows: 
@Target(TYPE) @Retention(RUNTIME) 
public @interface Stateless { 
    String name() default ""; 
       String mappedName() default ""; 
   String description() default ""; 
 
} 
 
The single parameter,  name, specifies the name of the Bean. Some containers use this parameter 
to bind the EJB to the global JNDI tree. Recall that JNDI is essentially the application server’s 
managed resource registry. All EJBs automatically get bound to JNDI as soon as they catch the 
container’s watchful eye. You will see real use of the  name parameter in Chapter 11 when we discuss 
deployment descriptors. In Listing 3.1, the Bean name is specified to be ‘BidManager’. As the 
annotation definition shows, the  name parameter is optional since it is defaulted to an empty 
String. We could easily omit it as follows: 
@Stateless 
public class BidManagerBean implements BidManager { 
If the  name parameter is omitted, the container assumes that the bean name should be set to the 
name of the Class. In this case, the Bean name would be assumed to be ‘BidManagerBean’. The 
mappedName  is a vendor specific name that you can assign to your EJB, some containers such as 
Glassfish application server uses this name to assign the global JNDI name for the EJB. As we noted, 
the  BidManagerBean implements a business interface named BidManager . Although we’ve 
touched on the idea of a business interface, we haven’t really dug very deep into the concept. This is a 
great time to do exactly that.

:::

(5)jndi调用时url别写顺手写成http
(6)关于EJB的集群@Clustered、拦截器@Interceptors的使用,请参见本博客其他文章
(7)@EJB标签的作用就是为了多个EJB服务之间的相互调用引进的。
分享到:
评论

相关推荐

    EJB3.0入门经典(PDF)

    《EJB3.0入门经典》是关于EJB 3.0的专业技术教程,从实用的角度出发,理论联系实际,用9章的篇幅详细讲解了EJB 3.0开发的方法和技巧。《EJB3.0入门经典》内容丰富,讲解由浅入深,全面系统,在讲解EJB 3.0最新开发...

    《EJB 3.0入门经典》 源码

    《EJB 3.0入门经典》是一本专门介绍EJB 3.0的著作,由黎活明编著。这本书深入浅出地讲解了EJB 3.0的基本概念、设计模式和实际应用,旨在帮助读者快速掌握这一技术。源码是书中理论知识的实践展现,提供了丰富的实例...

    ejb3.0入门图文教程

    6. **容器管理的事务(Container-managed Transactions)**:EJB容器自动管理事务,开发者无需关心事务的开始、提交、回滚等细节,只需通过`@TransactionAttribute`来设定事务属性。 7. **安全性**:EJB 3.0允许...

    EJB3.0入门图文教程

    EJB3.0入门图文教程电子书,Jbuilder 2007,新版JBuilder2007基于Eclipse平台,与以往的JBuilder版本完全不 同.借助于Eclipse的开放平台以及丰富的插件,使得JBulider对当前的流行的框架支持非 常好,同时支持EJB3.0的...

    ejb3.0入门经典.rar

    ejb3.0入门经典.rarejb3.0入门经典.rarejb3.0入门经典.rarejb3.0入门经典.rarejb3.0入门经典.rarejb3.0入门经典.rarejb3.0入门经典.rar

    EJB 3.0 入门经典源码part1

    EJB 3.0 入门经典源代码part1 共5卷

    EJB3.0入门教程 PDF

    4. **配置部署描述符** - 尽管EJB 3.0减少了XML配置,但仍然需要一个简单的`ejb-jar.xml`文件来声明Bean的基本信息。 5. **打包和部署** - 打包EJB项目为`.ear`文件,然后将其放入JBOSS的部署目录。 6. **启动JBOSS*...

    EJB3入门例子

    2. **持久化框架(Persistence Framework)**:EJB3引入了JSR-220规范的JPA(Java Persistence API),使得对象关系映射变得更加简单。通过`@Entity`、`@Table`、`@Id`等注解,开发者可以直接在Java类上定义数据模型...

    EJB3.0(入门教程+最新教程+文档+应用开发详解+编程实例(源代码)).rar

    1. **EJB3.0入门教程**: EJB3.0入门教程通常会涵盖以下几个核心概念: - **实体Bean(Entity Beans)**:代表持久化数据的对象,EJB3.0引入了JPA(Java Persistence API),通过注解可以直接将普通Java类映射为...

    一个EJB项目入门例程

    **EJB(Enterprise JavaBeans)**是...通过这个入门例程,你将学习到如何创建和配置EJB组件,如何在Java EE环境中部署和测试它们,以及如何编写客户端代码来调用EJB服务。这将为你进一步深入Java EE开发打下坚实基础。

    EJB3.0入门经典_完整版02

    EJB3.0入门经典完整版,于网上搜集,分享与大家。文件较大,分3部分上传。

    EJB3.0入门经典_完整版03

    EJB3.0入门经典完整版,于网上搜集,分享与大家。文件较大,分3部分上传。

    ejb3.0入门经典教程及源码

    本光盘是配书CD-ROM光盘,其中包括黎活明的入门教程、sourcecode、“软件”两个文件夹、ejb-3_0-fr-spec-ejbcore.pdf、 ejb-3_0-fr-spec-persistence.pdf、ejb-3_0-fr-spec-simplified.pdf。两个演示文档以及mysql-...

    EJB 3.0入门经典 源码

    本书是关于EJB 3.0的专业技术教程,从实用的角度出发,理论联系实际,用9章的篇幅详细讲解了EJB 3.0开发的方法和技巧。  本书内容丰富,讲解由浅入深,全面系统,在讲解EJB 3.0最新开发技术的同时,精心设计了与...

    《EJB3.0入门经典》的精简版.pdf

    这本书《EJB3.0入门经典》的精简版,作为EJB基础学习的资料,通过经典实例帮助初学者理解EJB的核心概念和技术。 1. **EJB概述** EJB是Java EE(Java Platform, Enterprise Edition)的一部分,用于处理企业级应用...

    EJB的入门教材.htm

    EJB的入门教材.htm

    EJB3.0入门经典源代码.part1

    本书是关于EJB 3.0的专业技术教程,从实用的角度出发,理论联系实际,用9章的篇幅详细讲解了EJB 3.0开发的方法和技巧。  本书内容丰富,讲解由浅入深,全面系统,在讲解EJB 3.0最新开发技术的同时,精心设计了与...

    EJB3入门

    **EJB3入门** Enterprise JavaBeans(EJB)是Java EE平台的核心组件之一,用于构建企业级分布式应用程序。EJB3是EJB规范的一个重要版本,它极大地简化了开发过程,降低了EJB技术的门槛,使得更多的开发者能够利用...

    EJB的入门教材.pdf

    EJB(Enterprise JavaBeans)是Java EE(Java Platform Enterprise Edition)平台中...由于提供的【部分内容】部分并没有实际内容,因此具体的知识点细节无法展开,但以上提及的点应足以涵盖EJB入门教材的主要内容。

Global site tag (gtag.js) - Google Analytics