log N
log N

Reputation: 945

Error creating simple servlet/ejb program

I am encountering some errors while trying to execute a simple ejb/servlet application.The server I am using is tomcat 7.0 using eclipse as an IDE.

Heres the servlet

public class CurrencyServlet extends HttpServlet {
    @EJB
    CurrencyEjb ejb;
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public CurrencyServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
    public void init(ServletConfig config){

    }
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    double result=0;    
    String currency=request.getParameter("amount");
    double cur=Double.parseDouble(currency);
    if(cur>0)
    {
        if((request.getParameter("currency").equals("yen")))
                {
            result=ejb.toYen(cur);
                }
        else
            result=ejb.toDollars(cur);
    }
    PrintWriter out=response.getWriter();
    out.println("Your value is worth:"+result);
    out.close();
    }

}


The currencyejb file is as follows.

import javax.ejb.*;
@Stateless
public class CurrencyEjb implements CurrencyMethods{
public double toYen(double request)
{
    double result=request*115.3100;
    return result;
}
@Override
public double toDollars(double request)
{
    double result=request*0.0071;
    return result;
}

}

My web.xml file is as given

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>CurrenyConverter</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
 <servlet>
        <servlet-name>CurrencyServlet</servlet-name>
        <servlet-class>CurrencyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>CurrencyServlet</servlet-name>
        <url-pattern>/CurrencyServlet</url-pattern>
    </servlet-mapping>
</web-app>

The errors which I get is as follows

javax.servlet.ServletException: Error instantiating servlet class CurrencyServlet
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:380)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288)
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    java.lang.Thread.run(Unknown Source)


root cause 

javax.naming.NameNotFoundException: Name CurrencyServlet is not bound in this Context
    org.apache.naming.NamingContext.lookup(NamingContext.java:803)
    org.apache.naming.NamingContext.lookup(NamingContext.java:159)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:380)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288)
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    java.lang.Thread.run(Unknown Source)

Upvotes: 1

Views: 813

Answers (3)

Sudhakar
Sudhakar

Reputation: 4873

Well thats because , Tomcat is a web container and not an application container. You should deploy your code in an application servers like - Glassfish, JBoss ,TomEE, WebLogic Application Server ,WebSphere Application Server etc

Check out the following links for more info

Hope this helps.

Upvotes: 3

Orest V
Orest V

Reputation: 71

<servlet>
       <servlet-name>CurrencyServlet</servlet-name>
       <servlet-class>CurrencyServlet</servlet-class>
</servlet>

It may happen cause you not set the full servlet path, including package. For example:

<servlet-class>your.full.package.CurrencyServlet</servlet-class>

Upvotes: 0

Miljen Mikic
Miljen Mikic

Reputation: 15261

At first glance, this part seems problematic:

@EJB
CurrencyEjb ejb;

You are trying to perform EJB injection, which is not possible in Tomcat. If your EJB CurrencyEjb is deployed somewhere else (i.e. within application server), then you can access it, but not through EJB injection. Namely, Tomcat is not EJB container, it is just servlet container, that is - you cannot deploy EJBs on it. Have a look at Glassfish, JBoss or TomEE (an extension of Tomcat with full Java EE support) and try to deploy your project there.

Upvotes: 2

Related Questions