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]>