JAVA 从零开始EJB3 从配置到开发(二) 体验篇 (图)

JAVA 从零开始EJB3 从配置到开发(二) 体验篇
    本系列教程的目的是将读者引入EJB3的开发大门,写出可以运行的东西出来.期间并无太多理论的东西,主要是实践操作步骤,希望读者能在"运行成功"的喜悦和鼓励中,对原有的代码进行加工,改造,达到融会贯通的目的.对于某些偏难的技术,我鼓励大家敢于"不求甚解",不要钻底层的具体实现,达到能用,会用,实用即可.
    上篇我们讲了怎么搭建开发环境,本篇就带领大家快速体验一下写出第一个EJB3程序的快乐,并鼓励大家继续前进,EJB3并不难.
    首先我们打开Eclipse,点击界面右上角图标,更换视图到JBoss AS视图
    如图:13

    然后我们点击新建->工程,建立一个EJB3的工程
    如图:1

    按下一步,直到选择服务器页面
    如图:2

    点击建立服务器按钮,出现选择服务器类型页面
    如图:3

    选择JBoss Inc->JBoss AS 4.0,然后根据上次所讲的内容,按照自己安装的路径填写
    如图:4

    实例名填写JBoss4
    如图:5

    然后就可以选择刚刚建立的服务器,并完成工程的设置了
    如图:6

    刚刚建立的工程结构
    如图:7

    接下来我们来建立第一个EJB程序,今天我们讲的是最简单的stateless bean,我们选择新建->其他->EJB3.0->session bean
    如图:8

    包名为com.sdna.session,bean名为HelloWorld
    如图:9

    建立完session bean后我们来建立测试类,建立一个含有main函数的类,包名com.sdna.client,类名为Main
    如图:10

    然后我们在工程根目录建立一个ANT文件,就是一个XML文件,名为build.xml,建立完后整个工程如下
    如图:11

    各文件代码如下
==========HelloWorld.java
package com.sdna.session;

import javax.ejb.Remote;

@Remote
public interface HelloWorld {
    public String sayHello( String strMsg );
}

====================
==========HelloWorldBean.java
package com.sdna.session;

import javax.ejb.Stateless;
import com.sdna.session.HelloWorld;

public @Stateless class HelloWorldBean implements HelloWorld {

    public String sayHello(String strMsg) {
        // TODO Auto-generated method stub
        System.out.println( strMsg );
       
        return "Hello World!";
    }

}

====================
==========Main.java
package com.sdna.client;

import java.util.Properties;

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

import com.sdna.session.HelloWorld;

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        InitialContext ctx;
        Properties props = new Properties();
       
        props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
        props.setProperty("java.naming.provider.url", "127.0.0.1:1099");
        props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
       
        try {
             ctx = new InitialContext(props);
             HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");
             System.out.println( helloworld.sayHello("msg hello!") );
        } catch (NamingException e) {
             System.out.println(e.getMessage());
        }

    }

}

====================
==========build.xml
<?xml version="1.0"?>
<project name="JBoss" default="ejbjar" basedir=".">
 <property name="project.name" value="ejb3lesson2" />
 <property environment="env" />
 <property name="jboss.home" value="${env.JBOSS_HOME}" />
 <property name="classes.dir" value="bin" />

 <path id="classpath">
  <fileset dir="${jboss.home}/client">
   <include name="**/*.jar" />
  </fileset>
  <pathelement location="${classes.dir}" />
 </path>
 
 <target name="clean">
  <delete file="${basedir}/${project.name}.jar" />
  <delete file="${jboss.home}/server/default/deploy/${project.name}.jar" />
 </target>
 
 <target name="ejbjar" depends="clean">
  <jar jarfile="${project.name}.jar">
   <fileset dir="${classes.dir}">
    <include name="**/*.*" />
   </fileset>
  </jar>
  <copy file="${project.name}.jar" todir="${jboss.home}/server/default/deploy" />
 </target>

</project>
====================
    我们在左下脚可以看到服务器信息,启动它
    如图:12

    然后点击build.xml,右键,选择run as->ant build,对我们写的程序进行打包,并部署到JBoss服务器,JBoss服务器支持热部署,所以不用重新启动它就能完成部署
    然后我们点击Main.java,右键,右键,选择run as->java appliction,可以看到Console的运行结果
    如图:15

    我们点击Console窗口右上角,选择JBoss的Console,可以看到我们写在session bean里面那句语句的执行结果
    如图:14

    如果上述运行成功,我们接下来在胜利的喜悦中看看其中的一些奥秘
    从头看起,首先我们看我们建立的HelloWorld接口
@Remote
public interface HelloWorld {
    public String sayHello( String strMsg );
}

    @Remote这个注释表明这个借口支持远程调用

    我们再来看看HelloWorldBean这个实现类,它实现了HelloWorld接口定义的方法

public @Stateless class HelloWorldBean implements HelloWorld {

    public String sayHello(String strMsg) {
        // TODO Auto-generated method stub
        System.out.println( strMsg );
       
        return "Hello World!";
    }

}
    这里的@Stateless表明这个bean是没有状态的,也就是说这个实例运行完毕后就要被自动销毁的

    我们接下来看怎么调用EJB的,我们看Main这个测试类
    InitialContext ctx;
        Properties props = new Properties();
       
        props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
        props.setProperty("java.naming.provider.url", "127.0.0.1:1099");
        props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
       
        try {
             ctx = new InitialContext(props);
             HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");
             System.out.println( helloworld.sayHello("msg hello!") );
        } catch (NamingException e) {
             System.out.println(e.getMessage());
        }

    InitialContext 是javax.naming下的一个类,用来做JNDI调用的 Properties为属性类,给我们建立调用时设置的属性,ctx.lookup("HelloWorldBean/remote");这个是JNDI根据名字来请求一个HelloWorldBean类的实例,支持remote
    传送回来的对象我们用HelloWorld借口来保存和使用它,接下来的就跟普通java编程一样了,怎么样,是不是很简单呢,短短几十行代码,我们就走进了EJB3的大门啦~呵呵~~~
    下次我们来讲Statefull bean,同样也不难,ant留到下篇再讲,刚开始少少讲一点,能成功就是最大的动力.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值