Scala EJB без интерфейса не работает - PullRequest
2 голосов
/ 02 февраля 2012

Я пытаюсь развернуть 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")
  }
}

Почему я получаю этиошибки и что я могу с этим поделать?

Ура,
Муравей

1 Ответ

0 голосов
/ 03 февраля 2012

Исправлено.

Добавьте @LocalBean к бину, сразу после @Stateless.

...