Subject: Re: ActionServlet and NoClassDefFoundErrors
From: Vic Cekvenich <[EMAIL PROTECTED]>
 ===
Should you have a new () someplace in your action?

Struts Developer wrote:

> Greetings All,
> 
> This is probably a dumb question, and being this close to Friday will 
> generate short flippant answers, but here goes anyway...
> 
> I have a need to communicate via IBM MQSeries to a legacy application. 
> This application has a listener that monitors the queue and posts events 
> in the legacy application based on messages it reads from said queue.
> 
> I have successfully tested putting messages on the queue from a java 
> class. However when I try to call my MessageManager class from my Action 
> class all I ever get is a NoClassDefFoundError.
> 
> The MessageManager class imports all the necessary MQ packages, and it 
> also catches all MQ exceptions and throws a "MessageManagerException" 
> instead. I have a test driver that calls this class (independent of my 
> ActionServlet), and I can successfully call it all day long.
> 
> However, as soon as I try to make the call from my Action subclass I get 
> the NoClassDefFoundError.
> 
> Why, when I call my MessageManager from my test class, does it work, but 
> when I call it from my Action class it fails?
> 
> If anyone has any ideas please let me know. The source is posted below.
> Thanks in advance,
> Mark N.
> 
> ============================
> ForteMessageManager class
> ============================
> package dhs.vcm.forte.messaging;
> 
> 
> import com.ibm.mq.*;
> 
> 
> /*  There are three jar files required in the workspace
>     com.ibm.mq.jar
>     com.ibm.mq.iiop.jar
>     com.ibm.mqbind.jar
>     These should all be in the java/lib directory where MQ client is 
> installed.
>     The mqbind.jar file isn't used except for class definitions and was 
> only
>     found in the 5.2 installation of MQ Client.
> */
> 
> //----------------------------------------------------- ForteMessageManager
> public class ForteMessageManager {
> 
> 
> 
> //----------------------------------------------------- putMessage
>     public static void putMessage(String msg)
>         throws ForteMessageException {
> 
> 
>         try {
> 
>             System.out.println("ForteMessageManager.putMessage ... about 
> to establish Connection pool") ;
>             ForteMessageConnectionPool messagePool = new 
> ForteMessageConnectionPool();
> 
>             // open the queue
>             System.out.println("ForteMessageManager.putMessage ... about 
> to open queue") ;
>             MQQueue myQueue = messagePool.getConnection(1);
> 
>             // Define a simple MQSeries message, and put message text
>             System.out.println("ForteMessageManager.putMessage ... about 
> to define message ") ;
>             MQMessage myMessage = new MQMessage();
>             myMessage.writeUTF(msg);
> 
>             // specify the message options...
>             System.out.println("ForteMessageManager.putMessage ... about 
> to specify message options") ;
>             MQPutMessageOptions pmo = new MQPutMessageOptions();  // 
> accept the defaults, use MQPMO_DEFAULT constant
> 
>             // put the message on the queue
>             System.out.println("ForteMessageManager.putMessage ... about 
> to place message on queue") ;
>             myQueue.put(myMessage,pmo);
> 
>             // Close the queue
>             System.out.println("ForteMessageManager.putMessage ... about 
> to close the queue") ;
>             messagePool.releaseConnection(myQueue);
> 
> 
>         } catch (ForteMessageException ex) {
>         } catch (MQException ex) {
>             ForteMessageException newEx = new 
> ForteMessageException(ex.getMessage());
>             newEx.setCompletionCode(ex.completionCode);
>             newEx.setReasonCode(ex.reasonCode);
>             throw newEx;
>         } catch (java.io.IOException ex) {
>             throw new ForteMessageException(ex.getMessage());
>         }
> 
> 
>     }
> 
> 
> 
> //----------------------------------------------------- getMessage
>     public static String getMessage()
>         throws ForteMessageException {
> 
> 
>         String msgText = null;
> 
>         try {
> 
>             ForteMessageConnectionPool messagePool = new 
> ForteMessageConnectionPool();
> 
>             // open the queue
>             MQQueue myQueue = messagePool.getConnection(1);
> 
>             // Define a MQSeries message buffer to receive the message 
> into..
>             MQMessage retrievedMessage = new MQMessage();
> 
>             // Set the get message options..
>             MQGetMessageOptions gmo = new MQGetMessageOptions();  // 
> accept the defaults, use MQGMO_DEFAULT constant
> 
>             // get the message off the queue..
>             myQueue.get(retrievedMessage, gmo);
> 
>             // set the return value
>             msgText = retrievedMessage.readUTF();
> 
>             // Close the queue
>             messagePool.releaseConnection(myQueue);
> 
> 
>         } catch (ForteMessageException ex) {
>         } catch (MQException ex) {
>             ForteMessageException newEx = new 
> ForteMessageException(ex.getMessage());
>             newEx.setCompletionCode(ex.completionCode);
>             newEx.setReasonCode(ex.reasonCode);
>             throw newEx;
>         } catch (java.io.IOException ex) {
>             throw new ForteMessageException(ex.getMessage());
>         }
> 
>         return msgText;
> 
> 
>     } // end of mqTest
> 
> //----------------------------------------------------- 
> ForteMessageManager - end
> }
> 
> 
> =============================
> Action Class sample
> =============================
> package dhs.vcm.vis.action;
> 
> //  -------------------------------------------------------------- Java 
> Includes
> import java.io.IOException;
> import java.util.Hashtable;
> import java.util.Locale;
> import javax.servlet.RequestDispatcher;
> import javax.servlet.ServletException;
> import javax.servlet.http.HttpServletRequest;
> import javax.servlet.http.HttpSession;
> import javax.servlet.http.HttpServletResponse;
> 
> //  -------------------------------------------------------------- 
> Struts Includes
> import org.apache.struts.action.ActionForm ;
> import org.apache.struts.action.ActionError;
> import org.apache.struts.action.ActionErrors;
> import org.apache.struts.action.ActionForward;
> import org.apache.struts.action.ActionMapping;
> import org.apache.struts.action.ActionServlet;
> import org.apache.struts.util.MessageResources;
> 
> //  -------------------------------------------------------------- DHS 
> Imports
> import dhs.vcm.forte.messaging.* ;
> import dhs.vcm.vis.business.* ;
> import dhs.vcm.vis.entity.* ;
> import dhs.vcm.vis.form.* ;
> import dhs.vcm.vis.struts.action.VISAction ;
> import dhs.vcm.vis.util.* ;
> 
> public class EnterVisitorActionDisplay extends VISAction {
> 
>     public ActionForward perform(
>         ActionMapping mapping,
>         ActionForm form,
>         HttpServletRequest request,
>         HttpServletResponse response)
>         throws IOException, ServletException {
> 
>         writeToLog("   EnterVisitorActionDisplay : perform : entered") ;
> 
>         // Extract attributes we will need
>         Locale locale = getLocale(request);
>         MessageResources messages = getResources();
>         HttpSession session = request.getSession();
> 
>         writeToLog("   EnterVisitorActionDisplay : perform : posting 
> message") ;
> 
>         // Call Forte Message Manager passing it the request to display 
> proper window
>         messageToPost = "dhsv022910BeginRegisterVisitor" ;
>         putMessageToQueue(messageToPost) ;
> 
>         writeToLog("   EnterVisitorActionDisplay : perform : leaving 
> now") ;
> 
>         // Forward control to the specified success URI
>         return (mapping.findForward("enterVisitor"));
>     }
> 
> }
> 
> ============================
> Action superclass
> ============================
> package dhs.vcm.struts.action;
> 
> //  -------------------------------------------------------------- DHS 
> imports
> import dhs.struts.action.DHSAction ;
> import dhs.vcm.forte.messaging.ForteMessageException ;
> import dhs.vcm.forte.messaging.ForteMessageManager ;
> 
> import dhs.vcm.vis.business.ForteMessageProxy ;
> 
> public class VCMAction extends dhs.struts.action.DHSAction {
> 
>     public void putMessageToQueue(
>         String messageToPost) {
> 
>             writeToLog("   VCMAction.putMessageToQueue entered... about 
> to post message") ;
> 
>             ForteMessageManager.putMessage(messageToPost) ;
> 
>         }
> 
> 
>     public void getMessageFromQueue(){
> 
>                 try {
>                 String myMsg = ForteMessageManager.getMessage();
>                 writeToLog(myMsg);
> 
>                 } catch (ForteMessageException ex) {
>                 }
> 
> 
>         }
> 
> 
> }
> 
> 
> 
> 
> 
> 
> _________________________________________________________________
> MSN Photos is the easiest way to share and print your photos: 
> http://photos.msn.com/support/worldwide.aspx
> 
> 
> -- 
> To unsubscribe, e-mail:   
> <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: 
> <mailto:[EMAIL PROTECTED]>
> 


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to