EJB 3 学习例子 HelloWorld 小程序(使用JNDI)

用这么久的EJB 3 .0 过去一直用EJB1.x 和 EJB 2.x 今天写了一个EJB 3 的小程序。在这里与大家分享一下

 

实现的功能就是在在内存中CRUD 操作

 

Step 1: Define a common interface(定义一个普通接口)

 

 

package com.use.test;

import java.util.Collection;

import com.use.entity.Student;

public interface IStudentOperation {
	
	void addStudent(Student student);
	
	void deleteStudent(int id);
	
	void updateStudent(Student student);
	
	Collection<Student> getAll();

}

 setup 2: Definition of the remote interface and local interface (定义远程接口和本地接口)

 

 

package com.use.test;

import javax.ejb.Local;

//VM 表示不同虑拟机
//这个注解用于同一下VM
@Local
public interface IStudentOperationLocal extends IStudentOperation {

}


package com.use.test;

import javax.ejb.Remote;

//不同VM 通信时要用到RPC 方式来通信可在不同VM 中
@Remote
public interface IStudentOperationRemote extends IStudentOperation {

}

 

  当然还要定义一个测试的对象

 

package com.use.entity;

import java.io.Serializable;

@SuppressWarnings("serial")
public class Student implements Serializable {
	
	private Integer id;
	
	private String name;
	
	private String sex;
	
	private int age;
	

	public Student(Integer id, String name, String sex, int age) {
		super();
		this.id = id;
		this.name = name;
		this.sex = sex;
		this.age = age;
	}

	public Student() {
		super();
	}

	public Student(String name, String sex, int age) {
		super();
		this.name = name;
		this.sex = sex;
		this.age = age;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

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

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return super.toString()+" Student: 姓名:"+this.name+" 年龄:"+ this.age+"性别:"+this.sex;
	}
	

}

 step 3 To achieve the corresponding interfaces (实现对应的接口)

package com.use.test.impl;

import java.util.ArrayList;
import java.util.Collection;

import javax.ejb.Stateless;

import com.use.entity.Student;
import com.use.test.IStudentOperationLocal;
import com.use.test.IStudentOperationRemote;

@Stateless
public class StudentOperationImpl implements IStudentOperationLocal,
		IStudentOperationRemote {
	
	private Collection<Student> students = new ArrayList<Student>();

	@Override
	public void addStudent(Student student) 
	{
		students.add(student);
	}

	@Override
	public void deleteStudent(int id) 
	{
		
		for (Student en:students) 
		{
			if (en.getId().equals(id)) 
			{
				students.remove(en);
				return;
			}
		}

	}

	@Override
	public void updateStudent(Student student) 
	{
		
		for (Student en:students)
		{
			if (en.getId().equals(student.getId()))
			{
				en.setAge(student.getAge());
				en.setName(student.getName());
				en.setSex(student.getSex());
			}
		}

	}

	@Override
	public Collection<Student> getAll() 
	{
		return this.students;
	}

}

 

 

step 4 Preparation of test class 编写测试类

package com.use.test.client;

import java.util.Collection;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;

import com.use.entity.Student;
import com.use.test.IStudentOperationRemote;

public class Client {
	
	public static void main(String args[]) throws Exception 
	{
		
		Context ctx = null;
		String url = "jnp://localhost:1099";
		String purl = "org.jboss.naming:org.jnp.interfaces";
		String fcy = "org.jnp.interfaces.NamingContextFactory";
		Properties ps = new Properties();
		ps.put(Context.INITIAL_CONTEXT_FACTORY, fcy);
		ps.put(Context.PROVIDER_URL, url);
		ps.put(Context.URL_PKG_PREFIXES, purl);
		ctx = new InitialContext(ps);
		
		IStudentOperationRemote studentOperationRemote = null;
		
		Object h = ctx.lookup("StudentOperationImpl/remote");
		studentOperationRemote = (IStudentOperationRemote)PortableRemoteObject.narrow(h, IStudentOperationRemote.class);
		int count = 0;
		for (int i = 0 ; i < 7 ; i++)
		{
			Student student = new Student(i,"Liuqing" + i,"Usb" + i,i + 20);
			System.out.println("Count:" + count);
			studentOperationRemote.addStudent(student);
			count++;
		}
		Collection<Student> students  = studentOperationRemote.getAll();
		for (Student en:students) 
		{
			System.out.println("Spring+Ejb :"+en.toString());
		}
		
	}

}

  

 在运行就OK 注意思要先将对应的内容部署到JBOSS 服务器上才行

 

