Reputation: 945
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
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
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
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