Tag: ejb 3.0

模拟基于reflection的调用

我试图模拟一些基于reflection的方法。 下面你可以看到细节, 被测试的class级 public class TracerLog { @AroundInvoke public Object logCall(InvocationContext context) throws Exception { Logger logger = new Logger(); String message = “INFO: Invoking method – ” + context.getMethod().getName() + “() of Class – ” + context.getMethod().getDeclaringClass(); logger.write(message); return context.proceed(); } } 测试 public class TracerLogTest { @Mock InvocationContext mockContext; @Mock Logger mockLogger; @InjectMocks […]

使用JBoss和Spring在Java Web应用程序之间共享业务对象实例的最佳方法是什么?

我们目前有一个Web应用程序加载一个Spring应用程序上下文,它实例化一堆业务对象,DAO对象和Hibernate。 我们希望与另一个Web应用程序共享此堆栈,以避免具有相同对象的多个实例。 我们研究了几种方法; 使用JMX或JNDI或使用EJB3公开对象。 不同的方法都有它们的问题,我们正在寻找一种轻量级的方法。 有关如何解决这个问题的任何建议? 编辑:我收到的评论要求我详细说明,所以这里有: 我们想要解决的主要问题是我们只想拥有一个Hibernate实例。 这是因为在运行使用相同数据源的多个客户端应用程序时,Hibernate的二级缓存失效问题。 此外,业务/ DAO / Hibernate堆栈的增长相当大,因此不重复它只是更有意义。 首先,我们试图了解如何单独将业务层暴露给其他Web应用程序,而Spring以少量XML的价格提供JMX包装。 但是,我们无法将JMX实体绑定到JNDI树,因此我们无法从Web应用程序中查找对象。 然后我们尝试将业务层直接绑定到JNDI。 尽管Spring没有为此提供任何方法,但使用JNDITemplate绑定它们也是微不足道的。 但这导致了几个新问题:1)安全管理器拒绝访问RMI类加载器,因此一旦我们尝试调用JNDI资源上的方法,客户端就失败了。 2)一旦安全问题得到解决,JBoss就抛出IllegalArgumentException:object不是声明类的实例。 一点阅读表明我们需要JNDI资源的存根实现,但这似乎有很多麻烦(也许Spring可以帮助我们?) 我们还没有看过EJB,但在前两次尝试之后,我想知道我们想要实现的目标是否完全可能。 总结一下我们想要实现的目标:一个JBoss实例,几个Web应用程序在DAO层和Hibernate之上使用一堆业务对象。 最好的祝福, 尼尔斯

在persistence.xml文件中读取环境变量

我想读取persistence.xml文件中的环境变量。 想法是我不希望从属性文件中读取我的数据库详细信息,因为获取属性文件覆盖更改。相反,我想从环境变量中读取详细信息。 有没有办法达到这个标准。 我使用Spring 3,我的独立应用程序将部署在unix机器中。

在什么情况下使用EJB? 它们是否需要在网站/网络应用程序开发中?

EJBS是否用于数据库支持的网站(所有人都可以访问)?

简单CRUD的EJB 3会话Bean设计

我正在编写一个应用程序,它的唯一目的是为了维护数据库中的记录而进行CRUD操作。 某些表/实体之间存在关系。 我见过的用于创建会话bean的大多数示例都涉及与我没有的许多实体交互的复杂业务逻辑/操作。 由于我的应用程序非常基础,会话bean的最佳设计是什么? 我想每个实体有一个会话bean,它有CRUD定义的方法。 然后我想把所有这些会话bean组合成一个会话bean。 然后我发现这个博客条目很吸引人,但我必须承认我不了解所有这些(什么是ServiceFacade?)。 我倾向于会话bean /实体类,但希望听到更多有经验的意见。 谢谢。 哎呀,这是博客链接: http : //www.adam-bien.com/roller/abien/entry/generic_crud_service_aka_dao

具有依赖库的Maven EJB打包

我面临一个问题,如何使用简单的WAR和EJB3模块为JBoss7应用服务器正确打包我的企业(EAR)应用程序。 问题是,EJB模块正在使用XML-RPC库(来自Apache),并且在部署EAR期间我仍然获得NoDefClassFound(来自此xmlrpc lib的类)。 问题是,maven- ejb -plugin不会在最终的EJB jar中打包依赖项,但是maven- ear -plugin会将它打包到EAR目录的根目录。 部署EAR时,会在内部EJB模块上调用INSTALL,但它找不到xmlrpc lib类(它不与EJB jar一起打包,而是EAR,并且它在清单中没有任何条目)。 EJB pom.xml 4.0.0 cz.ctu.fee.voxport.app_logic core 1.0 ejb javax javaee-api 6.0 provided org.apache.xmlrpc xmlrpc-common 3.1.3 org.apache.xmlrpc xmlrpc-client 3.1.3 org.apache.maven.plugins maven-ejb-plugin 2.3 3.1 true 有没有办法如何使用maven干净利落地解决这个问题?

