| From | Sent On | Attachments |
|---|---|---|
| Jose Alvarez de Lara | Mar 26, 2011 8:46 am | |
| Cheng Fang | Mar 26, 2011 6:45 pm | |
| Jose Alvarez de Lara | Mar 27, 2011 10:05 am |
| Subject: | Servlet not loaded | |
|---|---|---|
| From: | Jose Alvarez de Lara (dakh...@hotmail.com) | |
| Date: | Mar 26, 2011 8:46:19 am | |
| List: | net.java.dev.glassfish.ejb | |
Hi,
I am trying to call an Oracle Stored Procedure using an EJB 3.1 injected in a Servlet. My environment is Eclipse Helios SR1 and GF 3.1.
This is the log,
[#|2011-03-26T16:08:33.937+0100|SEVERE|oracle-glassfish3.1|global|_ThreadID=22;_ThreadName=Thread-1;|Class
[ Lejb/CallStoredProcedure; ] not found. Error while loading [ class
controller.SPOutputServlet ]|#]
[#|2011-03-26T16:08:33.953+0100|SEVERE|oracle-glassfish3.1|global|_ThreadID=22;_ThreadName=Thread-1;|Class
[ Lejb/CallStoredProcedure; ] not found. Error while loading [ class
controller.SPOutputServlet ]|#]
I am basing in the Arun Gupta tutorial at, http://blog.arungupta.me/2009/09/totd-102-java-ee-6-servlet-3-0-and-ejb-3-1-wizards-in-eclipse/
When I try an Eclipse Client Project with sayHello() example everything goes
right. And in fact thats what I wanted to do
but I get an exception when calling the more complicated stored procedure ejb.
So I guess to develop a very simple servlet
as the one in the tutorial.
Here is my code,
1.- the ejb
@Stateless @LocalBean public class CallStoredProcedure implements java.io.Serializable {
private static final long serialVersionUID = 1L;
/** * Default constructor. */ public CallStoredProcedure() { // TODO Auto-generated constructor stub }
@SuppressWarnings("unchecked") public List<Country> getCountriesSP(BigDecimal region) throws Exception {
final Logger logger = Logger.getLogger("CallStoredProcedure");
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("JPACallingOracleStoredProcedure-jpa");
EntityManager em = emf.createEntityManager();
try { EntityTransaction entr = em.getTransaction(); entr.begin(); JpaEntityManager jpaEntityManager = JpaHelper.getEntityManager(em); Session session = jpaEntityManager.getActiveSession(); StoredProcedureCall call = new StoredProcedureCall(); call.setProcedureName("HR.RECORD_SET.COUNTRIES_LIST"); call.addNamedArgumentValue("P_REGION", region); call.useNamedCursorOutputAsResultSet("P_RESULTSET");
ObjectLevelReadQuery query = new ReadAllQuery(Country.class); query.addArgument("P_REGION"); query.setCall(call);
List<BigDecimal> queryArgs = new ArrayList<BigDecimal>(); queryArgs.add(region);
return (List<Country>) session.executeQuery(query, queryArgs);
} catch (Exception ex) { logger.severe("ERROR: " + ex.getMessage()); throw ex; } finally { em.close(); } }
}
2.- the servlet
@WebServlet(name="SPOutputServlet", urlPatterns={"/SPOutputServlet"}) public class SPOutputServlet extends HttpServlet { private static final long serialVersionUID = 1L;
@EJB CallStoredProcedure call; /** * @see HttpServlet#HttpServlet() */ public SPOutputServlet() { super(); // TODO Auto-generated constructor stub }
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doWork(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doWork(request, response);
}
protected void doWork(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
final Logger logger = Logger.getLogger("SPOutputServlet");
ServletOutputStream out = response.getOutputStream();
List<Country> list = new ArrayList<Country>(); try { list = call.getCountriesSP(new BigDecimal(2L)); } catch (Exception e) { // TODO Auto-generated catch block logger.severe("ERROR CALLING EJB: " + e.getMessage()); }
out.println("<html>");
out.println("<head><title>SPOutputServlet</title></head>");
out.println("<body>");
out.println("<table align='center'>");
for(Country c: list){
out.println("<tr>");
out.println("<td>" + c.getCountryName() + "</td>" + "<td>" + c.getCountryId()
+ "</td>");
out.println("</tr>");
}
out.println("</table>");
out.println("</body>");
out.println("</html>");
}
}
3.- and the stored procedure,
...the specification
CREATE OR REPLACE PACKAGE RECORD_SET AS type cursorType is ref cursor; Procedure COUNTRIES_LIST(p_region IN NUMBER, p_ResultSet out cursorType); END RECORD_SET ;
...the body
CREATE OR REPLACE PACKAGE BODY RECORD_SET IS
PROCEDURE COUNTRIES_LIST ( p_region IN NUMBER, p_ResultSet out cursorType ) IS
BEGIN
OPEN p_ResultSet FOR SELECT * FROM countries WHERE region_id = p_region;
EXCEPTION
When NO_DATA_FOUND then dbms_output.put_line('No hay datos');
END;
END RECORD_SET ; /
Any help or suggestion will be appreciated.
Regards, Jose





