接触 J2EE 也有些时间了。最近打算自己写一个 EJB 容器,琢磨了一下,打算就着技术书籍和 Apusic 的源码来搞个小研究。

先在这开个坑,毕竟每天在家,除了上班准点报道,下班又准点报道,周末连坐下来想事情的时间也被各种扯淡事情打断,也是很烦的。:)

1月24日:

    先把几个重要概念梳理一下。平常我们用 javax.ejb.* 的 API 时,很少需要考虑别的东西。这里面就有中间件(容器)的功劳。举例来说,我们的客户端调用一个包含业务方法的 bean(这个 bean 可以实现 javax.ejb.SessionBean 接口),而这个 bean 是由一个 EJBHome 对象创建的。出于简化 web 开发者工作的目的,EJBHome 对象应该在 web 应用中以调用 javax.ejb.* 中接口的形式来获得。所以,EJBHome 对象的默认实现就交给中间件来做。EJBHome 对象应该负责查找和缓存 bean 实例,以及删掉调用得最少的 bean 实例的缓存。

    然后我们看看 Apusic 是怎么处理各种 bean 的。在源码的 com.apusic.ejb.container.EJBManager 类中,不同类型的 bean 会触发产生不同类型的容器。处理的 bean 类型是标准的 SessionBean(包含 Stateful 和 Stateless 以及 Singleton)、EntityBean、MessageDrivenBean 。而具体生成的步骤,则在源码的 com.apusic.ejb.generator.ClientDrivenGenerator 的 generate(int) 方法中。

2月20日:

    怎么把各种 EJB 接口调用的方法最终转为使用其实现类,目前观察是依靠自带的 org.objectweb 包对编译后的机器码进行替换。后面继续写写这部分的内容。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