ejb+jboss入门示例

1、下载jboss:http://www.jboss.org/jbossas/downloads/
     本项目的jboss版本是:6.1.0.Final   jboss-as-distribution-6.1.0.Final.zip

2、配置jboss环境变量:JBOSS_HOME= E:webServerjboss-as-distribution-6.1.0.Final

                                path添加jboss路径:;%JBOSS_HOME%in

     在E:webServerjboss-as-distribution-6.1.0.Finalin目录下,点run.bat,或者在cmd中输入run,如果不出现异常,说明配置成功。

3、Myeclipse安装jboss,  选择 jboss-home-directory  的路径: E:webServerjboss-as-distribution-6.1.0.Final ,这里注意不能带bin目录

     找到JBOSS  的 Paths  :   appendto classpath  --  ADD DIR 添加jboss的bin目录:E:webServerjboss-as-distribution-6.1.0.Finalin

     (另:其改jboss端口 在D:jboss-4.2.3.GAserverdefaultdeployjboss-web.deployerserver.xml中将8080改为其它)

    4、创建一个EJB服务端项目:ejbdemo , 导入ejb注解所需要的包:jboss-ejb3-ext-api.jar 和 jboss-ejb3-ext-api-impl.jar

写一个接口MyEjb和实现类MyEjbImpl,如下:

MyEjb.java:

package demo.myejb.service;

public interface MyEjb {
    
    public String hello();

}
 MyEjbImpl.java:
package demo.myejb.service.impl;


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

import org.jboss.ejb3.annotation.RemoteBinding;

import demo.myejb.service.MyEjb;

@Stateless   //无状态会话bean
@Remote({MyEjb.class})  //指定远程调用 的接口类  该注解在javaee.jar中
////@Local({MyEjb2.class}) // 指定本地调用 的接口类 , 两个项目需在一个VM上方可调用 @RemoteBinding(jndiBinding="helloRemote") //给jndi取别名,本类的jndi默认名称是:MyEjbImpl/remote , 该注解在jboss-ejb3-ext-api.jar中
////@LocalBinding(jndiBinding="hello2Local") //给jndi取别名,默认是:MyEjbImpl/local
public class MyEjbImpl implements MyEjb { public String hello() { System.out.println("ejb demo print .... "); return "ejb demo!"; } }

5、将ejbdemo服务端项目中的接口类MyEjb.java打包 :  myejb.jar , 客户端调用接口时会用到该包

6、创建客户端项目:ejbclient

7、在src目录下创建jndi.properties文件,内容如下:

# DO NOT EDIT THIS FILE UNLESS YOU KNOW WHAT YOU ARE DOING

###new factory name远程实例化工厂的名字
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory

##remote package path远程调用类的包路径

java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

###remote class server path调用类的服务器路径

##localhost:8080 is not run  , must locahost
java.naming.provider.url=localhost

8、将E:webServerjboss-as-distribution-6.1.0.Finalclient目录下的jar全部导入进来,且把刚才打包的接口:myejb.jar导入进来

9、编写main测试调用接口:

package ejb.test;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

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

import demo.myejb.service.MyEjb;



public class EjbClient {
    public static void main(String[] args) {        
        try {
            
            Hashtable map = new Hashtable();
            map.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
            map.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
            map.put("java.naming.provider.url", "localhost");
            
            //相当于beanfactory 实例化封装的类
            InitialContext ic = new InitialContext(map);
            
            /**
             * 实例InitialContext有两种方式
             * 1、将属性值放到Hashtable中,传进去new InitialContext(map);
             * 2、在src下创建jndi.properties文件,将属性保存在Propertis文件中 ,直接 new InitialContext();即可
             */
            
            //得到远程的MyEjbImpl类,MyEjbImp/remote是服务器中MyEjb和MyEjbImpl的发布的Jndi名称
//            MyEjb tg =(MyEjb) ic.lookup("MyEjbImpl/remote");
            MyEjb client =(MyEjb) ic.lookup("helloRemote");
            String ss = client.hello() ; //远程调用EJB服务端的方法
            
            System.out.println("====="+ss);
            
        } catch (NamingException e) {
            e.printStackTrace();
        }
        
        
    }

}

10、运行main方法,会输出:==ejb demo

原文地址:https://www.cnblogs.com/summer520/p/3175214.html