Compression and Caching Filters
Found a plugin for FireFox which grades the performance of a web sites actions: https://addons.mozilla.org/en-US/firefox/addon/5369 it’s from Yahoo.
The main issues I found where:
* Too many javascript and css files resulting in multiple http get requests
* Not caching the javascript and css files
* Not caching images
* The javascript files were too big not minimized or obfuscated
* Not compressing the requests response back to the browser
I’ve been able to resolve these issues by using two Filters:
* Caching Filter – CacheFilter.zip also has the web.xml entries
* Compression Filter – got from http://www.onjava.com/pub/a/onjava/2003/11/19/filters.html (CompressionFilter.zip)
I combined as many js files into one file and then did the minimizing using a tool from Yahoo: yuicompressor-2.3.5.zip
Wednesday, April 30, 2008
Tuesday, April 22, 2008
Need to make a priority list of future development.
Put Tina's request for page renew first, however, try and push for a test/sponsor search page next.
The ideal search page would allow for a registration agent to search for a test by test code, test name or even sponsor. As well, based on these search requests, the program would auto fill fields in the test select page in order to progress further through the application.
Knowing that ACT is in the process of updating their authorization system we may have to halt future development in order to accomplish our web service registration implementation.
Alert Dennis of the problem regarding internet access via web services.
Put Tina's request for page renew first, however, try and push for a test/sponsor search page next.
The ideal search page would allow for a registration agent to search for a test by test code, test name or even sponsor. As well, based on these search requests, the program would auto fill fields in the test select page in order to progress further through the application.
Knowing that ACT is in the process of updating their authorization system we may have to halt future development in order to accomplish our web service registration implementation.
Alert Dennis of the problem regarding internet access via web services.
Monday, April 21, 2008
Tuesday, April 08, 2008
usable log4j.properties
# Set root category priority to DEBUG and its only appender to A1.
#log4j.rootCategory=DEBUG, A1
#log4j.rootCategory=DEBUG
# A1 is set to be a ConsoleAppender.
#log4j.appender.A1=org.apache.log4j.ConsoleAppender
#log4j.appender.A1=
# A1 uses PatternLayout.
#log4j.appender.A1.layout=org.apache.log4j.PatternLayout
#log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
## New Trial Stuff
log4j.rootLogger=debug, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=clockin.log
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
# Set root category priority to DEBUG and its only appender to A1.
#log4j.rootCategory=DEBUG, A1
#log4j.rootCategory=DEBUG
# A1 is set to be a ConsoleAppender.
#log4j.appender.A1=org.apache.log4j.ConsoleAppender
#log4j.appender.A1=
# A1 uses PatternLayout.
#log4j.appender.A1.layout=org.apache.log4j.PatternLayout
#log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
## New Trial Stuff
log4j.rootLogger=debug, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=clockin.log
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
call java exe
http://www.csie.ntu.edu.tw/~b90008/jniexe.html
http://java.sun.com/developer/JDCTechTips/2005/tt0727.html
pass parameters to an exe:
try {
Robot robot = new Robot();
robot.delay(1000);
// Simulate a mouse click
// robot.mousePress(InputEvent.BUTTON1_MASK);
// robot.mouseRelease(InputEvent.BUTTON1_MASK);
// Simulate a key press
robot.keyPress(KeyEvent.VK_G);
robot.keyRelease(KeyEvent.VK_G);
robot.keyPress(KeyEvent.VK_K);
robot.keyRelease(KeyEvent.VK_K);
robot.keyPress(KeyEvent.VK_3);
robot.keyRelease(KeyEvent.VK_3);
robot.keyPress(KeyEvent.VK_6);
robot.keyRelease(KeyEvent.VK_6);
robot.delay(1000);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
robot.delay(1000);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
} catch (AWTException e) {
e.printStackTrace();
}
http://www.csie.ntu.edu.tw/~b90008/jniexe.html
http://java.sun.com/developer/JDCTechTips/2005/tt0727.html
pass parameters to an exe:
try {
Robot robot = new Robot();
robot.delay(1000);
// Simulate a mouse click
// robot.mousePress(InputEvent.BUTTON1_MASK);
// robot.mouseRelease(InputEvent.BUTTON1_MASK);
// Simulate a key press
robot.keyPress(KeyEvent.VK_G);
robot.keyRelease(KeyEvent.VK_G);
robot.keyPress(KeyEvent.VK_K);
robot.keyRelease(KeyEvent.VK_K);
robot.keyPress(KeyEvent.VK_3);
robot.keyRelease(KeyEvent.VK_3);
robot.keyPress(KeyEvent.VK_6);
robot.keyRelease(KeyEvent.VK_6);
robot.delay(1000);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
robot.delay(1000);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
} catch (AWTException e) {
e.printStackTrace();
}
Tuesday, February 12, 2008
Monday, February 11, 2008
Thursday, January 17, 2008
Tuesday, November 27, 2007
java cvs functions
Checkout from CVS
Add to CVS
Commit to CVS
InnerClass LogCVSListener
Checkout from CVS
public void checkoutFromCVS(String userName, String password, String hostName, String repository) throws ExecutionException{
PServerConnection c = null;
try {
logger.info("entering checkOutImages");
String encryptedPassword = StandardScrambler.getInstance().scramble(password);
CVSRoot root = CVSRoot.parse(":pserver:"+userName+"@"+hostName+":"+SC_PORT+repository);
c = (PServerConnection)ConnectionFactory.getConnection(root);
c.setEncodedPassword(encryptedPassword);
logger.info("open connection....");
c.open();
logger.info("after open connection");
Client client = new Client(c, new StandardAdminHandler());
GlobalOptions options = new GlobalOptions();
options.setCVSRoot(":pserver:"+userName+"@"+hostName+":"+SC_PORT+repository);
client.ensureConnection();
CheckoutCommand checkout = new CheckoutCommand(true,SC_MODULE);
checkout.setPruneDirectories(true);
File f = new File(SC_CVS_HOME);
if(!f.exists())
f.mkdirs();
client.setLocalPath(SC_CVS_HOME);
client.getEventManager().addCVSListener(new LogCVSListener());
boolean success = client.executeCommand(checkout,options);
logger.info("cmd checkout execute success:"+success);
//client.executeCommand(uc, options);
} catch (CommandAbortedException e) {
logger.error("command aborted ex:"+e.getMessage());
throw new ExecutionException(e.getMessage());
} catch (AuthenticationException e) {
logger.error("authenticate ex:"+e.getMessage());
throw new ExecutionException(e.getMessage());
}catch (CommandException e) {
logger.error("command ex:"+e.getCause());
throw new ExecutionException(e.getMessage());
} finally {
if(null != c) {
try {
c.close();
} catch (IOException e) {
logger.error(e.getMessage());
}
}
}
}
Add to CVS
public void addToCVS(List filesToAdd, File fileToAdd, String userName, String password, String hostName, String repository)throws ExecutionException{
logger.info("entering addToCVS");
PServerConnection c = null;
try {
String[] children;
// It is also possible to filter the list of returned files.
// This example does not return any files that end with `.txt'.
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
if(dir.getName().equals("CVS")){
return false;
}
return true;
}
};
children = fileToAdd.list(filter);
File f = null;
for (int i=0; i < children.length; i++) {
f = new File(fileToAdd.getAbsoluteFile()+"/"+children[i]);
try {
logger.info("file:"+f.getCanonicalFile());
logger.info("is file:"+f.isFile()+" is dir:"+f.isDirectory());
if(f.isDirectory() ) {
if(!f.getName().equals("CVS")){
logger.info("recursive...");
filesToAdd.add(f);
addToCVS(filesToAdd, f, userName, password, hostName, repository);
}
}else {
filesToAdd.add(f);
}
}catch(IOException e) {
throw new ExecutionException(e.getMessage());
}
}
if(filesToAdd.size() == 0) {
logger.info("nothing to add....");
return;
}
String encryptedPassword = StandardScrambler.getInstance().scramble(password);
CVSRoot root = CVSRoot.parse(":pserver:"+userName+"@"+hostName+":"+SC_PORT+repository);
c = (PServerConnection)ConnectionFactory.getConnection(root);
c.setEncodedPassword(encryptedPassword);
logger.info("open connection....");
c.open();
logger.info("after open connection");
Client client = new Client(c, new StandardAdminHandler());
GlobalOptions options = new GlobalOptions();
options.setCVSRoot(":pserver:"+userName+"@"+hostName+":"+SC_PORT+repository);
AddCommand add = new AddCommand();
add.setMessage("adding images for site portal...");
add.setKeywordSubst(KeywordSubstitutionOptions.BINARY);
logger.info("file path:"+fileToAdd.getPath());
logger.info("file parent:"+fileToAdd.getParent());
client.setLocalPath(SC_DIR_TO_SAVE);
client.ensureConnection();
add.setFiles((File[])filesToAdd.toArray(new File[filesToAdd.size()]));
client.getEventManager().addCVSListener(new LogCVSListener());
logger.info("executing command...");
boolean success = client.executeCommand(add,options);
logger.info("cmd add execute success:"+success);
} catch (CommandAbortedException e) {
logger.error("command aborted ex:"+e.getMessage());
throw new ExecutionException(e.getMessage());
} catch (AuthenticationException e) {
logger.error("authenticate ex:"+e.getMessage());
throw new ExecutionException(e.getMessage());
}catch (CommandException e) {
logger.error("command ex:"+e.getMessage());
throw new ExecutionException(e.getMessage());
}finally {
if(null != c) {
try {
c.close();
} catch (IOException e) {
logger.error(e.getMessage());
}
}
}
logger.info("leaving addToCVS");
}
Commit to CVS
public void commitToCVS(File fileToCommit, String userName, String password, String hostName, String repository) throws ExecutionException{
PServerConnection c = null;
try {
logger.info("entering commitToCVS");
String encryptedPassword = StandardScrambler.getInstance().scramble(password);
CVSRoot root = CVSRoot.parse(":pserver:"+userName+"@"+hostName+":"+SC_PORT+repository);
c = (PServerConnection)ConnectionFactory.getConnection(root);
c.setEncodedPassword(encryptedPassword);
logger.info("open connection....");
c.open();
logger.info("after open connection");
Client client = new Client(c, new StandardAdminHandler());
GlobalOptions options = new GlobalOptions();
options.setCVSRoot(":pserver:"+userName+"@"+hostName+":"+SC_PORT+repository);
client.ensureConnection();
client.getEventManager().addCVSListener(new BasicListener());
//File file = new File(SC_CVS_HOME+"\\"+SC_MODULE+"\\resize_needed\\"+SC_TESTER);
File afile[] = new File[] { fileToCommit };
CommitCommand commit = new CommitCommand();
commit.setMessage("auto commit adding to cvs...");
commit.setFiles(afile);
commit.setForceCommit(true);
client.getEventManager().addCVSListener(new LogCVSListener());
client.setLocalPath(SC_DIR_TO_SAVE);
logger.info("executing command...");
boolean success = client.executeCommand(commit,options);
logger.info("cmd commit execute success:"+success);
//client.executeCommand(uc, options);
}catch (CommandAbortedException e) {
logger.error("command aborted ex:"+e.getMessage());
throw new ExecutionException(e.getMessage());
}catch (AuthenticationException e) {
logger.error("authenticate ex:"+e.getMessage());
throw new ExecutionException(e.getMessage());
}catch (CommandException e) {
logger.error("command ex:"+e.getCause());
throw new ExecutionException(e.getMessage());
} finally {
if(null != c) {
try {
c.close();
} catch (IOException e) {
logger.error(e.getMessage());
}
}
}
logger.info("leaving commitToCVS");
}
InnerClass LogCVSListener
static public class LogCVSListener implements CVSListener {
protected CVSCommandResult result = new CVSCommandResult();
protected Logger logger = Logger.getLogger(LogCVSListener.class.getName());
public LogCVSListener() {
}
/***
* @return Returns the result.
*/
public CVSCommandResult getResult() {
return this.result;
}
/*
* (non-Javadoc)
*
* @see org.netbeans.lib.cvsclient.event.CVSListener#messageSent(org.netbeans.lib.cvsclient.event.MessageEvent)
*/
public void messageSent(MessageEvent e) {
if (e.isError()) {
logger.error(e.getMessage());
// permet de stocker les traces
result.getTrace().append(e.getMessage() + "\n");
} else {
logger.info(e.getMessage());
}
}
/*
* (non-Javadoc)
*
* @see org.netbeans.lib.cvsclient.event.CVSListener#messageSent(org.netbeans.lib.cvsclient.event.BinaryMessageEvent)
*/
public void messageSent(BinaryMessageEvent e) {
logger.info(e.getMessage());
}
/*
* (non-Javadoc)
*
* @see org.netbeans.lib.cvsclient.event.CVSListener#fileAdded(org.netbeans.lib.cvsclient.event.FileAddedEvent)
*/
public void fileAdded(FileAddedEvent e) {
logger.debug("File has been added.");
result.getFileAdded().add(e.getFilePath());
}
/* (non-Javadoc)
* @see org.netbeans.lib.cvsclient.event.CVSListener#fileToRemove(org.netbeans.lib.cvsclient.event.FileToRemoveEvent)
*/
public void fileToRemove(FileToRemoveEvent e) {
logger.debug("File to remove: " + e.getFilePath());
//result.getFileToRemove().add(e.getFilePath());
}
/*
* (non-Javadoc)
*
* @see org.netbeans.lib.cvsclient.event.CVSListener#fileRemoved(org.netbeans.lib.cvsclient.event.FileRemovedEvent)
*/
public void fileRemoved(FileRemovedEvent e) {
logger.debug("File is removed: " + e.getFilePath());
}
/*
* (non-Javadoc)
*
* @see org.netbeans.lib.cvsclient.event.CVSListener#fileUpdated(org.netbeans.lib.cvsclient.event.FileUpdatedEvent)
*/
public void fileUpdated(FileUpdatedEvent e) {
logger.debug("File has been updated");
result.getFileUpdated().add(e.getFilePath());
}
/*
* (non-Javadoc)
*
* @see org.netbeans.lib.cvsclient.event.CVSListener#fileInfoGenerated(org.netbeans.lib.cvsclient.event.FileInfoEvent)
*/
public void fileInfoGenerated(FileInfoEvent fileInfoEvent) {
logger.debug("File status information has been received");
// Avec le diffInfo, possibilité de gestion plus fine des différences.
// DiffInformation diffInfo =
// ((SimpleDiffBuilder)fileInfoEvent.getSource()).createDiffInformation();
result.getFileInfo().add(fileInfoEvent.getInfoContainer());
}
/*
* (non-Javadoc)
*
* @see org.netbeans.lib.cvsclient.event.CVSListener#commandTerminated(org.netbeans.lib.cvsclient.event.TerminationEvent)
*/
public void commandTerminated(TerminationEvent e) {
if (e.isError()) {
logger.error("Server responses has error");
result.setError(true);
} else {
logger.debug("Server responses has OK");
}
}
/*
* (non-Javadoc)
*
* @see org.netbeans.lib.cvsclient.event.CVSListener#moduleExpanded(org.netbeans.lib.cvsclient.event.ModuleExpansionEvent)
*/
public void moduleExpanded(ModuleExpansionEvent e) {
// ne fait rien
}
}
typical keytool implementation
view the contents of a keystore
C:\jboss-4.0.3SP1\server\default\conf>keytool -genkey -dname "cn=actwskey, ou=Comira, o=CatsTest, c=US" -alias actwskey -keypass ###### -keystore d:\jboss-4.0.3SP1\server\default\conf\keys\actwskey.keystore -storepass ###### validity 180 -keysize 1024 -keyalg RSA
view the contents of a keystore
keytool -list -v -keystore keys\actwskey.keystore
Monday, November 26, 2007
Example calling axis endpoint and jwsdp endpoint
jwsdp ex
private void doAxisImpl(){
try {
Service service = new Service();
Call call = (Call) service.createCall();
String url = "http://cwcdev.corporate.act.org/schedule/ALMVTC.WSDL";
call.setTargetEndpointAddress(new java.net.URL(url));
org.apache.axis.message.SOAPEnvelope env = new org.apache.axis.message.SOAPEnvelope();
org.apache.axis.message.SOAPBodyElement sbe
//= new org.apache.axis.message.SOAPBodyElement(XMLUtils.StringToElement("http://cwcdev.corporate.act.org/schedule/ALMVTC.WSDL", "getVersion", ""));
= new org.apache.axis.message.SOAPBodyElement(XMLUtils.StringToElement("http://actcenters.com/ALMVTC/message/", "sayHello", ""));
SOAPFactory factory = SOAPFactoryImpl.newInstance();
Name name = factory.createName("name");
SOAPElement param = sbe.addChildElement(name);
param.addTextNode("James Zhang");
call.setProperty(Call.SOAPACTION_USE_PROPERTY, new Boolean(true));
call.setProperty(Call.SOAPACTION_URI_PROPERTY, "http://actcenters.com/ALMVTC/action/Schedule.sayHello");
call.addParameter("name", Constants.XSD_STRING, ParameterMode.IN);
env.addBodyElement(sbe);
//XMLUtils.PrettyElementToStream(env.getAsDOM(), System.out);
//env = new SignedSOAPEnvelope(env, "http://cwcdev.corporate.act.org");
System.out.println("\n============= Request ==============");
XMLUtils.PrettyElementToStream(env.getAsDOM(), System.out);
call.invoke(env);
MessageContext mc = call.getMessageContext();
System.out.println("\n============= Response ==============");
XMLUtils.PrettyElementToStream(mc.getResponseMessage().getSOAPEnvelope().getAsDOM(), System.out);
}
catch (Exception e) {
e.printStackTrace();
}
}
jwsdp ex
private void doSOAPImpl(){
/**/
SOAPConnection soapConn = null;
try {
MessageFactory msgFactory = MessageFactory.newInstance();
SOAPMessage msg = msgFactory.createMessage();
msg.setProperty(SOAPMessage.WRITE_XML_DECLARATION, "true");
msg.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, "utf-8");
msg.getMimeHeaders().addHeader("SOAPAction", "http://actcenters.com/ALMVTC/action/Schedule.sayHello");
// SOAPPart soapPart = msg.getSOAPPart();
// SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
// for the tutorial web service, we don't have any headers,
// so get the "free" one and detach it:
//SOAPHeader soapHeader = soapEnvelope.getHeader();
//soapHeader.detachNode();
// to the body, add the document we want to send to the
// ping request web service:
SOAPBody body = msg.getSOAPBody();
SOAPFactory soapFactory = SOAPFactory.newInstance();
Name bodyName = soapFactory.createName("sayHello", "wsdlns", "http://actcenters.com/ALMVTC/message/"
);
SOAPBodyElement bodyElement = body.addBodyElement(bodyName);
Name paramName = soapFactory.createName("name");
SOAPElement param = bodyElement.addChildElement(paramName);
param.addTextNode("James Zhang");
// echo the document first:
System.out.println("\nAbout to send the following SOAPMessage:\n");
msg.writeTo(System.out);
String url = "http://cwcdev.corporate.act.org/schedule/ALMVTC.WSDL";
System.out.println("\nto endpoint URL "+url+"\n");
// ...then send it, and echo the response:
SOAPConnectionFactory soapConnFactory = SOAPConnectionFactory.newInstance();
soapConn = soapConnFactory.createConnection();
SOAPMessage responseMsg = soapConn.call(msg, url);
System.out.println("\nGot the following SOAPMessage in response:\n");
responseMsg.writeTo(System.out);
} catch (UnsupportedOperationException e) {
logger.error(e.getMessage());
} catch (SOAPException e) {
logger.error(e.getMessage());
} catch (IOException e) {
logger.error(e.getMessage());
}finally{
try {
soapConn.close();
} catch (SOAPException e) {
e.printStackTrace();
}
}
}
Wednesday, November 21, 2007
WS-Security using JBoss-4.0.3SP1 and jwsdp-1.6
http://www.devx.com/Java/Article/28816/1954?pf=true
http://xfire.codehaus.org/WS-Security
A more detailed description of key generation can be found here:
http://www.churchillobjects.com/c/11201e.html
http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/keytool.html
How to create a production certificate can be found here:
http://support.globalsign.net/en/objectsign/java.cfm
http://www.devx.com/Java/Article/28816/1954?pf=true
http://xfire.codehaus.org/WS-Security
A more detailed description of key generation can be found here:
http://www.churchillobjects.com/c/11201e.html
http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/keytool.html
How to create a production certificate can be found here:
http://support.globalsign.net/en/objectsign/java.cfm
Thursday, November 08, 2007
Thursday, October 18, 2007
Adding Web-Service support to JBoss-4.0.5.GA
download the web services kit from jboss - jbossws-native-2.0.0.GA
follow the install instructions.
- 2.0.0.GA is missing the wstx.jar. get it from 2.0.1 and put it in jboss_home\client
- would have used 2.0.1 but there were problems in the deployment
to execute wscompile use wsconsume
I have also added WSCONSUME_CLASSPATH to my system variables. Not sure if this is needed. It points to my JBOSSWS2.0.0.GA\lib dir
anyType a huge pain with rpc/encoded documents
deploy jbossws using the following:
download the web services kit from jboss - jbossws-native-2.0.0.GA
follow the install instructions.
- 2.0.0.GA is missing the wstx.jar. get it from 2.0.1 and put it in jboss_home\client
- would have used 2.0.1 but there were problems in the deployment
to execute wscompile use wsconsume
C:\projects-cal-ws\act-ws-scheduler\client>wsconsume -k -p com.comira -o ./WebContent/WEB-INF/classes -s ./src -w http://cwcdev.corporate.act.org/schedule/ALMVTC.WSDL ./WebContent/WEB-INF/wsdl/ALMVTC.WSDL
I have also added WSCONSUME_CLASSPATH to my system variables. Not sure if this is needed. It points to my JBOSSWS2.0.0.GA\lib dir
anyType a huge pain with rpc/encoded documents
deploy jbossws using the following:
C:\jbossws-native-2.0.0.GA>ant deploy-jboss40
Monday, September 10, 2007
Tuesday, February 20, 2007
Struts -> Tiles -> RequestProcessor
I've been battling all day with JBoss and struts and feel that this one is gonna need some documentation in case it ever creeps up and bites me in the ass again.
I switched from jboss-4.0.2 to jboss-4.0.3sp1 and have been gettin hit left and right with things that just don't fucking work. Or perhaps it's the way I've done them that don't fucking work. Well anyways, here's what happened.
The .ear that I deploy requests for a UnifiedClassLoader so as to enjoy the ability to package individual utility classes into reusable components.
Anyways, I had a struts.jar in the .war/lib dir and jboss kept tellin me that the RequestProcessor wasn't compatible with TilesRequestProcessor. Just delete your damn .jar file from the .war next time. NOTE TO SELF - DON'T DO STUPID THINGS!!!!
I've been battling all day with JBoss and struts and feel that this one is gonna need some documentation in case it ever creeps up and bites me in the ass again.
I switched from jboss-4.0.2 to jboss-4.0.3sp1 and have been gettin hit left and right with things that just don't fucking work. Or perhaps it's the way I've done them that don't fucking work. Well anyways, here's what happened.
The .ear that I deploy requests for a UnifiedClassLoader so as to enjoy the ability to package individual utility classes into reusable components.
Anyways, I had a struts.jar in the .war/lib dir and jboss kept tellin me that the RequestProcessor wasn't compatible with TilesRequestProcessor. Just delete your damn .jar file from the .war next time. NOTE TO SELF - DON'T DO STUPID THINGS!!!!
Subscribe to:
Posts (Atom)



