EJB就是企业级Bean,他也是一个容器,能够很好的支持企业级的运用,他里面包含了许多。范定义了开发和部署基于事务性、分布式对象应用程序的服务器端软件组件的体系结构。所有的Enterprise Beans都需要配置到EJB服务器(一般的Weblogic、WebSphere等J2EE应用服务器都是EJB服务器)中。他EJB中定义了三种Enterprise Beans:
Ø Session Beans (Stateful /Stateless )
Ø Entity Beans (数据映射到类实例)
Ø Message-driven Beans (EJB2.0 / 异步方式处理 )
1.就是会话bean,bean分为会话和实体,而会话bean有分为有状态和无状态,实体 Bean,表示数据库中的数据,以及会话 Bean,表示进程或充当执行任务的代理程序。无状态就是创建后才出现在进程里面,由EJB自动管理他的生命周期,有状态就是一直在内存里面,要使用的时候,通过消息唤醒他,没有消息就驻留在内存里面,通常我们都是建立的无状态会话bean。
2.映射到类实例bean,一般不用,因为他是把一个数据库映射成一个对象,一条记录映射成一个类,所以要处理很多数据的时候会出现很多对象,降低运行速度,一般不用。
3.消息bean,内似于windows的消息机制,发送消息。
EJB的部署和开发
先看图:
EJB的运行方式是,首先客户端有一个接口类(这个类里面只有一个方法,没有运行方法的功能),通过这个接口类连接到home类(这个类里面只有一个创建函数),通过home类在服务器端创建一个对象,然后home类访问到remote接口,然后remote接口会在客户端创建一个副本,这个副本映射了服务器上的所有类,他是通过JNDI(java命名和目录接口服务,使用在高级网络应用开发中的。JNDI是一组API,它通过java语言为应用程序提供命名(naming)和目录(directory)功能)创建了一个类似注册表一样的空间,里面依次存放的是所有类的名字,调用所有类都是通过这个空间里面对应的名称来访问和操作。服务器端还有一个完成实际功能的类,里面有和客户端同样名字的方法,并且在该方法下写下具体完成内容。值得注意的是EJB必须打包成jar才能执行,执行的是这个包里面的内容,里面存放的是编译好的class文件,另外EJB也规定必须在类里面写出异常保护才可以被执行,这个包里面还必须得有服务器EJB得配置文件,必须有xml配置文件再META-INF目录下,配置文件必须包括2个ejb-jar.xml,(通过该配置文件找到需要的class文件)和weblogic-ejb-jar.xml(服务器不同,配置文件也不同).。EJB必须在应用服务器上发布,如weblogic,jboss或者tomcat里面发布和具体才可以被使用。同时客户端接口类文件和服务器的Home接口文件都必须考到客户端里面,完成具体功能的会话bean不用放在客户端实例如下:
文件“helloworld.java”(客户端接口类)
package world;
import javax.ejb.*;
import java.rmi.RemoteException;
public interface helloworld extends javax.ejb.EJBObject
{
//继承javax.ejb.EjbObject
//暴露了一个名为tellMe()的方法,返回值为String,抛出一个远程异常
public String tellMe() throws java.rmi.RemoteException;
}
文件“helloworldHome.java”(服务器端接口类,运行时要考到客户端)
package world;
import javax.ejb.*;
import java.rmi.*;
import javax.ejb.CreateException;
import javax.ejb.RemoveException;
public interface helloworldHome extends javax.ejb.EJBHome
{
public helloworld create() throws java.rmi.RemoteException,javax.ejb.CreateException;//创建实例
}
文件“helloworldHome.java”(服务器端会话bean)
package world;
import javax.ejb.CreateException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
public class helloworldBean implements SessionBean
{
private SessionContext cxt;
private String words;
public void setSessionContext(SessionContext cxt) {
this.cxt = cxt;
}
public void ejbCreate()
{
}
public void ejbRemove()
{
}
public void ejbActivate()
{
}
public void ejbPassivate()
{
System.out.println("ejbPassivate()");
}
public void setSessionContext(SessionContext ctx) //上下文部分,一般数据库采用
{
System.out.println("setSessionContext(sessionContext()");
}
public String tellMe() //这里才是我们自己的业务方法
{
return "wahaha,you are so happy *^__^*";
}
}
关于jdbc
首先,你的装上要使用的数据库的驱动,然后run的时候你得必须连接到数据库驱动,例如
java -classpath F:/jdbcdriver/mssqlserver.jar;F:/jdbcdriver/msbase.jar;F:/jdbcdriver/msutil.jar;. JDBC(这里的jdbc是被编译成了class的文件,也就是前面省略过build的过程),而程序中你只是通过forname()函数来指定这个数据库名字,通过名字来找到他。
例如:
文件“JDBC.java”
import java.sql.*;
class JDBC
{
public static void main(String args[]) throws Throwable
{
//动态加载类,只是取得名字,用于对应查找数据库
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection conn=null;
Statement stat=null;
try
{
//建立数据库连接
conn=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=Northwind","sa","sa");
//创建执行语句对象
stat = conn.createStatement();
//查询
ResultSet rs=stat.executeQuery("select * from Customers");
System.out.println("ID "+" ContactName " );
while(rs.next())
{
System.out.println(rs.getString(1)+" "+rs.getString("ContactName"));
}
}
catch(Exception e)
{
System.out.println("=====出错,回滚ing====");
//conn.rollback();
throw e;
}
finally
{
System.out.println("=====不管出不出错,释放连接资源ing====");
stat.close();
conn.close();
}
}
}