Ejb的编写方法:
1.定义Ejb接口
2.编写Ejb的实现类
3.定义Ejb的类型和Ejb的访问方式
4.部署,打成jar包---->jboss中,server--->default---->deploy
有状态Session Bean与无状态Session Bean区别
Stateless Session Bean可以暂时理解为单例(singleton)
stateful session bean可以暂时理解为prototype原型,每一次都从对象池中获得新的对象。
比如:有十个客户端,那么取得的都是不同的对象,Ejb容器要维护状态.
在一次会话过程中,无状态会话Bean不会保持其状态值.也就是说,在无状态会话Bean中,容器不会对Bean的状态进行管理。这就是它与有状态会话Bean的根本区别.
由于有状态会话Bean需要容器对其状态进行管理,所以要消耗更多的内存和性能,使用无状态会话Bean则能获得更好的性能.
package cn.itcast.ejb3; public interface HelloWorld { public String sayHello(String name); }
package cn.itcast.ejb3.impl; import javax.ejb.Remote; import javax.ejb.Stateless; import cn.itcast.ejb3.HelloWorld; @Stateless @Remote(HelloWorld.class) public class HelloWorldBean implements HelloWorld { @Override public String sayHello(String name) { return name + "说:你好,世界!"; } }
把上面的代码打成helloworld.jar仍到jboss中即可. 然后启动jboss服务器,这样客户端java应用程序就可以调用Ejb程序了! 开发EJB的客户端 package cn.itcast.test; import java.util.Properties; import javax.naming.InitialContext; import javax.naming.NamingException; import cn.itcast.ejb3.HelloWorld; public class EJBClient { public static void main(String[] agrs) { Properties props = new Properties(); props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); props.setProperty("java.naming.provider.url","localhost:1099"); try { InitialContext ctx = new InitialContext(props); HelloWorld helloworld = (HelloWorld)ctx.lookup("HelloWorldBean/remote"); System.out.println(helloworld.sayHello("佛山")); } catch (NamingException e) { e.printStackTrace(); } } } 程序所需要的jar包就是jboss-4.2.2.GA\client所有的依赖包即可
<?xml version="1.0" encoding="UTF-8"?> <project name="HelloWorld" basedir="."> <property name="src.dir" location="${basedir}\src"></property> <property environment="env" /> <property name="jboss.home" value="${env.JBOSS_HOME}"></property> <property name="jboss.server.config" value="default"></property> <property name="build.dir" value="${basedir}\build"></property> <path id="build.classpath"> <fileset dir="${jboss.home}\client"> <include name="*.jar" /> </fileset> <pathelement location="${build.dir}" /> </path> <target name="prepare"> <delete dir="${build.dir}" /> <mkdir dir="${build.dir}" /> </target> <target name="compile" depends="prepare" description="编译"> <javac srcdir="${src.dir}" destdir="${build.dir}"> <compilerarg line="-encoding UTF-8 " /> <classpath refid="build.classpath"></classpath> </javac> </target> <target name="ejbjar" depends="compile" description="创建EJB发布包"> <jar destfile="${basedir}\${ant.project.name}.jar"> <fileset dir="${build.dir}"> <include name="**/*.class" /> </fileset> </jar> </target> <target name="deploy" depends="ejbjar" description="发布ejb"> <copy file="${basedir}\${ant.project.name}.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy"></copy> </target> <target name="undeploy" description="卸载ejb"> <delete file="${jboss.home}\server\${jboss.server.config}\deploy\${ant.project.name}.jar"></delete> </target> </project>