Õ¾ÄÚËÑË÷: ÇëÊäÈëËÑË÷¹Ø¼ü´Ê

µ±Ç°Ò³Ãæ: ¿ª·¢×ÊÁÏÊ×Ò³ ¡ú Java רÌâ ¡ú EJB3.0¿ª·¢Ö¸ÄÏÖ®ÎÞ״̬»á»°Bean

EJB3.0¿ª·¢Ö¸ÄÏÖ®ÎÞ״̬»á»°Bean

ÕªÒª: ÔÚËùÓеÄEJB3.0¹æ·¶Öж¨ÒåµÄEJB£¬¶¼²»±ØʵÏÖHome½Ó¿Ú
¡¡¡¡ÔÚËùÓеÄEJB3.0¹æ·¶Öж¨ÒåµÄEJB£¬¶¼²»±ØʵÏÖHome½Ó¿Ú¡£

¡¡¡¡Ò»¸ö»á»°Bean±ØÐëÓÐÒ»¸öÒµÎñ½Ó¿Ú£¬Õâ¸ö½Ó¿ÚÓɻỰBeanÀ´ÊµÏÖ£¬»òÕßÒ²¿ÉÒÔÓɻỰBeanÀ´²úÉú¡£ÕâÑù£¬Äã¿ÉÒÔֻдһ¸öÎļþ£¬¾Í¿ÉÒÔÉú³ÉÒµÎñÂß¼­ÊµÏÖÀà¡¢Ô¶³Ì½Ó¿Ú¡¢±¾µØ½Ó¿ÚµÈ¡£

<table borderColor=#ffcc66 width="90%" align=center bgColor=#d8d8d1 border=1> <tr> <td>¡­
@Remote
@Local
@Stateless

public class CounterBean
{
¡­¡­
}</td></tr></table>
¡¡¡¡ÔÚÄ¿Ç°jbossµÄʵÏÖÖУ¬±ØÐëÒªÓÐÒ»¸ö¶ÀÁ¢µÄÒµÎñ½Ó¿Ú¡£

¡¡¡¡Õâ¸ö½Ó¿Ú²»±ØʵÏÖEJBObject»òÕßEJBLocalObject¡£

¡¡¡¡Ò»¸öÎÞ״̬»á»°Bean ±ØÐëʹÓÃStateless×¢ÊÍ£¬ÒÔ±íÃ÷ËüÊÇÒ»¸öÎÞ״̬µÄ»á»°Bean¡£EJBÈÝÆ÷½«¸ù¾ÝÕâ¸ö×¢ÊÍÀ´Åж¨ËüµÄÀàÐÍ¡£»òÕßʵÏÖjavax.ejb.SessionBean½Ó¿Ú¡£

¡¡¡¡Ò»¸öÎÞ״̬µÄ»á»°Bean¿ÉÒÔʵÏÖsetSessionContext·½·¨£¬Ò²¿ÉÒÔ²»ÊµÏÖ¡£

¡¡¡¡Ò»¸öÎÞ״̬µÄ»á»°Bean¿ÉÒÔʵÏÖejbCreate/ejbRemove·½·¨¡£

¡¡¡¡Ò»¸öÎÞ״̬µÄ»á»°Bean¿ÉÒÔͨ¹ýÒÀÀµ×¢È루Dependency Injection£©Ò²¾ÍÊÇÏÖÔÚ³³µÃͦ»ðµÄIOC»ñÈ¡ÈÝÆ÷µÄ×ÊÔ´ºÍ»·¾³ÊôÐÔ¡£Ïêϸ½éÉÜÇë¿´ºóÃæµÄÕ½ڡ£

¡¡¡¡ÔÚEclipseÖе¼Èë±¾ÎÄÌṩµÄÀý×ÓStateless¡£

¡¡¡¡Õâ¸öÀý×ÓÊÇÒ»¸ö¼ÆÊýÆ÷µÄÀý×Ó£¬ËüʵÏÖÁËÁ½¸öÒµÎñ·½·¨addºÍgetNumber£¬add·½·¨¾ÍÊǸø¼ÆÊýÆ÷¼ÓÉÏÒ»¸öÕûÊýÖµ£¬getNumber·½·¨½«µÃµ½¼ÆÊýÆ÷µÄµ±Ç°Öµ¡£

¡¡¡¡Õâ¸öÀý×ÓÖ÷ÒªÓÐ5¸öÎļþ£º

¡¡¡¡¡¡Counter.java£ºÒµÎñ½Ó¿Ú¡£

¡¡¡¡¡¡CounterBean.java£ºÒµÎñʵÏÖÀà¡£½«À´ÎÒÃÇ¿ª·¢µÄEJBÒ²¶¼ÊÇÕâÑùÃüÃû£¨ÔÚ½Ó¿ÚÃûÉϼÓÉÏBean£©¡£

¡¡¡¡¡¡Client.java£º²âÊÔEJBµÄ¿Í»§¶ËÀà¡£
¡¡¡¡
¡¡¡¡¡¡jndi.properties£ºjndiÊôÐÔÎļþ£¬Ìṩ·ÃÎÊjdniµÄ»ù±¾ÅäÖÃÊôÐÔ¡£

