`
lyjilu
  • 浏览: 175713 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

关于我的第一个EJB程序

    博客分类:
  • 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。应该就能看到效果。

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

分享到:
评论

相关推荐

    Spring轻量级与EJB重量级容器的比较

    描述:“我自己做的第一个文档” 标签:“容器” 部分内容:本文档旨在深入探讨Spring轻量级容器与EJB重量级容器的区别,通过对这两个概念的剖析,帮助读者理解它们在企业级应用中的不同作用与优势。 一、容器的...

    java源码包---java 源码 大量 实例

     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...

    JavaWeb程序设计任务教程第2版课后题答案

    《JavaWeb程序设计任务教程第2版》是一本深度探讨JavaWeb开发的教材,主要针对初学者和进阶者提供全面的知识覆盖。本教程通过详细解答课后习题,帮助读者深入理解JavaWeb编程的核心概念和技术。以下是相关知识点的...

    《Java程序设计》第一周学习总结.docx

    总的来说,《Java程序设计》第一周的学习让我认识到Java的历史背景、版本发展及其在不同平台的应用。未来的学习中,我需要加强基础知识的巩固,提升编程实践能力,以更好地适应Java编程的需求。

    使用Eclipse调试Java程序代码

    2. 第一个字段区域“源文件夹”默认是项目的文件夹,保持默认值。 3. 在包字段区域输入 org.eclipseguide.hello。 4. 在类名字段区域输入 HelloWorld。 5. 在“Which Method Stubs Would You Like to Create?”区域...

    java源码包2

     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    多人聊天+用户在线 21个目标文件 摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序 Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证用户登录,创建一个该...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    多人聊天+用户在线 21个目标文件 摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序 Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证用户登录,创建一个该...

    我的第一个hibernate例子

    # Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的...

    java源码包3

     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...

    java源码包4

     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...

    JAVA上百实例源码以及开源项目源代码

    多人聊天+用户在线 21个目标文件 摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序 Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证用户登录,创建一个该...

    《Java程序设计之网络编程》

    第18章J2EE规范和EJB组件模型,深入讨论了Java企业级应用的架构,包括EJB(Enterprise JavaBeans)的原理和使用,以及如何利用J2EE平台进行分布式系统的开发。 第10章线程和第11章GUI结合,可以理解多线程在GUI中的...

    我的j2ee成功之路源码第四章

    在本资源中,"我的j2EE成功之路源码第四章"显然是一份与学习和实践J2EE(Java 2 Platform, Enterprise Edition)相关的代码集合。J2EE是Java平台的一个版本,专为开发和部署企业级应用程序而设计,如Web应用、分布式...

    我的j2ee成功之路源代码_20.zip

    在IT行业中,J2EE(Java 2 Platform, Enterprise Edition)是Java平台的一个重要组成部分,专为构建企业级分布式应用程序而设计。这个压缩包“我的j2ee成功之路源代码_20.zip”显然包含了作者在学习或实践中积累的...

    Java语言程序设计-基础篇PDF

    3. **继承**:一个类继承另一个类后,可以重用父类的方法和字段,并且还可以定义自己的方法和字段。 4. **多态**:允许子类对象对父类对象进行替换的能力。多态性是通过接口实现或继承实现的。 #### 五、异常处理 ...

    我的J2EE成功之路 源代码 第四章

    在J2EE的世界里,第四章通常涵盖的关键概念和知识点是相当广泛的,它可能涉及到诸如Servlet、...通过深入学习"我的J2EE成功之路"的第四章,你可以对J2EE开发有一个全面而深入的认识,为后续的项目实践打下坚实的基础。

    好东西 这是J2EE我一个学期的作业题答案

    "1"可能代表第一部分或第一章,"ex6"可能是指第六个练习或实验,"33"、"55"和"2"可能是其他练习或主题的编号。如果它们是源代码文件,那么可能包含了实现J2EE特定功能的示例代码。 在J2EE的学习中,可能会涉及以下...

Global site tag (gtag.js) - Google Analytics