atom feed3 messages in net.java.dev.glassfish.ejbRe: Servlet not loaded
FromSent OnAttachments
Jose Alvarez de LaraMar 26, 2011 8:46 am 
Cheng FangMar 26, 2011 6:45 pm 
Jose Alvarez de LaraMar 27, 2011 10:05 am 
Subject:Re: Servlet not loaded
From:Jose Alvarez de Lara (dakh@hotmail.com)
Date:Mar 27, 2011 10:05:04 am
List:net.java.dev.glassfish.ejb

Hi Cheng

Your rigth again and at the end you are going to teach me Java.

What I did is packaged into jar files the JPA, and the EJB projects and copy manually int the lib folder of the web project.

Now works fine.

Thanks for your suggestion.

Regards, Jose

From: Cheng Fang Sent: Sunday, March 27, 2011 3:46 AM To: ej@glassfish.java.net Cc: Jose Alvarez de Lara Subject: Re: Servlet not loaded

How is the webapp packaged? Does it contain the class ejb/CallStoredProcedure?
If it still doesn't work, can you attach a test app?

-cheng

On 3/26/11 11:46 AM, Jose Alvarez de Lara wrote: 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