Не инжектится ejb

452
08 ноября 2017, 00:18

Здравствуйте, у меня есть сервлет который работает и все отображает. Он примерно такой

@WebServlet("/test")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter writer = resp.getWriter();
        writer.print("hello world");
        writer.close();
    }
}

Я перехожу по ссылке: http://localhost:8080/test и вижу hello world

В другом пакете я создал такой Ejb:

import javax.ejb.*;
    @Stateless
    public class HelloWorldBean {
        public String sayHello() {
            return "hello";
        }
    }

Меняю код в сервлете, делаю его таким:

import javax.ejb.*;
@WebServlet("/test")
public class MyServlet extends HttpServlet {
    @EJB
    HelloWorldBean worldBean;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter writer = resp.getWriter();
        writer.print(  worldBean.sayHello());
        writer.close();
    }
}

перехожу на http://localhost:8080/test и имею следующее :

Exception
javax.servlet.ServletException: Error instantiating servlet class ru.company.MyServlet
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:798)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1441)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Thread.java:748)
Root Cause
javax.naming.NameNotFoundException: Name [ru.company.MyServlet/worldBean] is not bound in this Context. Unable to find [ru.company.MyServlet].
    org.apache.naming.NamingContext.lookup(NamingContext.java:816)
    org.apache.naming.NamingContext.lookup(NamingContext.java:173)
    org.jboss.weld.environment.tomcat.ForwardingInstanceManager.newInstance(ForwardingInstanceManager.java:26)
    org.jboss.weld.environment.tomcat.WeldForwardingInstanceManager.newInstance(WeldForwardingInstanceManager.java:71)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:798)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1441)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Thread.java:748)

Помогите, почему вылезает такая ошибка?

Answer 1

Tomcat не поддерживает EJB. Используйте какой-нибудь сервер приложений - Glassfish, Wildfly и т.п. Если не хочется далеко отходить от знакомой платформы, можете попробовать TomEE.

READ ALSO
Как зашифровать String в андроид?

Как зашифровать String в андроид?

Добрый деньВ коде имеется final String, содержание которой очень не хотелось бы, чтобы его узнали при декомпиляции

225
Ошибка в retrofit2

Ошибка в retrofit2

Доброго времени сутокПри попытке retrofit2

274
Как создать объект фрагмента из другого класса

Как создать объект фрагмента из другого класса

Как создать объект класса фрагментаНапример, чтобы создать объект класса активии надо провернуть такое:

225
Что за ошибка Caused by: org.xmlpull.v1.XmlPullParserException: Unexpected token (position:TEXT {“code”:0,"messa…@

Что за ошибка Caused by: org.xmlpull.v1.XmlPullParserException: Unexpected token (position:TEXT {“code”:0,"messa…@

Доброго времени сутокИмеется xml документ на сервере, вот его структура

265