我们的项目是在EJB 2.0中设计的。
我们没有在BMP EntityBeans中使用任何类型的EJB持久性方法。在SessionBeans中,我们通过使用方法getEJBXXXXHome()方法获取对EntityHome对象的引用,并通过调用home.findByPrimaryKey(“”)方法来获取EJB引用。然后我们调用CRUD操作的实际方法。在CRUD操作方法中,我们的人员使用了常规的JDBC API方法。
现在我们正在迁移到EJB3。作为从EJB 2.0到EJB3的迁移的一部分,我将所有BMP EntityBeans转换为普通的Java类,即没有更多的实体。如果EJB容器之前为实体数据库维护了一个池,那么它现在就不会存在。当我在本地机器上进行一次交易测试时,它正常工作
我担心的是,它会影响生产中多个线程的性能吗?
现在更改代码,每次调用都会创建一个EntityBean对象。如果在一小时内拨打60k电话将影响我的服务器。以前在EJB 2.0中如何处理这个?有没有办法在更改的代码中处理它(即普通的java类,因为它们不再是实体的概念)
答案 0 :(得分:1)
一般来说,异议创建/收集的开销将低于EJB容器以前为您的实体所做的任何开销。我怀疑一个比对象创建开销更大的问题是到数据库的往返。根据您的EJB容器配置,容器可能正在优化JDBC SQL并可能缓存检索到的数据(与对象缓存无关)。您可能应该设计应用程序以最小化对数据库的调用,并确保不执行不必要的查询。
最终,我怀疑只有您能够在硬件上评估应用程序服务器上的应用程序性能。我建议遵循良好的编程习惯,以避免过高的开销,分析结果,并从那里进行优化,而不是担心前期的性能。