【使用JBoss 7进行Java EE 6开发】开发部署调用EJB

开发工具:Eclipse LUMA(需安装了Oracle Java EE 6)
JBoss版本:jboss-as-web-7.0.2.Final

下面是开发步骤,在JBoss 7中开发部署EJB还是比较简单的。
读者需已正确安装上述软件平台,并掌握了创建Web 工程及开发Servlet的能力。


1.创建Web工程

选择Project -> New -> Dynamic Web project
创建一个Web项目,创建好项目后,写一个Servlet,等会要用这个Servlet来调用EJB(EJB不可以在main方法中测试)


2.创建EJB工程

选择Project -> New -> EJB Project
输入项目名称:TestEJB
并在EJB版本处选择3.1
点击两次Next,这里很重要,我们必须生成 ejb-jar.xml
在生成ejb-jar.xml的复选框打上勾
技术分享

点击Finish完成。


3.创建EJB接口

在TestEJB项目中,创建一个HelloRemote接口以及一个继承了此接口并实现了的类Hello,Hello需标注元注释,代码如下:
HelloRemote.java

package com.ex;

public interface HelloRemote {
    public void setName(String name);
    public String sayHello();

}

Hello.java

package com.ex;

import javax.ejb.Remote;
import javax.ejb.Stateless;

@Stateless(name="hello")
@Remote(HelloRemote.class)
public class Hello implements HelloRemote{

    private String name = "";

    @Override
    public void setName(String name) {
        // TODO Auto-generated method stub
        this.name = name;

    }

    @Override
    public String sayHello() {
        // TODO Auto-generated method stub
        return "Hello,"+name;
    }

}

最后的TestEJB组织如下:
技术分享

在JBoss服务器上运行:右键选择Run As -> Run as server
选择JBoss AS 7.0 ,Next -> Fisish
然后在控制台可看到输出信息:
技术分享

这些都是JNDI绑定的名字,我们等会用JNDI调用此EJB的时候使用其中一个就好。


4.在Servlet中调用EJB

就上述EJB 导出(export)成EJB jar,
然后将此jar放到第一步创建的Web工程中WebContent/WEB-INF/lib文件夹下,
在Servlet中通过JNDI调用EJB,部分代码如下:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        HelloRemote firstEjb = lookupRemoteStatelessEjbBean();
        firstEjb.setName("world");
        System.out.println(firstEjb);
        String s = firstEjb.sayHello();
        System.out.println(s);
        Writer writer = response.getWriter();
        writer.write(s);
    }

    private static HelloRemote lookupRemoteStatelessEjbBean() {
        // TODO Auto-generated method stub
        final Hashtable<String, String> jndiProperties = new Hashtable<String, String>();
        jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
        Context context = null;
        try {
            context = new InitialContext(jndiProperties);
        } catch (NamingException e1) {
            // TODO Auto-generated catch block
            System.out.printf("查找上下文出错");
            e1.printStackTrace();
        }
        String namespace;
        namespace = "java:global/Test3/hello!com.ex.HelloRemote";
        System.out.println(namespace);


        try {
            return (HelloRemote) context.lookup(namespace);
        } catch (NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

在Web.xml加上此Servlet的URL,访问此Servlet,可看到输出如下:
技术分享

页面和控制台都会输出 Hello World,EJB调用成功。


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。