Я пытаюсь развернуть EJB, написанный на Scala, на сервере приложений.
Если я создаю сессионный компонент без сохранения состояния и предоставляю ему (удаленный) интерфейс, он работает нормально (интерфейс являетсяtrait).
Проблема в том, что я хочу создать сессионный компонент без сохранения состояния без интерфейса.И на Glassfish, и на JBoss я получаю ошибку.Если я преобразую код в Java, у меня не возникнет проблем.
Glassfish 3.1.1: IllegalArgumentException: невозможно установить поле ejb.MyScalaEJB2Bean ch.maxant.produkte.web.scala.BhfSuche2.scalaEjb2NoInterface$ Proxy290
JBoss 7.0.2. Финал: IllegalArgumentException: невозможно установить поле ejb.MyScalaEJB2Bean ch.maxant.produkte.web.scala.BhfSuche2.scalaEjb2NoInterface to scala $$$ 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-инъекция, имеет следующий источник:
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")
}
}
Почему я получаю этиошибки и что я могу с этим поделать?
Ура,
Муравей