¡¡¡¡¡¡Build.xml£ºant ÅäÖÃÎļþ£¬ÓÃÒÔ±àÒë¡¢·¢²¼¡¢²âÊÔ¡¢Çå³ýEJB¡£

¡¡¡¡¡¡ÏÂÃæÕë¶Ôÿ¸öÎļþµÄÄÚÈÝ×öÒ»¸ö½éÉÜ¡£

<table borderColor=#ffcc66 width="90%" align=center bgColor=#d8d8d1 border=1> <tr> <td>Counter.java
package com.kuaff.ejb3.stateless;

import javax.ejb.Remote;

@Remote

public interface Counter
{
¡¡public int add(int i);
¡¡public int getNumber();
}</td></tr></table>
¡¡¡¡Õâ¸ö½Ó¿ÚºÜ¼òµ¥£¬¶¨ÒåÁËÉÏÃæ½éÉܵÄÁ½¸öÒµÎñ·½·¨£¬Í¬Ê±£¬ÎÒÃÇΪÕâ¸ö½Ó¿Ú¼ÓÉÏÁËRemote×¢ÊÍ£¬ÕâÑùÎÒÃǵÄÔ¶³Ì¿Í»§¶Ë¾Í¿ÉÒÔͨ¹ýJNDIÃû³Æ²éÕÒµ½Ëü£¬²¢µ÷ÓÃËüµÄÒµÎñ·½·¨¡£

¡¡¡¡ËüµÄJNDIÃû³ÆÔõôÅäÖÃÄØ£¿

¡¡¡¡Äã²»±ØÅäÖÃËüµÄJNDIÃû³Æ£¬Ò²²»±ØдËüµÄÅäÖÃÎļþ¡£ÔÚJBOSSʵÏÖµÄEJB3.0ÖУ¬Äã²»±ØдÈκεÄEJB²¿ÊðÎļþºÍjboss²¿ÊðÎļþ¡£JBOSSĬÈÏʹÓýӿڵÄÈ«³Æ×÷ΪËüµÄJNDIÃû¡£ÔÚÉÏÃæµÄÀý×ÓÖУ¬ËüµÄÈ«³Æ¾ÍÊÇ£º

¡¡¡¡com.kuaff.ejb3.stateless.Counter£¬ÄãÒ²¿ÉÒÔͨ¹ýCounter.class.forName()µÃµ½¡£

<table borderColor=#ffcc66 width="90%" align=center bgColor=#d8d8d1 border=1> <tr> <td>CounterBean.java

package com.kuaff.ejb3.stateless;

import javax.ejb.Stateless;

@Stateless

public class CounterBean implements Counter
{
¡¡private int number = 0;
¡¡//¸ø¼ÆÊýÆ÷¼ÓÉÏi
¡¡public int add(int i)
¡¡{
¡¡¡¡number += i;
¡¡¡¡return number;
¡¡}

¡¡//µÃµ½µ±Ç°µÄ¼ÆÊý

¡¡public int getNumber()
¡¡{
¡¡¡¡return number;
¡¡}

}
</td></tr></table>
¡¡¡¡Õâ¸öÊǼÆÊýÆ÷µÄʵÏÖÀà¡£×¢ÒâÕâ¸öÀàʹÓÃStateless×öÁË×¢ÊÍ£¬ÕâÊDZØÐëµÄ¡£

<table borderColor=#ffcc66 width="90%" align=center bgColor=#d8d8d1 border=1> <tr> <td>Client.java

package com.kuaff.ejb3.stateless;
import javax.naming.InitialContext;
import javax.naming.NamingException;

¡¡public class Client
¡¡{
¡¡¡¡public static void main(String[] args)
¡¡¡¡{
¡¡¡¡¡¡InitialContext ctx;
¡¡¡¡¡¡try
¡¡¡¡¡¡¡¡ctx = new InitialContext();
¡¡¡¡¡¡¡¡Counter counter = (Counter) ctx.lookup(Counter.class.getName());
¡¡¡¡¡¡¡¡counter.add(10);
¡¡¡¡¡¡¡¡System.out.println("µ±Ç°µÄnumber:" + counter.getNumber());
¡¡¡¡¡¡¡¡counter.add(10);
¡¡¡¡¡¡¡¡System.out.println("µ±Ç°µÄnumber:" + counter.getNumber());
¡¡¡¡¡¡¡¡Counter counter2 = (Counter) ctx.lookup(Counter.class.getName());
¡¡¡¡¡¡¡¡counter2.add(10);
¡¡¡¡¡¡¡¡System.out.println("µ±Ç°µÄnumber:" + counter2.getNumber());
¡¡¡¡¡¡¡¡catch (NamingException e)
¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡e.printStackTrace();
¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡
¡¡¡¡¡¡}
¡¡¡¡}</td></tr></table>
¡¡¡¡Õâ¸öÀàÓÃÀ´²âÊÔÎÒÃÇ·¢²¼µÄ¼ÆÊýÆ÷EJB¡£Ê×ÏÈͨ¹ýctx = new InitialContext();µÃµ½ÉÏÏÂÎÄ£¬È»ºóͨ¹ýlookup²éÕÒ¼ÆÊýÆ÷£¬È»ºó¸ø¼ÆÊýÆ÷¼Ó10£¬ÏÔʾµ±Ç°µÄ¼ÆÊýÆ÷ÐÅÏ¢¡£