如何避免使用collection fetch指定的警告“firstResult / maxResults; 在内存中应用!“在使用Hibernate时?

我在服务器日志中收到警告“使用集合提取指定的firstResult / maxResults;在内存中应用!” 。 但一切正常。 但我不想要这个警告。 我的代码是 public employee find(int id) { return (employee) getEntityManager().createQuery(QUERY).setParameter(“id”, id).getSingleResult(); } 我的疑问是 QUERY = “from employee as emp left join fetch emp.salary left join fetch emp.department where emp.id = :id”

是否可以将注入的EntityManagers传递给EJB bean的帮助程序类并使用它?

我们有一些JavaEE5无状态EJB bean,它将注入的EntityManager传递给它的帮助器。 这样安全吗? 到目前为止它运行良好,但我发现了一些Oracle文档,声明它的EntityManager实现是线程安全的。 现在我想知道我们之前没有问题的原因是因为我们使用的实现恰好是线程安全的(我们使用Oracle)。 @Stateless class SomeBean { @PersistenceContext private EntityManager em; private SomeHelper helper; @PostConstruct public void init(){ helper = new SomeHelper(em); } @Override public void business(){ helper.doSomethingWithEm(); } } 实际上它是有道理的。如果EntityManager是线程不安全的,那么容器就必须这样做 inercept business() this.em = newEntityManager(); business(); 它不会传播到它的帮助器类。 如果是这样,在这种情况下最好的做法是什么? 传递EntityManagerFactory而不是EntityManager? 编辑: 这个问题非常有趣,所以如果你对这个问题感兴趣,你可能也想看一下这个问题: 编辑:更多信息。 ejb3.0规范 4.7.11非重入实例容器必须确保任何时候只有一个线程可以执行实例。 如果客户端请求在实例执行另一个请求时到达实例,则容器可能会将javax.ejb.ConcurrentAccessException抛出到第二个客户端[24]。 如果使用EJB 2.1客户端视图,则容器可能会在客户端是远程客户端时将java.rmi.RemoteException抛出到第二个请求,如果客户端是本地客户端,则抛出javax.ejb.EJBException。[25] 请注意,会话对象仅支持单个客户端。 因此,如果两个客户端尝试调用同一会话对象,则会出现应用程序错误。 此规则的一个含义是应用程序无法对会话Bean实例进行环回调用。 和, 4.3.2dependency […]

WebSphere 7.从另一个应用程序注入EJB

我正在尝试使用@EJB注释注入EJB: 当我将EJB注入同一个耳中的另一个EJB时,它可以正常工作。 当我将EJB从同一服务器中的另一个耳朵注入另一个EJB时,我得到一个exception: EJB在调用方法“sayHello”期间抛出了意外的(未声明的)exception。 exception数据:javax.ejb.EJBException:注入失败; 嵌套exception是:com.ibm.ejs.container.EJBNotFoundException:应用程序myapp1中不存在带有com.mycompany.myapp.ejb.test2接口的EJB 我正在使用WebSphere 7和EJB 3.0。 当我自己进行jndi查找时,它运行正常。 如何让容器知道从哪里注入我的远程bean? myapp1.ear包含以下内容:myapp1.jar(EJB所在的位置) myapp1 EJB: package com.mycompany.myapp1.ejb.test1; @Remote public interface HelloEjb1 { public String sayHello(); } EJB Impl: package com.mycompany.myapp.ejb.test1; @Stateless public class HelloEjbImpl1 implements HelloEjb1 { @EJB HelloEjb2 helloEjb2; @Override public String sayHello() { return HelloEjb2.sayHello(); } } myapp2.ear包含以下内容:myapp2.jar(EJB所在的位置) myapp2 EJB: package com.mycompany.myapp2.ejb.test2; @Remote public […]

SessionContext.getBusinessObject()的返回值与bean中使用的’this’关键字有何不同?

SessionContext.getBusinessObject()在文档中描述如下, 获取可用于通过给定业务接口调用当前bean的对象。 参数:businessInterface – 此会话Bean的本地业务接口或远程业务接口之一。 返回:与给定业务接口对应的业务对象。 我不能在Java中使用’this’关键字来实现相同的目标吗? 这些有何不同?