您的位置:首页 > 编程语言 > Java开发

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

2006-11-23 17:34 507 查看
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留到下篇再讲,刚开始少少讲一点,能成功就是最大的动力.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: