2.一个EJB的小Demo

时间:2022-12-07 18:50:42

新建一个java普通项目即可

2.一个EJB的小Demo

这里用到了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

2.一个EJB的小Demo

2.一个EJB的小Demo我们就看到了导出的jar包

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

下面是客户端开发

2.一个EJB的小Demo

那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());
}
}
}

2.一个EJB的小Demo

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