2.一个EJB的小Demo

新建一个java普通项目即可

这里用到了Jboss,需要安装Jboss,然后进入jboss-4.2.3.GA\client目录,拷贝所有的jar包到本项目的lib下。

3个接口分别如下所示:

public interface Calculate {
    //计算器接口,有个加法
    public String add(Double a,Double b);

}
public interface CalculateLocal extends Calculate {
          //此接口用于实现本地化,继承父类
}
public interface Other {
        //另一个接口
    public String hello();

}

下面是两个实现类:

//此类为无状态的本地和远程的bean

@Stateless
@Remote(Calculate.class)
@Local(CalculateLocal.class)
public class CalculateImpl implements Calculate,CalculateLocal{

    /*使用其他的EJB
     * 方式一,通过注解注入
     * beanName指明要注入的是哪个ejb
     * 如果有两个类都实现了这个接口,必须要指明注入的是哪个类
     * 只有一个的话,可以不指明
     * */
    @EJB(beanName="OtherImpl")
    Other other;
    /**
     * @Resource
     * 注入资源
     * */
    //@Resource TimeService t;
    //@Resource(mappedName="java:jndi的名字") DataSource da;

    @Override
    public String add(Double a, Double b) {
        /*
         * 方式二,通过jndi查找
         *
        Properties props = new Properties();
        //设置jndi连接属性(jboss)
        props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
        //服务器的url(jboss)
        props.setProperty("java.naming.provider.url", "127.0.0.1:1099");
        try{
            InitialContext ctx = new InitialContext(props);
            Other other = (Other)ctx.lookup("OtherImpl/remote");//本地调用:CalculateImpl/local
            other.hello();
        }catch(Exception e){

        }
        */

        return "结果:"+a+b+other.hello();
    }

}
@Stateless
@Remote(Other.class)
public class OtherImpl implements Other{

    @Override
    public String hello() {
        System.out.println("hello...");
        return "hello";
    }

}

以上,服务端bean就开发好了,现在进行打包发布

右键项目-->Export-->java JAR file-->next

我们就看到了导出的jar包

任何将这个jar包放到jboss-4.2.3.GA\server\default\deploy目录下,启动jboss就可以了

下面是客户端开发

那3个接口还是要的,实现类就可以不要了,因为我们是通过远程访问服务器端的bean

public class Main {
    public static void main(String[] args) {
        Properties props = new Properties();
        //设置jndi连接属性(jboss)
        props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
        //服务器的url(jboss)
        props.setProperty("java.naming.provider.url", "127.0.0.1:1099");//本地IP
        try{
            InitialContext ctx = new InitialContext(props);
            //jndi查找 远程
            Calculate calculate = (Calculate)ctx.lookup("CalculateImpl/remote");//本地调用是:CalculateImpl/local
            System.out.println(calculate.add(12D, 45D));//调用
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
    }
}

这样,一个简单的分布式应用就部署执行成功了

时间: 2024-11-05 15:56:14

2.一个EJB的小Demo的相关文章

用backbone实现的一个MVC的小demo

一.Apache配置 本实例需要使用php支持.要现在Apache中配置虚拟目录,在Apache下的httpd-vhosts.conf文件中添加如下代码 <VirtualHost *:80> DocumentRoot "D:/htdocs/backbone_demo" ServerName www.backbonedemo.cn </VirtualHost> 在windows的hosts文件中添加配置,hosts文件的位置在c:\windows\system32

(转)一个webservice的小demo

.net平台内建了对Web Service的支持,包括Web Service的构建和使用.与其它开发平台不同,使用.net平台,你不需要其他的工具或者SDK就可以完成Web Service的开发了..net Framework本身就全面支持Web Service,包括服务器端的请求处理器和对客户端发送和接受SOAP消息的支持.下来我们就一步一步的用Microsoft Visual Studio .net 2005(后面简称VS.Net 2005)创建和使用一个简单的Web Service. we

第一个spring小demo

工作中用spring有一年多了,基本弄懂了bean配置文件的配置,但是却没有对spring配置文件,加载有更多的认识,今天动手写了第一个spring的小demo. 这个demo之前是想做web版的,但是web的启动比较麻烦,不如直接使用main方法执行直观,所以,就使用main方法来读取配置文件,启动spring. 看一下项目的结构  其中src部分是项目源码 和 配置文件applicationContext.xml WebContent 目录下面的WEB-INF/lib 目录下面存放的是spr

unity5 和UGUI的小Demo贪吃蛇

有时间学习Unity5练练手, 一个贪吃蛇小Demo 简单的2D场景, 对象都是Sprite,需要设置前后的显示层级,从蛇头到蛇尾的Order in Layer 的值是1000 递减1,所以显示的效果是具有鳞片的层叠. 蛇的每一节都有一个脚本 SnakePart.cs 记录这节的位置.方向包括计算值. 蛇没吃一个苹果,就会实例化产生一节, 其中新产生的这节上有一个新脚本 NewSnakePart.cs 主要的作用就是初始化把这节添加到蛇的末端包括初始化位置.方向. GameManager.cs

小demo原生js同步翻译,可以玩玩儿

1. 背景: 平时不知道用js写什么练手,这里就写了一个类似百度翻译的小demo.大家可以平时没事儿了看看书,写写像这种类型的小demo,调用以下公开的api即可.对于学生党,能进入学校实验室做项目更好.进不去的,平时写写小demo练练也不差.(我为什么没在实验室) 2. demo前准备工作: 页面布局 了解百度翻译API,所需配置参数 准备 MD5.js 加密算法函数(百度自己搜) 写js代码 3. 步骤: 1. 页面布局: 布局就不说了,直接贴图上代码: 可进行语言切换 html代码: <!

利用block完成回调,小demo一个

利用block完成回调,小demo一个.闲话少说,直接上代码了!O(∩_∩)O~ TestObject.h #import <Foundation/Foundation.h> typedef void (^FinishBlock)(NSString *backStr); @interface TestObject : NSObject //能进行回调的方法 - (void)playSomeTime:(FinishBlock)block; @end TestObject.m #import &q

一个小demo的开发日记(〇)

在大概两周(三周?)前,出于某些原因(w)我做了个小demo.(虽然因为各种各样的原因导致做它的时间只有一周多了…所以它还远没有完成OTL) 在目前看来,它主要的亮点啊啥的之类的东西大概可以用下面的(g)视(i)频(f)来代表w: 大概就是一个树木生长的过程,以及一个日夜交替(晚上的星星被gif几乎快压没了). (实际上才没这么点东西!但是没做完什么的TAT) 所用工具是Unity,不过为了性能全写的是Unlit Shader(按我的理解应该是不参与Unity5.x的GI(全局光照).这个Unl

javascript 跟随鼠标移动的提示框的一个小demo

下面提供一种跟随鼠标移动的提示框的思路,方便在以后工作中应用,主要是应用到鼠标移动产生的数值来进行移动提示框的定位... CSS代码   .box{height:100px;width:100px;background:orange;position:relative;margin:40px;} .move{height:20px;width:20px;background:red;position:absolute;left:0px;top:0px;display:none;} HTML代码

jQuery 中 ajax 提交数据应用的一个小demo

举一个jquery中ajax的应用小 demo 便于以后的更多项目拓展 ,这里要注意的是保存的文件名问题 ... ajax02.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="form&qu