我試圖將用Scala編寫的EJB部署到應用程序服務器。沒有界面的Scala EJB似乎沒有工作
如果我創建一個無狀態會話bean並給它一個(遠程)接口,那麼它工作正常(接口是一個特性)。
問題是當我想創建一個無界面的無狀態會話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")
}
}
爲什麼會出現這些錯誤,是有什麼我可以做些什麼呢?
乾杯,
螞蟻