17:06:53,546 INFO  [JBossASKernel] Created KernelDeployment for: UsbHelloWorld.jar
17:06:53,546 INFO  [JBossASKernel] installing bean: jboss.j2ee:jar=UsbHelloWorld.jar,name=StudentOperationImpl,service=EJB3
17:06:53,546 INFO  [JBossASKernel]   with dependencies:
17:06:53,546 INFO  [JBossASKernel]   and demands:
17:06:53,546 INFO  [JBossASKernel] 	jboss.ejb:service=EJBTimerService
17:06:53,546 INFO  [JBossASKernel]   and supplies:
17:06:53,546 INFO  [JBossASKernel] 	jndi:StudentOperationImpl/local-com.use.test.IStudentOperationLocal
17:06:53,546 INFO  [JBossASKernel] 	jndi:StudentOperationImpl/local
17:06:53,546 INFO  [JBossASKernel] 	jndi:StudentOperationImpl/remote
17:06:53,546 INFO  [JBossASKernel] 	jndi:StudentOperationImpl/remote-com.use.test.IStudentOperationRemote
17:06:53,546 INFO  [JBossASKernel] 	Class:com.use.test.IStudentOperationLocal
17:06:53,546 INFO  [JBossASKernel] 	Class:com.use.test.IStudentOperationRemote
17:06:53,546 INFO  [JBossASKernel] Added bean(jboss.j2ee:jar=UsbHelloWorld.jar,name=StudentOperationImpl,service=EJB3) to KernelDeployment of: UsbHelloWorld.jar
17:06:53,609 INFO  [SessionSpecContainer] Starting jboss.j2ee:jar=UsbHelloWorld.jar,name=StudentOperationImpl,service=EJB3
17:06:53,609 INFO  [EJBContainer] STARTED EJB: com.use.test.impl.StudentOperationImpl ejbName: StudentOperationImpl
17:06:53,656 INFO  [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI:

	StudentOperationImpl/remote - EJB3.x Default Remote Business Interface
	StudentOperationImpl/remote-com.use.test.IStudentOperationRemote - EJB3.x Remote Business Interface
	StudentOperationImpl/local - EJB3.x Default Local Business Interface
	StudentOperationImpl/local-com.use.test.IStudentOperationLocal - EJB3.x Local Business Interface

 

 step 5 运行结果 如果是这个结果就正常了

 

Count:0
Count:1
Count:2
Count:3
Count:4
Count:5
Count:6
Spring+Ejb :com.use.entity.Student@23e5d1 Student: 姓名:Liuqing0 年龄:20性别:Usb0
Spring+Ejb :com.use.entity.Student@c4fe76 Student: 姓名:Liuqing1 年龄:21性别:Usb1
Spring+Ejb :com.use.entity.Student@11e1e67 Student: 姓名:Liuqing2 年龄:22性别:Usb2
Spring+Ejb :com.use.entity.Student@5e176f Student: 姓名:Liuqing3 年龄:23性别:Usb3
Spring+Ejb :com.use.entity.Student@1549f94 Student: 姓名:Liuqing4 年龄:24性别:Usb4
Spring+Ejb :com.use.entity.Student@b8c8e6 Student: 姓名:Liuqing5 年龄:25性别:Usb5
Spring+Ejb :com.use.entity.Student@18d9850 Student: 姓名:Liuqing6 年龄:26性别:Usb6

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值