会话bean 知识补充

1 改变会话bean的JNDI名

@Stateless(name="A_Bean")         //此处定义的是beanName,注入此bean到其它的bean时会用到

@Remote(A.class) 

@RemoteBinding(jndiBinding="AA")    //@Stateless(mappedname=" ")可以统一规定非全局jndi名

class ABean implements A{

}

这样原来的jndi为 ABean/remote ,现在为 AA

(local本地接口 以此类推)

2 会话bean的生命周期

无状态会话bean  :创建  ,销毁

有状态会话bean:创建,钝化/激活循环,销毁

我们可以将会话bean的一个普通方法,定义为 bean不同生命周期的  回调函数

@PostConstruct   (bean实例化后立即执行)

public void run(){}

这样run方法在所在bean实例话后就会立刻执行,此外还有

@PreDestroy   (bean销毁前)

@Remove    (此注解的方法被调用的话,会执行销毁bean的动作)

此外有状态会话bean还有额外的生命周期管理

@PrePassivate  (钝化前,有状态会话bean长时间空闲,容器会钝化它,存入缓存,钝化后一段时间仍然未被使用将会清除)

@PostActivate (激活后,立即执行)

@Init   (有状态会话bean可以有多个@Init但是只有一个会被调用,它在@PostConstruct之前执行)

3 EJB拦截器

先创建 拦截器类

 

public class MyInterceptor {

@AroundInvoke

public Object XXX (InvocationContext ctx) throws Exception{     //只有红色部分是可选的,其它东西必须固定格式

String name=ctx.getMethod().getName();

System.out.println("before "+name);

Object o=ctx.proceed();                  -----此处是被拦截的方法在执行,可以在它的前后加上自己的业务

System.out.println("after "+name);

return o;

}

}

在需要的业务方法上   插入 拦截器

@Interceptors(XXX.class)

 

4 依赖注入(包括EJB注入,资源注入)

EJB注入,就是会话bean的注入,比如在一个会话bean内使用别的会话bean

     a。可以通过JNDI查找的方式注入,必须之前JNDI ENC中添加注册项,这是ejb-jar.xml 必须放在META-INF文件夹下

           它是以  java:comp/env   为上下文的  如 ava:comp/env/xxxx

     b。使用 @EJB(beanName="xxx")    XxxBean   myBean;

           beanName是@Stateless.name()和Stateful.name()

           此外还可以是mappedName他是全局JNDI名不过他和容器厂商有关不利于移植

          其实完全可以只加@EJB(推荐,最为简便,而且加了beanName只有你写的bean的名字错了,容器还是会按照默认的按照你的声明的接口去找最后的一个实现过他的bean)就行了,他会根据你使用的接口去找对应的Bean而且,你的不用写get ,set方法。也就是说声明的 变量名也是自由的,如果有多个类都实现了此接口,也不会发布失败,容器回去找最后的那个或者随机找到(不推介)

资源类型注入(注入的对象是任何由JCA资源适配器定义的类型)

以注入mysql数据源为例(有了数据源,就可以方便的进行jdbc开发了)

     a。将mysql-jdbc的驱动放入%JBOSS_HOME%/server/default/lib

     b。%JBOSS_HOME%/docs/examples/jca中找到mssql-ds.xml这是 微软的sql serverl数据源的配置文件

                                                    mysql-ds.xml   这是mysql的

     c。对其稍作修改如改改连接地址,密码什么的。发布到%JBOSS_HOME%/server/default/deploy目录

     d。在 会话bean内

               @Resource(mappedName="java:MySqlDS",type=DataSource.class)

               DataSource ds;

              (  非全局jndi以java:开头,java:MySqlDS是因为 他不是全局jndi不能被外部访问)

       注入完成。

 

 

 

 

 

评论 1 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

孙大大

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值