<table borderColor=#ffcc66 width="90%" align=center bgColor=#d8d8d1 border=1> <tr> <td>jndi.properties

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory

java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

java.naming.provider.url=localhost</td></tr></table>
¡¡¡¡Õâ¸öÎļþÅäÖÃÁËJNDI²Ù×÷ËùÐèµÄÊôÐÔ£¬ÒòΪÎÒÃÇÊDzâÊÔ±¾»úµÄEJB·þÎñ£¬ËùÒÔ²»±ØÐÞ¸ÄÉÏÃæµÄÊôÐÔ¡£

¡¡¡¡Build.xml

<table borderColor=#ffcc66 width="90%" align=center bgColor=#d8d8d1 border=1> <tr> <td>£¼project name="kuaff_ejb3_tutorial" default="ejbjar" basedir="."£¾

£¼property environment="env"/£¾

£¼property name="src.dir" value="${basedir}/src"/£¾

£¼property name="jboss.home" value="${env.JBOSS_HOME}"/£¾

£¼property name="build.dir" value="${basedir}/build"/£¾

£¼property name="build.classes.dir" value="${build.dir}/classes"/£¾


£¼path id="classpath"£¾

£¼fileset dir="${jboss.home}/lib"£¾

£¼include name="**/*.jar"/£¾

£¼/fileset£¾

£¼fileset dir="${jboss.home}/server/all/lib"£¾

£¼include name="**/*.jar"/£¾

£¼/fileset£¾

£¼fileset dir="${jboss.home}/server/all/deploy/ejb3.deployer"£¾

£¼include name="*.jar"/£¾

£¼/fileset£¾

£¼fileset dir="${jboss.home}/server/all/deploy/jboss-aop.deployer"£¾

£¼include name="*.jar"/£¾

£¼/fileset£¾
£¼pathelement location="${build.classes.dir}"/£¾
£¼pathelement location="${basedir}"/£¾
£¼/path£¾
£¼property name="build.classpath" refid="classpath"/£¾
£¼target name="prepare"£¾
£¼mkdir dir="${build.dir}"/£¾
£¼mkdir dir="${build.classes.dir}"/£¾
£¼/target£¾
£¼target name="compile" depends="prepare"£¾
£¼javac srcdir="${src.dir}"
destdir="${build.classes.dir}"
debug="on"
deprecation="on"
optimize="off"
includes="**"£¾
£¼classpath refid="classpath"/£¾
£¼/javac£¾
£¼/target£¾
£¼target name="ejbjar" depends="compile"£¾
£¼jar jarfile="build/StatelessSample.ejb3"£¾
£¼fileset dir="${build.classes.dir}"£¾
£¼include name="**/*.class"/£¾
£¼/fileset£¾
£¼/jar£¾
£¼copy file="build/StatelessSample.ejb3" todir="${jboss.home}/server/all/deploy"/£¾
£¼/target£¾
£¼target name="run" depends="ejbjar"£¾
£¼java classname="com.kuaff.ejb3.stateless.Client" fork="yes" dir="."£¾
£¼classpath refid="classpath"/£¾
£¼/java£¾
£¼/target£¾
£¼target name="clean.db"£¾
£¼delete dir="${jboss.home}/server/all/data/hypersonic"/£¾
£¼/target£¾
£¼target name="clean"£¾
£¼delete dir="${build.dir}"/£ ¾
£¼delete file="${jboss.home}/server/all/deploy/StatelessSample.ejb3"/£¾
£¼/target£¾
£¼/project£¾</td></tr></table>
¡¡¡¡ÇëÔËÐÐ{$JBOSS_HOME}/binĿ¼ÏµÄrun.bat: run ¨Cc all,Æô¶¯JBOSS¡£

¡¡¡¡ÔÚEclipseµÄAntÊÓͼÖÐÖ´ÐÐejbjar target¡£»òÕßÔÚÃüÁîÐÐÏ£¬½øÈëµ½´Ë¹¤³ÌĿ¼Ï£¬Ö´ÐÐant ejbjar,½«±àÒë´ò°ü·¢²¼´ËEJB¡£

¡¡¡¡ÔÚEclipseµÄAntÊÓͼÖÐÖ´ÐÐrun target¡£»òÕßÔÚÃüÁîÐÐÏ£¬½øÈëµ½´Ë¹¤³ÌĿ¼Ï£¬Ö´ÐÐant run,²âÊÔÕâ¸öEJB¡£



¡ü·µ»ØĿ¼
ǰһƪ: EJB3.0¿ª·¢Ö¸ÄÏÖ®ÓÐ״̬»á»°Bean
ºóһƪ: J2SE5.0ÐÂÌØÐÔÖ®ProcessBuilder