关于我的第一个EJB程序

 先前是看了传智博客的EJB视频,然后又看了下《精通EJB3》都是用的注释方式,我本人不喜欢注释方式,所以就花了部分时间去查看了下有关注释方面的内容,最后终于将注释的改成了ejb-jar.xml配置文件方式。所做的大概有 有状态bean、无状态bean、会话bean、消息驱动bean、简单JPA操作几个方面。

环境:Jboss 5.1 Mysql 5.1 jdk1.6

 今天就把我的第一个无状态bean先写下来,由于上班没时间。所以在附件里长传全部代码;

1、创建项目,建立好各个目录后,将JBOSS中的client里面jar引入进项目,配置好Jboss数据源

 

2、编写ant的build.xml文件,

<?xml version="1.0" encoding="UTF-8"?>
<!-- ====================================================================== 
     2010-7-17 下午02:10:44                                                        

     HelloBean    
     description
                   
     lyjBack                                                                
     ====================================================================== -->
<project name="EJB001" default="deploy" basedir=".">
	<property name="src.dir" value="${basedir}\src" />
	<property environment="env" />
	<property name="jboss.home" value="${env.JBOSS_HOME}" />
	<property name="jboss.server.config" value="default" />
	<property name="build.dir" value="${basedir}\build" />
	<path id="build.classpath">
		<fileset dir="${jboss.home}\client">
			<include name="*.jar" />
		</fileset>
		<pathelement path="${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}" classpathref="build.classpath">
		</javac>
	</target>
	<target name="ejbjar" depends="compile" description="创建ejb包">
		<jar jarfile="${basedir}\${ant.project.name}.jar">
			<fileset dir="${build.dir}">
				<include name="**/*.class" />
			</fileset>
			<metainf dir="${src.dir}\META-INF">
			</metainf>
		</jar>
	</target>
	<target name="deploy" depends="ejbjar" description="发布">
		<copy file="${basedir}\${ant.project.name}.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy" />
	</target>
	<target name="undeploy" description="卸载ejb">
		<delete file="${jboss.home}\server\${jboss.server.config}\deploy\${ant.project.name}.jar" />
	</target>
</project>

   这里要注意的是:

               1>build.xml中用到环境变量的一定在环境变量里面已经配置。

               2>eclipse配置中,默认有集中提醒没选中,所以,得到eclipse配置ant配置中把problems的部分勾上。

 

3、编写bean接口

/**
 * 
 */
package com.lyj.ejb.stateless;

/**
 * @author lyjBack
 *
 */
public interface Hello {
	public String hello(String name);
}

 

      编写实现远程接口的bean

 

/**
 * 
 */
package com.lyj.ejb.stateless.impl;

import com.lyj.ejb.stateless.Hello;

//import javax.ejb.Local;
//import javax.ejb.Remote;
//import javax.ejb.Stateless;

/**
 * @author lyjBack
 *
 */
//@Stateless
//@Remote(Hello.class)
public class HelloBean implements Hello{

	/* (non-Javadoc)
	 * @see com.lyj.ejb.stateless.Hello#hello()
	 */
	public String hello(String name) {
		return name+"说:hello world";
	}
}

      其中注释部分我没删除,只是注释起来。

 

4、写ejb-jar.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
	      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
		  http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
	      version="3.0">
	<enterprise-beans>
<!-- CountBean  -->
	<session>
      <ejb-name>CountBean</ejb-name>
      <business-remote>com.lyj.ejb.stateful.Count</business-remote>
      <ejb-class>com.lyj.ejb.stateful.impl.CountBean</ejb-class>
      <session-type>Stateful</session-type>
      <remove-method>
      	<bean-method>
      		<method-name>remove</method-name>
      	</bean-method>
      </remove-method>
      <transaction-type>Container</transaction-type>
    </session>
<!-- HelloBean  -->
    <session>
  	  <ejb-name>HelloBean</ejb-name>
      <business-local>com.lyj.ejb.stateless.HelloLocal</business-local>
      <business-remote>com.lyj.ejb.stateless.Hello</business-remote>
      <ejb-class>com.lyj.ejb.stateless.impl.HelloBean</ejb-class>
      <session-type>Stateless</session-type>
      <transaction-type>Container</transaction-type>
    </session>
