- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 OpenEJB (TomEE++) 开发一个 EJB 3 项目。
我有一个无状态 session bean,其名称已用注释指定。
@Stateless(mappedName="SlideService", name="SlideService")
public class SlideService {
public Map<Category, List<SlideShow>> fetchSlideShowsByCategory() {
Application app = Application.getInstance();
return app.retreiveAllSlideShowsByCategory();
}
public SlideShow fetchSlideShow(long id) {
return null;
}
public List<SlideShow> fetchSlideShowsByTitle(String title) {
return null;
}
}
我从我的 Struts 操作类中查找 Session bean,就像这样。
Properties properties = new Properties();
properties.setProperty Context.INITIAL_CONTEXT_FACTORY,"org.apache.openejb.client.LocalInitialContextFactory");
InitialContext initialContext = new InitialContext(properties);
SlideService slideService = (SlideService)initialContext.lookup("SlideServiceLocalBean");
在上面的代码中,您会注意到我必须使用名称“SlideServiceLocalBean”来定位 bean,而我在 bean 的注释中明确指定了“SlideService”。
但是,当我尝试在我的测试用例中定位 bean 时,我必须使用另一个名称字符串。
EJBContainer ejbContainer = EJBContainer.createEJBContainer();
Object oSlideService = ejbContainer.getContext().lookup("java:global/slides/SlideService");
为什么查找名称存在差异?
我是否以正确的方式在 Struts 操作类中获取了 InitialContext,还是应该使用其他机制/contextFactory 来获取初始上下文?
是否可以在不使用外部 DI 库的情况下将 bean 注入(inject)到 action 类中?
最佳答案
在你的 struts Action 类中尝试这个:
new InitialContext().lookup("java:global/slides/SlideService");
它应该可以正常工作。所以应该从 Action 类内部:
new InitialContext().lookup("java:module/SlideService");
使用 LocalInitialContextFactory
的查找早于 JavaEE 6 Global JNDI,其中这些 java:global
和 java:module
名称来自。
本文档解释了它是如何工作的。
您的 bean 的名称是 SlideService
并且具有所谓的 @LocalBean
View (单个 bean 可以有多个 View ,例如 @LocalBean、@Remote、@Local) ,因此将 SlideService 查找为 @LocalBean
的名称最终为 SlideServiceLocalBean
这只是默认格式。您可以在 conf/system.properties
文件中将其更改为您喜欢的任何内容。
关于java - 我应该使用哪个 InitialContextFactory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10105716/
我对 Jboss-as-7.1.1 有疑问。当我部署它时,它部署正确,但是当我从客户端发送请求时,我收到此错误: javax.naming.NamingException: JBAS011843: F
我正在使用 OpenEJB (TomEE++) 开发一个 EJB 3 项目。 我有一个无状态 session bean,其名称已用注释指定。 @Stateless(mappedName="SlideS
我尝试寻找无法实例化 InitialContextFactory 的解决方案,但他们的答案似乎不起作用,我尝试在 JBoss 6 EAP 和 JBoss 7 AS 上运行它,所以看来我做错了。 这就是
我正在尝试订阅在 JBoss AS7 服务器上运行的 HornetQ 实例。我已经设法连接并发布/接收消息与存在于应用程序服务器外部的测试应用程序,但是当我尝试运行部署在服务器内部的类似示例时在我的消
我正在使用 wildfly10。这是我的 Java 代码。 private Hashtable mEnv = new Hashtable(); InitialContext e = new Initi
我正在测试(使用 JUnit)休息服务,为了确保一切按预期进行,我需要使用一些 EJB 方法。说,我有: 被测试的类,这里不感兴趣; 测试类 public class UploadServic
我正在将 jboss-4.0.4.GA 移动到 wildfly-8.1.0.Final。部署 EAR 时出现以下错误: 2014-07-10 17:09:44,900 ERROR [stderr] (
我在我的程序中使用了以下代码,它是 jboss 7 客户端的 jndi 查找。 public static Context getInitialContext() throws NamingExcep
我正在将一个应用程序从 Websphere 迁移到 jboss EAP 6.0。我已经在 Jboss 控制台上创建了数据源。但在我的代码中我是这样引用的: 但是从 Jboss 访问应用程序时,出现
我正在为 EJB 使用 JBoss 服务器,我需要在控制台应用程序中使用 JNDI 来获取 session bean 的引用,控制台应用程序代码如下所示 import java.util.Proper
我正在将 WebSphere 6 项目迁移到 JBoss EAP 6.4。这样做我正在更改数据源和连接参数。 在其中一个问题上,我面临着一个奇怪的问题。即使我将 INITIAL_CONTEXT_FAC
大家好,我在 Jboss-as-7.1.1 中遇到了一些问题。我正确部署但是当我从客户端发送请求时出现错误。我正在使用 Jboss-7.1.1,部署文件夹是 standalone/deployment
我正在尝试将我的应用程序从jboss 3.2迁移到wildfly..当我尝试部署我的ear文件时,我收到以下异常.. Can't get data source due to JNDI failure
我在 WSO2 数据服务服务器中创建 JNDI 数据源时遇到错误,我正在使用 MarkLogic XCC/J 连接器,也可能使用 JNDI 上下文类,但我遇到了错误。 DS Fault Message
我正在将服务从 Jboss 5.1 迁移到 Jboss EAP 7.0.0。它使用maven 3.9.9在jdk 1.8中成功构建,并在jboss EAP 7.0.0中成功部署。 在部署期间,它显示j
我是一名优秀的程序员,十分优秀!