|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (7)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2008-07-27 关键字: ejb3
ORM: JPA
DAO: Stateless SessionBean Business Logic Facade: Stateless Session Bean Web Module: HTML/AJAX-->Spring MVC + jndi引用Business Logic Stateless SessionBean 详细sample代码框架如下: 1. 一个Entity: @Entity public class Product { @ID Long id ..... } 2. Generic DAO: 2.1 接口: public interface GenericDao<T, PK extends Serializable> { public T findByPk(PK pk); public List<T> findAll(); public List<T> find(String query); public void save(T object); public T merge(T object); public void remove(T object); public void flush(); public void clear(); ...... } 2.2 JPA Generic DAO implementation: public class GenericDaoJpa<T, PK extends Serializable> implements GenericDao<T, PK>{ @PersistenceContext protected EntityManager entityManager; protected Class<T> type; // GenericDao接口中各方法的具体实现 ...... } 3. Product DAO: // DAO只提供Local接口 @Local public interface ProductDaoLocal extends persistence.GenericDao<Product, Long>{ } // @Stateless public class ProductDao extends GenericDaoJpa<Product, Long> implements ProductDaoLocal { } 4. Business Logic Facade: @Remote public interface MyModuleFacade { public void placeOrder(Long productId, Long customerId, int qty); public List<TheOrder> findAllOrders(); } @Local public interface MyModuleFacadeLocal { } // 此处涉及多个DAO/Entity,已省略 @Stateless public class MyModuleFacadeBean implements facade.MyModuleFacade, MyModuleFacadeLocal{ @javax.ejb.EJB ProductDaoLocal productDao; @javax.ejb.EJB CustomerDaoLocal customerDao; @javax.ejb.EJB OrderDaoLocal orderDao; @javax.ejb.EJB CustomerDiscountDaoLocal customerDiscountDao; public void placeOrder(Long productId, Long customerId, int qty) { TheOrder theOrder = new TheOrder(); Customer customer = customerDao.findByPk(customerId); Product product = productDao.findByPk(productId); CustomerDiscount discount = customer.getDiscount(); theOrder.setDiscount(discount.getDiscount()); theOrder.setProduct(product); theOrder.setPrice(product.getPrice() * qty * discount.getDiscount()); theOrder.setCustomer(customer); theOrder.setQuantity(qty); orderDao.save(theOrder); } } 5. Web Module references Facade: 5.1 applicationContext.xml中: <jee:remote-slsb id="placeOrderFacade" jndi-name="facade.MyModuleFacade" business-interface="facade.MyModuleFacade"/> 5.2 home-servlet.xml中: <bean id="placeOrderController" class="action.PlaceOrderController"> <property name="placeOrderFacade" ref="placeOrderFacade"/> </bean> 注:除了麻烦之外 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2008-07-27
我也发一个图,楼主说的是第一种架构。我们一开始也用这种方式,可以很方便地针对繁忙的业务增加一台服务器做水平扩展,可后来听说Remote调用很耗时,而且牵涉到分布式事务导致效率地下,领导要求改为第二种方式,将Remote改为Local即可,代价到也不高!
我们没有对两种方式做测试比较,上线后就是第二种方式部署的,暂时还没什么问题。 借楼主的帖子问问,EJB Remote调用和分布式事务真的性能那么低下吗?有多少测试数据来支持?Javaeye批EJB的帖子不少,基本上也就是这两个理由,另外说是开发和测试麻烦,还拿这个理由说事的应该还是停留在EJB2的时代,EJB3开发和测试都很方便了。感觉很多人都是人云亦云! 很想听听有人实际做过对比的来说说。 |
|
| 返回顶楼 | |
|
时间:2008-07-27
光是麻烦这一条加上N多注释这一条,就让我对EJB3敬而远之。
|
|
| 返回顶楼 | |
|
时间:2008-07-27
想问问楼上怎么做EJB的单元测试 如果不依赖AS
|
|
| 返回顶楼 | |
|
时间:2008-07-28
在GLASSFISH水族馆看到这篇博文,里面有4篇文章谈到了EJB 3.1, 有好的建议或疑问可以跟EJB的构架师KEN联系,我也乐意帮忙的。谢谢 !
http://blogs.sun.com/theaquarium/entry/ejb_3_1 |
|
| 返回顶楼 | |
|
时间:2008-07-29
说实话,那些对EJB3说三道四的一般都是没有用过,凭着对EJB2的一些印象,胡乱猜测的。首先说说自己在EJB3开发中的感受:
1. EJB Remote调用确实会降低性能,但在当前的硬件条件下,这点损耗几乎很难体现出来。 2。EJB3 用Annotation完全代替了以前的配置文件,如果你对核心的annotation用熟了后,你会发现开发起来会非常爽,非常方便。 3. 至于EJB 单元测试,如果你是用TestNG的话,你会发觉非常的简单。加上一个dataset就能对数据库进行简单测试。 4. 如果能用maven来配置整个系统的架构的话,将会给你省不少事。并且对比Ant,maven强大,安全,方便N多。在此强烈推荐。 最后,用Spring和用EJB3各有好处,很多哥们对EJB有偏见是因为一来熟悉了Spring后,对完全不同的配置方式不太习惯,二来EJB2残留下来的印象。总之EJB3和Spring各有优劣,不能一概而论。 |
|
| 返回顶楼 | |
|
时间:2008-07-29
EJB2怎么了?我感觉EJB2很不错,就算缺少文档的系统也不是那么难维护。现在反而感觉Spring做出来的项目太容易过时了,重用起来很难受。
|
|
| 返回顶楼 | |
|
时间:2008-07-29
boou 写道 说实话,那些对EJB3说三道四的一般都是没有用过,凭着对EJB2的一些印象,胡乱猜测的。首先说说自己在EJB3开发中的感受:
1. EJB Remote调用确实会降低性能,但在当前的硬件条件下,这点损耗几乎很难体现出来。 2。EJB3 用Annotation完全代替了以前的配置文件,如果你对核心的annotation用熟了后,你会发现开发起来会非常爽,非常方便。 3. 至于EJB 单元测试,如果你是用TestNG的话,你会发觉非常的简单。加上一个dataset就能对数据库进行简单测试。 4. 如果能用maven来配置整个系统的架构的话,将会给你省不少事。并且对比Ant,maven强大,安全,方便N多。在此强烈推荐。 最后,用Spring和用EJB3各有好处,很多哥们对EJB有偏见是因为一来熟悉了Spring后,对完全不同的配置方式不太习惯,二来EJB2残留下来的印象。总之EJB3和Spring各有优劣,不能一概而论。 用了一年的Maven,管了一年的Maven配置,我都烦死这玩意儿了 |
|
| 返回顶楼 | |
|
时间:2008-07-29
EJB2没用过,一用就是用EJB3的,感觉挺好用的,并且remote接口的性能也坏不到哪里去.如果你是本机上同一个JVM使用remote接口的话,有的EJB容器会帮你优化,把它变成通过本地调用的.
感觉挺多人批EJB可能是因为他们没怎么用过,或者说是听人说过而已 其实很多东西要用了才知道好不好 |
|
| 返回顶楼 | |
|
时间:2008-07-29
boou 写道 3. 至于EJB 单元测试,如果你是用TestNG的话,你会发觉非常的简单。加上一个dataset就能对数据库进行简单测试。 4. 如果能用maven来配置整个系统的架构的话,将会给你省不少事。并且对比Ant,maven强大,安全,方便N多。在此强烈推荐。 我是楼主: 请问boou,你用Maven是使用maven-ejb3-plugin吗?我试了一下,发现打包非常的不方便,有什么经验可以share一下吗? PS: 我自己试验过EJB3之后,也认为从纯粹技术角度EJB3是很不错的技术,而且再加上是Sun出的规范,肯定会得到业界大厂商支持 |
|
| 返回顶楼 | |








