2012-02-02 30 views
2

我試圖將用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") 
    } 
} 

爲什麼會出現這些錯誤,是有什麼我可以做些什麼呢?

乾杯,
螞蟻

回答

0

固定。

@LocalBean添加到bean impl中,緊接在@Stateless之後。