【问题标题】:Scala EJB without interface doesn't seem to work没有接口的 Scala EJB 似乎不起作用
【发布时间】:2012-02-02 08:21:16
【问题描述】:

我正在尝试将用 Scala 编写的 EJB 部署到应用服务器。

如果我创建一个无状态会话 bean 并给它一个(远程)接口,那么它工作正常(接口是一个 trait)。

问题是当我想创建一个没有接口的无状态会话 bean 时。在 Glassfish 和 JBoss 上都出现错误。如果我将代码转换为Java,那么我没有问题。

Glassfish 3.1.1:IllegalArgumentException:无法将 ejb.MyScalaEJB2Bean 字段 ch.maxant.produkte.web.scala.BhfSuche2.scalaEjb2NoInterface 设置为 $Proxy290

JBoss 7.0.2.Final:IllegalArgumentException:无法将 ejb.MyScalaEJB2Bean 字段 ch.maxant.produkte.web.scala.BhfSuche2.scalaEjb2NoInterface 设置为 scala.ScalaObject$$$view4

EJB 源是:

package ch.maxant.produkte.ejb.scala

@Stateless(name = "ScalaTestBean2", mappedName = "ScalaTestBean2")
class MyScalaEJB2Bean {

  def doStuff(x: String): String = {
    "hello " + x + ", this is a scala EJB"
  }

}

需要EJB注入的Servlet有这个来源:

package ch.maxant.produkte.web.scala;

@WebServlet(urlPatterns = Array("/BhfSuche2"))
@SerialVersionUID(1L)
class BhfSuche2 extends HttpServlet {

  @EJB(lookup="java:global/ProdukteEAR/ProdukteScala/ScalaTestBean2")
  var scalaEjb2NoInterface: MyScalaEJB2Bean = null

  @throws(classOf[ServletException])
  @throws(classOf[IOException])
  override def doGet(request: HttpServletRequest, response: HttpServletResponse):Unit = {

    val msg2 = scalaEjb2NoInterface.doStuff("ScalaWebServlet")
    response.getWriter.write(msg2 + "\r")
  }
}

为什么我会收到这些错误,我能做些什么吗?

干杯,
蚂蚁

【问题讨论】:

    标签: scala jakarta-ee ejb-3.1


    【解决方案1】:

    固定。

    @LocalBean 添加到bean impl,紧跟在@Stateless 之后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多