Jboss EJB实现实例

来源:互联网 发布:白夜追凶小说结局知乎 编辑:程序博客网 时间:2024/04/19 10:49

使用eclipse进行开发,创建一个普通的java工程,导入java-client.jar,这个jar包在bin/client目录下

1. 定义一个接口

public interface HelloWorldRemote {
   String sayHelloRemote();
}
2.定义一个ejb,实现这个接口,并且指定这个接口为remote接口
import javax.ejb.Remote;
import javax.ejb.Stateless;


@Stateless
@Remote(HelloWorldRemote.class)
public class HelloWorldRemoteBean implements HelloWorldRemote {


    @Override
    public String sayHelloRemote() {
        // TODO Auto-generated method stub
        
          return "say remote";


    }

}


如果指定HelloWorldRemote 为local接口,那么在remote client就无法访问这个ejb

Local接口和remote接口也不可以是同一个接口



3.导出这些class为jar包,jar包名为helloworld1,部署到jboss中
4.客户端访问这个ejb
        Properties props = new Properties();
        props.put("java.naming.factory.initial","org.jboss.naming.remote.client.InitialContextFactory");
        props.put("java.naming.provider.url", "remote://localhost:4447");
        props.put("jboss.naming.client.ejb.context",true);
        try{
            InitialContext ctx = new InitialContext(props);
            HelloWorldRemote helloworld =  (HelloWorldRemote)(ctx.lookup("helloworld1//HelloWorldRemoteBean!com.alex.wang.HelloWorldRemote"));
            System.out.println(helloworld.sayHelloRemote());
        }catch(NamingException e){
            System.out.println("get error");
            System.out.println(e);

        }

这里不能使用ejb:helloworld1//HelloWorldRemoteBean!com.alex.wang.HelloWorldRemote来访问

否则报Exception in thread "main" java.lang.IllegalStateException: EJBCLIENT000025: No EJB receiver available for handling [appName:helloworld1, moduleName:, distinctName:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@1af691b

原因应该是jndi前缀名为ejb:,但是我们没有指定其对应的interceptor



5.服务端访问这个ejb
在部署ejb的时候,server.log可以看出在server里每个ejb绑定的jndi,例如部署了一个helloworldbean,实现了helloworld接口
在jboss的server.log中,可以看出其绑定的jndi为
java:global/helloworld/HelloWorldBean!com.alex.wang.HelloWorld
java:app/helloworld/HelloWorldBean!com.alex.wang.HelloWorld
java:module/HelloWorldBean!com.alex.wang.HelloWorld
java:global/helloworld/HelloWorldBean
java:app/helloworld/HelloWorldBean
java:module/HelloWorldBean
那么在server中调用这个ejb,可以使用这样的方式
    InitialContext ctx = new InitialContext();

    HelloWorld world =(HelloWorld)ctx.lookup("java:global/helloworld1/HelloWorldBean!com.alex.wang.HelloWorld");

根据调用ejb与被调用ejb位置的关系,我们可以采用不同的jndi来进行调用(java:global,java:app,java:module)

上述的试验也说明在ejb3中,无需定义ejb-jar.xml

为什么通过4447端口可以获得ejb呢

原因是在jboss server的standalone.xml中定义了remoting模块

 <extension module="org.jboss.as.remoting"/>

其相关的配置为

  <subsystem xmlns="urn:jboss:domain:remoting:1.1">
            <connector name="remoting-connector" socket-binding="remoting" security-realm="ApplicationRealm"/>
  </subsystem>

其指定绑定端口为remoting

在<socket-binding-group中了定义其对应4447端口

<socket-binding name="remoting" port="4447"/>

而在  <subsystem xmlns="urn:jboss:domain:ejb3:1.3">,定义了其remote 访问使用的是前面定义的remoting-connector

 <remote connector-ref="remoting-connector" thread-pool-name="default"/>

所以通过4447端口,remote 协议可以访问到ejb

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 美吉姆培训不过怎么办 1岁宝宝挑食怎么办 宝宝不愿意开口说话怎么办 自闭症孩子不爱学习怎么办 宝宝不独立走路怎么办 六个月宝宝不认人怎么办 小孩隔奶奶涨怎么办 小孩段奶奶涨怎么办 1岁半还不会说话怎么办 孩子嗓子哑了怎么办 小朋友嗓子哑了怎么办 4周岁宝宝拉肚子怎么办 小孩不肯拉小便怎么办 做销售不爱说话怎么办 我伤害了朋友怎么办 三岁发音不准怎么办 心里憋不住话怎么办 自己不长记性怎么办 孩子不愿意开口说话怎么办 孩子不爱开口说话怎么办 宝宝犟脾气不好怎么办 小孩说话不算话怎么办 孩子说话不算话怎么办 孩子故意不好好说话怎么办 小孩说话吐字不清楚怎么办 腿老是抽筋是怎么办 半夜睡觉脚抽筋怎么办 我不爱说话内向怎么办 小孩子吐字不清怎么办 宝宝前边头发少怎么办 宝宝咬嘴唇龅牙怎么办 小孩老是咬下唇怎么办 五月小孩掉下床怎么办 小孩说话夹舌头怎么办 小孩自闭不说话怎么办 孩子突然不说话怎么办 孩子说话语速慢怎么办 做磁共振不睡觉怎么办 宝宝吃饭不多怎么办 孩子吃饭爱说话怎么办 孩子吃饭喜欢说话怎么办