Forget the system classpath.
Are the classes available:
- in a jar file such as:
webapp\myWebApp\WEB-INF\lib\MyMQClasses.jar
- or down an exploded path such as:
webapp\myWebApp\WEB-INF\com\path\to\mqclassses
I'd check the specifics how your app server manages CLASSPATH, but I'll bet
if you put the 3rd party files in one of the above two areas, it will work.
FWIW _
Kevin
"Struts Developer" <[EMAIL PROTECTED]> on 04/17/2002 04:48:04
PM
Please respond to "Struts Users Mailing List"
<[EMAIL PROTECTED]>
To: [EMAIL PROTECTED]
cc:
Subject: ActionServlet and NoClassDefFoundErrors
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]>
---------------------------------------------------------------------------
This e-mail message (including attachments, if any) is intended for the use
of the individual or entity to which it is addressed and may contain
information that is privileged, proprietary , confidential and exempt from
disclosure. If you are not the intended recipient, you are notified that
any dissemination, distribution or copying of this communication is
strictly prohibited. If you have received this communication in error,
please notify the sender and erase this e-mail message immediately.
---------------------------------------------------------------------------