【问题标题】:JBoss AS 7, EJB3 cast to interfaceJBoss AS 7、EJB3 转换为接口
【发布时间】:2011-10-18 16:22:48
【问题描述】:

我在使用 JBoss AS 7 和我的使用 EJB3.1 的应用程序时遇到了奇怪的行为。 我成功查找了 bean,但是当我尝试将其强制转换为它的接口时,抛出异常。

简述代码:

@Local
public interface BusinessObjectsFactory { ... }

@Stateless
@Local(BusinessObjectsFactory.class)
public class JPABusinessObjectsFactory implements BusinessObjectsFactory { ... }

...
Object obj = ctx.lookup("java:app/moduleName/" +
    "JPABusinessObjectsFactory!pckg.BusinessObjectsFactory");
Class c = obj.getClass();
System.out.println(c.getName()); // pckg.BusinessObjectsFactory$$$view36
System.out.println(c.getInterfaces()[0].getName()); // BusinessObjectsFactory 

BusinessObjectsFactory bof = (BusinessObjectsFactory) obj; //cast exception

有什么想法吗?请注意,需要接口(查找的实现是从配置文件中读取的,并且可能会更改)

【问题讨论】:

  • 1.您的应用程序在服务器上执行,客户端在哪里?在同一台服务器上,在同一应用程序中? 2. 你使用的是 EJB-jar 模块还是 WAR 封装? 3.(次要)如果您在界面上指定\@Local,则无需在类级别再次执行此操作。一个 \@Local 就足够了。
  • 客户端和目标 EJB 是否位于不同的 WAR 中? c.getInterfaces()[0].getClassLoader() 和 BusinessObjectsFactory.class.getClassLoader() 返回什么?
  • 嗯,我在打包此类档案方面有点新意。我想要的是单独的 EJB 模块(可以说用于持久性的 EJB 模块和具有使用此持久性模块的业务逻辑的 EJB 模块)。应用程序逻辑应该通过一些接口调用持久性模块。这就是我创建这个结构的原因:
  • interfaces-jar包含BusinessObjectsFactory接口,jpa-persistence.jar知道并实现interfaces.jar,applogic.jar 知道 interfaces.jar 并进行 JNDI 查找 java:app/JPABusinessFactory
  • 我正在通过 maven 构建应用程序。如果有一些很好的例子如何实现这一点(如何正确设置依赖关系以及什么应该和不应该包括特定的 EJB jars)......

标签: ejb jboss7.x


【解决方案1】:

我切换到另一种查找策略,而这对我来说不再是问题。我不确定这是否仍然存在于最新版本的 JBoss/Wildfly AS 中。这就是我要结束这个问题的原因。

【讨论】:

    猜你喜欢
    • 2023-03-04
    • 2014-07-16
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 2012-04-16
    • 2013-03-15
    相关资源
    最近更新 更多