用这么久的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
分享到:
相关推荐
通过学习这个"HelloWorld"示例,开发者可以快速理解EJB3.0的基础操作,并进一步探索更复杂的EJB特性和应用场景,如会话bean、消息驱动bean以及定时器服务等。实践中,结合JPA和JSF等Java EE组件,可以构建出强大的...
在这个“EJB3 Maven HelloWorld”项目中,我们将探讨如何利用Maven构建一个简单的EJB3应用程序,并在JBoss5应用服务器上运行。 首先,我们来看Maven。Maven是Java开发中的一个项目管理和综合工具,它通过使用一种...
HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote"); out.println(helloworld.SayHello("佛山人")); 5.用ant或eclipse,把客户端文件打成war包,发布到jboss上 6.输入...
- **访问URL**:通过`http://localhost:8080/helloworld/`访问应用。 #### 九、总结 通过这个简单的Hello World示例,我们可以看到Seam框架如何简化了Java Web应用程序的开发过程。从实体定义到页面处理,再到事件...
Java EJB简单例子,这是HelloWorldBean的Home接口,它是EJB对象的生成库,无状态会话(将在下一个实例中具体讲解)Bean,这个接口是客户端与EJB对象相互作用的中间途径,通过Client触发调用Bean方法: try { //...
总之,这个ejb例子程序展示了如何结合使用EJB和JPA来构建一个具备业务逻辑处理和数据持久化的Java EE应用。通过学习和理解这个示例,开发者可以深入理解这两种技术的核心概念和实际应用,为开发更复杂的分布式企业级...
把文件用weblogic部署上去,然后反编译jar中的bind类 执行主方法weblogic就有打印出hello ejb的字样了,很好的一个ejb实例。
**EJB Dev 1: EJB入门...通过学习这个EJB入门例子,你可以了解EJB的基本工作原理,为进一步深入研究Java EE和分布式系统打下坚实的基础。同时,实践操作和分析源码将加深对EJB的理解,并提升你的企业级应用开发能力。
在EJB3.0的第一个"Hello, World"项目中,我们将学习如何创建和配置一个简单的EJB组件。首先,我们需要了解EJB的基本概念。EJB分为三种类型:会话bean(Session Beans)、实体bean(Entity Beans)和消息驱动bean...
**EJB(Enterprise JavaBeans)学习指南** EJB(Enterprise JavaBeans)是Java EE平台中的核心组件,主要用于构建可扩展的、安全的、事务处理的分布式企业级应用程序。EJB技术经历了从早期版本到现代EJB 3.x的演变...
- **HelloEJB**:可能是一个会话Bean,实现一个简单的“Hello, World!”功能,展示EJB的基本用法。 - **客户端调用**:EJB的客户端可以是另一个Java应用,通过JNDI查找并调用Bean的方法。 5. **EJB的优缺点** - ...
HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote"); ``` 这里,`ctx.lookup()`方法用于根据EJB的JNDI名称查找并实例化EJB。由于在同一个JVM内,无需显式设置`InitialContext`的环境属性...
在示例中,`EJB-HelloWorld`可能包含了名为`HelloWorldLocal`的本地接口,其中定义了业务方法,如`sayHello()`。然后,在Bean类中,通过`@Local`注解声明这个接口,并实现其方法。 4. **远程接口的SessionBean** ...
在给定的示例中,我们看到一个简单的无状态会话Bean(Stateless Session Bean)`HelloWorldBean`,它实现了`HelloWorld`接口。无状态会话Bean适合处理不涉及会话状态的请求,因为它们不保存客户端之间的状态信息。在...
#### (8):JBoss EJB3(HelloWorld)备忘记 这部分提供了一个简单的HelloWorld示例,用于演示如何从头开始构建EJB项目。 总结起来,这篇教程涵盖了从配置开发环境到编写和测试Session Bean的所有基本步骤。它不仅...
在提供的`ejb3HelloWorld`示例中,我们可能看到一个简单的EJB 3.0应用,包含一个状态less session bean(如`HelloBean`)和对应的接口(如`Hello`)。这个例子通常会演示如何声明bean,如何注入依赖(如`@...
创建一个简单的EJB HelloWorld案例,我们需要以下步骤: 1. **创建EJB项目**:首先,我们需要一个支持Java EE的开发环境,如Eclipse或NetBeans,然后创建一个新的Java EE项目,并添加EJB模块。 2. **定义Bean类**...
### EJB 3.0 使用文档详解 #### 一、EJB 3.0 概述 企业 Java Beans (EJB) 是一种基于组件的企业级应用程序模型,它为开发复杂的应用程序提供了支持。EJB 3.0 版本引入了许多简化开发过程的新特性,比如对注解的...
HelloWorld hw = home.create(); ``` 5. **调用方法**:最后,通过EJB实例调用所需的方法。 ```java System.out.println(hw.hello()); ``` #### 安全到家 尽管上述步骤提供了一种基本的方法来调用EJB组件,...