<!-- UserServiceBean  -->  
    <session>
  	  <ejb-name>UserServiceBean</ejb-name>
      <business-remote>com.lyj.ejb.service.UserService</business-remote>
      <ejb-class>com.lyj.ejb.service.impl.UserServiceBean</ejb-class>
      <session-type>Stateless</session-type>
      <transaction-type>Container</transaction-type>
    </session>
	<message-driven>
		<ejb-name>LogBean</ejb-name>
        <ejb-class>com.lyj.ejb.jms.queue.LogBean</ejb-class>
        <transaction-type>Container</transaction-type>
        <activation-config>
        	<activation-config-property>
        		<activation-config-property-name>destinationType</activation-config-property-name>
        		<activation-config-property-value>javax.jms.Queue</activation-config-property-value>
        	</activation-config-property>
        	<activation-config-property>
        		<activation-config-property-name>destination</activation-config-property-name>
        		<activation-config-property-value>queue/lyjQueue</activation-config-property-value>
        	</activation-config-property>
        </activation-config>
        <pre-destroy>
        	<lifecycle-callback-method>remove</lifecycle-callback-method>
        </pre-destroy>
	</message-driven>
	<message-driven>
		<ejb-name>LogBeanFirst</ejb-name>
        <ejb-class>com.lyj.ejb.jms.topic.LogBeanFirst</ejb-class>
        <transaction-type>Container</transaction-type>
        <activation-config>
        	<activation-config-property>
        		<activation-config-property-name>destinationType</activation-config-property-name>
        		<activation-config-property-value>javax.jms.Topic</activation-config-property-value>
        	</activation-config-property>
        	<activation-config-property>
        		<activation-config-property-name>destination</activation-config-property-name>
        		<activation-config-property-value>topic/lyjTopic</activation-config-property-value>
        	</activation-config-property>
        </activation-config>
        <pre-destroy>
        	<lifecycle-callback-method>remove</lifecycle-callback-method>
        </pre-destroy>
	</message-driven>
	<message-driven>
		<ejb-name>LogBeanSecond</ejb-name>
        <ejb-class>com.lyj.ejb.jms.topic.LogBeanSecond</ejb-class>
        <transaction-type>Container</transaction-type>
        <activation-config>
        	<activation-config-property>
        		<activation-config-property-name>destinationType</activation-config-property-name>
        		<activation-config-property-value>javax.jms.Topic</activation-config-property-value>
        	</activation-config-property>
        	<activation-config-property>
        		<activation-config-property-name>destination</activation-config-property-name>
        		<activation-config-property-value>topic/lyjTopic</activation-config-property-value>
        	</activation-config-property>
        </activation-config>
        <pre-destroy>
        	<lifecycle-callback-method>remove</lifecycle-callback-method>
        </pre-destroy>
	</message-driven>
  </enterprise-beans>
  
  <interceptors>
  	<description></description>
  	<interceptor>
  		<interceptor-class>com.lyj.ejb.stateful.CountCallbacks</interceptor-class>
  		<post-construct>
  			<lifecycle-callback-method>construct</lifecycle-callback-method>
  		</post-construct>
  		<pre-destroy>
  			<lifecycle-callback-method>destroy</lifecycle-callback-method>
  		</pre-destroy>
  		<post-activate>
  			<lifecycle-callback-method>activate</lifecycle-callback-method>
  		</post-activate>
  		<pre-passivate>
  			<lifecycle-callback-method>passivate</lifecycle-callback-method>
  		</pre-passivate>
  	</interceptor>
  </interceptors>
  <assembly-descriptor>
  	<interceptor-binding>
  		<ejb-name>CountBean</ejb-name>
  		<interceptor-class>com.lyj.ejb.stateful.CountCallbacks</interceptor-class>
  	</interceptor-binding>
  </assembly-descriptor>
</ejb-jar>

   

 由于所有的配置都在这

 

5、编写EJB客户测试类

/**
 * 
 */
package com.lyj.ejb.client;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import com.lyj.ejb.stateless.Hello;

/**
 * @author lyjBack
 *
 */
public class EJBClient {

	/**
	 * @param args
	 * @throws NamingException 
	 */
	public static void main(String[] args) throws NamingException {
		Context ctx = new InitialContext();
		Hello hello = (Hello) ctx.lookup("HelloBean/remote");
		System.out.println(hello.hello("JAVA EE"));
	}
}

 

6、编写EJB容器的jndi信息,如果是用Jboss5.1,那么就这样写

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost:1099 

 

7、然后基本就完了,运行build.xml,然后启动Jboss。应该就能看到效果。

如果不想做第四步。那么就将代码中注释元数据的注释删除,应该就也能运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值