<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2529616848118972172</id><updated>2012-01-25T12:25:32.945-08:00</updated><title type='text'>Server-side Java Problems and Solutions</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://javastack.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://javastack.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>MK</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/2484/160/1600/m1.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2529616848118972172.post-2909788752466901156</id><published>2012-01-25T12:21:00.001-08:00</published><updated>2012-01-25T12:25:32.957-08:00</updated><title type='text'>Using rsync to deploy from staging server to production</title><content type='html'>cat rsync_a_to_b.sh &lt;br /&gt;# script that synchronizes files from location A to location B via a local temp directory&lt;br /&gt;USER_A=ec2-user&lt;br /&gt;HOST_A="$1"&lt;br /&gt;PATH_A="$2"&lt;br /&gt;USER_B=ec2-user&lt;br /&gt;HOST_B="$3"&lt;br /&gt;PATH_B="$4"&lt;br /&gt;&lt;br /&gt;if [ -z $HOST_A ]; then  # -n tests to see if the argument is non empty&lt;br /&gt; echo "Missing source host argument, usage: [cmd] sourceHost sourcePath targetHost targetPath"&lt;br /&gt;        exit 1&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;if [ -z $PATH_A ]; then         # -n tests to see if the argument is non empty&lt;br /&gt;        echo "Missing source path argument, usage: [cmd] sourceHost sourcePath targetHost targetPath"&lt;br /&gt;        exit 1&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;if [ -z $HOST_B ]; then         # -n tests to see if the argument is non empty&lt;br /&gt;        echo "Missing target host argument, usage: [cmd] sourceHost sourcePath targetHost targetPath"&lt;br /&gt;        exit 1&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;if [ -z $PATH_B ]; then         # -n tests to see if the argument is non empty&lt;br /&gt;        echo "Missing target path argument, usage: [cmd] sourceHost sourcePath targetHost targetPath"&lt;br /&gt;        exit 1&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;LOCAL_DIR=/tmp/rsync/${HOST_A}${PATH_A}&lt;br /&gt;&lt;br /&gt;echo STEP 1: Syncing from ${HOST_A}:${PATH_A} to localhost:${LOCAL_DIR}..&lt;br /&gt;mkdir -p ${LOCAL_DIR}&lt;br /&gt;&lt;br /&gt;rsync -e ssh -rcav --delete-after \&lt;br /&gt;  ${USER_A}@${HOST_A}:${PATH_A} \&lt;br /&gt;  --exclude '.svn/**' \&lt;br /&gt;  ${LOCAL_DIR}&lt;br /&gt;&lt;br /&gt;echo STEP 2: Syncing from localhost:${LOCAL_DIR} to ${HOST_B}:${PATH_B}..&lt;br /&gt;&lt;br /&gt;rsync -e ssh -rcav --delete-after \&lt;br /&gt;  $LOCAL_DIR/* \&lt;br /&gt;  ${USER_B}@${HOST_B}:${PATH_B}&lt;br /&gt;&lt;br /&gt;echo DONE.&lt;br /&gt;&lt;br /&gt;------------------------------&lt;br /&gt;&lt;br /&gt;Then write a script to use the above function for every directory, like this:&lt;br /&gt;&lt;br /&gt;cat push_stage_to_prod.sh &lt;br /&gt;BASE=./&lt;br /&gt;&lt;br /&gt;SOURCE_HOST=[mystagehost]&lt;br /&gt;TARGET_HOST=[myprodhost]&lt;br /&gt;&lt;br /&gt;echo Pushing entire application codebase from ${SOURCE_HOST} to ${TARGET_HOST}...&lt;br /&gt;&lt;br /&gt;$BASE/rsync_a_to_b.sh $SOURCE_HOST \&lt;br /&gt;  '/my/app/tomcat/webapps/ROOT/WEB-INF/*.xml' \&lt;br /&gt;  $TARGET_HOST \&lt;br /&gt;  /my/app/tomcat/webapps/ROOT/WEB-INF/&lt;br /&gt;&lt;br /&gt;$BASE/rsync_a_to_b.sh $SOURCE_HOST \&lt;br /&gt;  '/my/app/tomcat/webapps/ROOT/WEB-INF/classes/*' \&lt;br /&gt;  $TARGET_HOST \&lt;br /&gt;  /my/app/tomcat/webapps/ROOT/WEB-INF/classes/&lt;br /&gt;&lt;br /&gt;$BASE/rsync_a_to_b.sh $SOURCE_HOST \&lt;br /&gt;  '/my/app/tomcat/webapps/ROOT/WEB-INF/lib/*' \&lt;br /&gt;  $TARGET_HOST \&lt;br /&gt;  /my/app/tomcat/webapps/ROOT/WEB-INF/lib/&lt;br /&gt;&lt;br /&gt;$BASE/rsync_a_to_b.sh $SOURCE_HOST \&lt;br /&gt;  '/my/app/lib/m2reposymlink/*' \&lt;br /&gt;  $TARGET_HOST \&lt;br /&gt;  /my/app/lib/m2reposymlink/&lt;br /&gt;&lt;br /&gt;$BASE/rsync_a_to_b.sh $SOURCE_HOST \&lt;br /&gt;  '/my/app/webcode/*' \&lt;br /&gt;  $TARGET_HOST \&lt;br /&gt;  /my/app/webcode/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2529616848118972172-2909788752466901156?l=javastack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javastack.blogspot.com/feeds/2909788752466901156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2529616848118972172&amp;postID=2909788752466901156' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/2909788752466901156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/2909788752466901156'/><link rel='alternate' type='text/html' href='http://javastack.blogspot.com/2012/01/using-rsync-to-deploy-from-staging.html' title='Using rsync to deploy from staging server to production'/><author><name>MK</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/2484/160/1600/m1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2529616848118972172.post-6318271227799136780</id><published>2012-01-25T12:19:00.000-08:00</published><updated>2012-01-25T12:20:27.197-08:00</updated><title type='text'>File deployment script that uses rsync</title><content type='html'>cat function_rsync.sh &lt;br /&gt;LOCAL_SYNC_PATH="$1"&lt;br /&gt;REMOTE_USER="$2"&lt;br /&gt;REMOTE_HOST="$3"&lt;br /&gt;REMOTE_PATH="$4"&lt;br /&gt;&lt;br /&gt;echo user=$REMOTE_USER&lt;br /&gt;echo ..syncing directory "$LOCAL_SYNC_PATH" to server ${REMOTE_HOST}..&lt;br /&gt;&lt;br /&gt;rsync -e ssh -rcav --delete-after \&lt;br /&gt;  $LOCAL_SYNC_PATH \&lt;br /&gt;  ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2529616848118972172-6318271227799136780?l=javastack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javastack.blogspot.com/feeds/6318271227799136780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2529616848118972172&amp;postID=6318271227799136780' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/6318271227799136780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/6318271227799136780'/><link rel='alternate' type='text/html' href='http://javastack.blogspot.com/2012/01/file-deployment-script-that-uses-rsync.html' title='File deployment script that uses rsync'/><author><name>MK</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/2484/160/1600/m1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2529616848118972172.post-3277975973466964222</id><published>2012-01-25T12:16:00.000-08:00</published><updated>2012-01-25T12:18:47.445-08:00</updated><title type='text'>Local subversion backup</title><content type='html'># Settings&lt;br /&gt;LOCALREPO='/root/backup/[myapp]/svn_repo'&lt;br /&gt;REMOTEHOST='[myhost]'&lt;br /&gt;REMOTEREPO='/var/www/svn/repos/[myapp]'&lt;br /&gt;REMOTEUSER='[myuser]'&lt;br /&gt;&lt;br /&gt;### WARNING: Danger Will Robinson ###&lt;br /&gt;### DO NOT EDIT BELOW THIS LINE ###&lt;br /&gt;&lt;br /&gt;LOCALVER=`/usr/bin/svnlook youngest ${LOCALREPO}`&lt;br /&gt;REMOTEVER=`/usr/bin/ssh ${REMOTEUSER}@${REMOTEHOST} /usr/bin/svnlook youngest ${REMOTEREPO}`&lt;br /&gt;&lt;br /&gt;echo "Local version is ${LOCALVER}"&lt;br /&gt;echo "Remote version is ${REMOTEVER}"&lt;br /&gt;&lt;br /&gt;if [ "$REMOTEVER" -gt "$LOCALVER" ];&lt;br /&gt;then&lt;br /&gt;  echo "Remote version is greater than local version"&lt;br /&gt;  START=$(echo "${LOCALVER} + 1" | /usr/bin/bc -l)&lt;br /&gt;  /usr/bin/ssh ${REMOTEUSER}@${REMOTEHOST} /usr/bin/svnadmin dump --incremental --deltas --revision ${START}:${REMOTEVER} ${REMOTEREPO} | /usr/bin/svnadmin load --ignore-uuid ${LOCALREPO}&lt;br /&gt;else&lt;br /&gt;  echo "Both local and remote version have the same data"&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;--------&lt;br /&gt;Schedule with this cron file:&lt;br /&gt;cat myapp_svn_backup.cron &lt;br /&gt;#!/bin/bash&lt;br /&gt;cd /root/backup/[myapp]/svn_logs&lt;br /&gt;logfilename="subversion_backup_"`eval date +%Y%m%d`".log"&lt;br /&gt;/root/backup/[myapp]/run_svn_backup.sh &gt; $logfilename&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2529616848118972172-3277975973466964222?l=javastack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javastack.blogspot.com/feeds/3277975973466964222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2529616848118972172&amp;postID=3277975973466964222' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/3277975973466964222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/3277975973466964222'/><link rel='alternate' type='text/html' href='http://javastack.blogspot.com/2012/01/local-subversion-backup.html' title='Local subversion backup'/><author><name>MK</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/2484/160/1600/m1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2529616848118972172.post-1945893085577154134</id><published>2012-01-25T12:13:00.000-08:00</published><updated>2012-01-25T12:14:26.290-08:00</updated><title type='text'>Local mysql backups (one file per table)</title><content type='html'>&gt; cat run_mysql_backup.sh &lt;br /&gt;export backupsdir=/root/backup/[myapp]/mysql_backups&lt;br /&gt;export d=`eval date +%Y%m%d`&lt;br /&gt;mkdir -p $backupsdir/$d&lt;br /&gt;for i in `echo "show tables" | mysql -h[host] -u root -p[pass] [dbname]|grep -v Tables_in_`;&lt;br /&gt;do&lt;br /&gt;  echo $i; mysqldump --add-drop-table --allow-keywords -q -a -c -h[host] -u root -p[pass] [dbname] $i &gt; $backupsdir/$d/$i.sql&lt;br /&gt;  rm -f $backupsdir/$d/$i.sql.gz&lt;br /&gt;  gzip $backupsdir/$d/$i.sql&lt;br /&gt;done&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2529616848118972172-1945893085577154134?l=javastack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javastack.blogspot.com/feeds/1945893085577154134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2529616848118972172&amp;postID=1945893085577154134' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/1945893085577154134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/1945893085577154134'/><link rel='alternate' type='text/html' href='http://javastack.blogspot.com/2012/01/local-mysql-backups-one-file-per-table.html' title='Local mysql backups (one file per table)'/><author><name>MK</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/2484/160/1600/m1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2529616848118972172.post-3229657918578714862</id><published>2012-01-25T11:59:00.000-08:00</published><updated>2012-01-25T12:01:17.456-08:00</updated><title type='text'>Working with Amazon AWS EC2 EBS RAID volumes</title><content type='html'>HOW TO MOUNT AN EBS VOLUME&lt;br /&gt;cat /proc/partitions&lt;br /&gt;mke2fs -F -j /dev/sdp&lt;br /&gt;mkdir /[dir]&lt;br /&gt;mount /dev/sdh /[dir]&lt;br /&gt;&lt;br /&gt;WORKING WITH MDADM LINUX SOFTWARE RAID&lt;br /&gt;http://www.thatsgeeky.com/2010/09/setting-up-a-raid-on-ec2/&lt;br /&gt;http://hughperkins.com/techblog/2009/12/02/using-mdadm-software-raid-with-ec2-ebs-disks/&lt;br /&gt;cat /etc/mdadm.conf   # see config&lt;br /&gt;cat /proc/mdstat    # see status&lt;br /&gt;mdadm --detail --scan &gt;&gt; /etc/mdadm.conf     # generate new config line&lt;br /&gt;ALT: mdadm --examine --scan [--config=mdadm.conf] &gt;&gt; mdadm.conf  # generate new config line&lt;br /&gt;mdadm --assemble --verbose /dev/md0 /dev/sdc1 /dev/sdd1 /dev/sda1 /dev/sdb1    # assemble an array with the listed volumes in order&lt;br /&gt;mdadm --assemble --scan # Don't name the drives as mdadm will scan for the UUID and assemble from the ones that match the array UUID.&lt;br /&gt;mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/sdh1 /dev/sdh2   # create a new array&lt;br /&gt;&lt;br /&gt;BACKUPS&lt;br /&gt;nohup cp -R /solr_data/ /BACKUP/[dir]/ &amp;&lt;br /&gt;&lt;br /&gt;ATTACHING AND DETACHING EC2 VOLUMES&lt;br /&gt;http://alestic.com/2009/06/ec2-ebs-raid&lt;br /&gt;echo solr0&lt;br /&gt;ec2-detach-volume vol-f01b7a99&lt;br /&gt;ec2-attach-volume -d /dev/sdf -i i-dc5c7cb1 vol-f01b7a99&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2529616848118972172-3229657918578714862?l=javastack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javastack.blogspot.com/feeds/3229657918578714862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2529616848118972172&amp;postID=3229657918578714862' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/3229657918578714862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/3229657918578714862'/><link rel='alternate' type='text/html' href='http://javastack.blogspot.com/2012/01/working-with-amazon-aws-ec2-ebs-raid.html' title='Working with Amazon AWS EC2 EBS RAID volumes'/><author><name>MK</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/2484/160/1600/m1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2529616848118972172.post-8411812683765233149</id><published>2012-01-25T11:51:00.000-08:00</published><updated>2012-01-25T12:07:46.176-08:00</updated><title type='text'>Automated backup of Amazon AWS EBS volumes onto EBS snapshots</title><content type='html'>Use an ubuntu server such as Amazon AMI: alestic-git-server-ubuntu-10.10-maverick-i386-20110322 (ami-1250a27b)&lt;br /&gt;&lt;br /&gt;Find AWS accedd key id/secret under AWS web interface, My Account, Security Credentials&lt;br /&gt;&lt;br /&gt;Create file [app name].sh with contents:&lt;br /&gt;PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&lt;br /&gt;ec2-consistent-snapshot \&lt;br /&gt; --aws-access-key-id XXXX \&lt;br /&gt; --aws-secret-access-key XXXX \&lt;br /&gt; --description "[app name] [directory path] $(date +'%Y-%m-%d %H:%M:%S') UTC" \&lt;br /&gt; vol-XXXX&lt;br /&gt;&lt;br /&gt;Schedule cron:&lt;br /&gt;crontab -e&lt;br /&gt;0 5 * * * /home/ubuntu/backup-[app name].sh&lt;br /&gt;&lt;br /&gt;Reference:&lt;br /&gt;http://alestic.com/2011/02/ec2-consistent-snapshot-sceencast&lt;br /&gt;http://aws.amazon.com/articles/1663&lt;br /&gt;http://serverfault.com/questions/315930/why-cant-xfs-freeze-find-this-directory-when-called-with-ec2-consistent-snapsho&lt;br /&gt;&lt;br /&gt;Other ideas here:&lt;br /&gt;http://www.agileweboperations.com/poor-mans-automated-snapshots-for-ec2&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2529616848118972172-8411812683765233149?l=javastack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javastack.blogspot.com/feeds/8411812683765233149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2529616848118972172&amp;postID=8411812683765233149' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/8411812683765233149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/8411812683765233149'/><link rel='alternate' type='text/html' href='http://javastack.blogspot.com/2012/01/automated-backup-of-amazon-aws-ebs.html' title='Automated backup of Amazon AWS EBS volumes onto EBS snapshots'/><author><name>MK</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/2484/160/1600/m1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2529616848118972172.post-5956329576166290051</id><published>2011-09-06T08:04:00.001-07:00</published><updated>2011-09-06T08:04:50.082-07:00</updated><title type='text'>Test post</title><content type='html'>Testing post&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2529616848118972172-5956329576166290051?l=javastack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javastack.blogspot.com/feeds/5956329576166290051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2529616848118972172&amp;postID=5956329576166290051' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/5956329576166290051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/5956329576166290051'/><link rel='alternate' type='text/html' href='http://javastack.blogspot.com/2011/09/test-post.html' title='Test post'/><author><name>MK</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/2484/160/1600/m1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2529616848118972172.post-6527743897838857859</id><published>2011-06-03T13:17:00.001-07:00</published><updated>2011-06-03T13:23:18.274-07:00</updated><title type='text'>Recursively fetch directory via FTP using WGET</title><content type='html'>wget --user=[user] --password=[pass] -r ftp://ftp.somesite.com/dirA/dirB/*&lt;br /&gt;&lt;br /&gt;Just add the "-N" option to wget to ignore files older than what you have locally. You could also add the "-nc" to completely skip a file if it already exists, even if the one on FTP is newer.&lt;br /&gt;http://superuser.com/questions/58300/latest-file-from-ftp-server-using-wget-or-some-other-way&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2529616848118972172-6527743897838857859?l=javastack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javastack.blogspot.com/feeds/6527743897838857859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2529616848118972172&amp;postID=6527743897838857859' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/6527743897838857859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/6527743897838857859'/><link rel='alternate' type='text/html' href='http://javastack.blogspot.com/2011/06/recursively-fetch-directory-via-ftp.html' title='Recursively fetch directory via FTP using WGET'/><author><name>MK</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/2484/160/1600/m1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2529616848118972172.post-6355521747274282665</id><published>2011-06-03T08:59:00.000-07:00</published><updated>2011-06-03T09:00:36.325-07:00</updated><title type='text'>bash script for copying and chown-ing contents of /home</title><content type='html'>&lt;pre&gt;&lt;br /&gt;BASE="/home/ec2-user/feeds/transit"&lt;br /&gt;&lt;br /&gt;for file in /home/*&lt;br /&gt;do&lt;br /&gt;  if [ "$file" != "/home/ec2-user" ]; then&lt;br /&gt;    echo Copying ${file} to ${BASE}${file}&lt;br /&gt;    mkdir -p ${BASE}${file}&lt;br /&gt;    sudo bash -c "cp -vr ${file}/* ${BASE}${file}"&lt;br /&gt;  fi&lt;br /&gt;done&lt;br /&gt;sudo bash -c "chown -vR ec2-user:ec2-user $BASE/*"&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2529616848118972172-6355521747274282665?l=javastack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javastack.blogspot.com/feeds/6355521747274282665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2529616848118972172&amp;postID=6355521747274282665' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/6355521747274282665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/6355521747274282665'/><link rel='alternate' type='text/html' href='http://javastack.blogspot.com/2011/06/bash-script-for-copying-and-chown-ing.html' title='bash script for copying and chown-ing contents of /home'/><author><name>MK</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/2484/160/1600/m1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2529616848118972172.post-7406841758769937712</id><published>2011-03-11T13:44:00.000-08:00</published><updated>2011-03-11T13:47:20.108-08:00</updated><title type='text'>java awt headless fonts not installed on openjdk by default</title><content type='html'>On this Linux box:&lt;br /&gt;$ uname -a&lt;br /&gt;Linux ip-10-202-214-140 2.6.34.7-56.40.amzn1.i686 #1 SMP Fri Oct 22 18:48:33 UTC 2010 i686 i686 i386 GNU/Linux&lt;br /&gt;&lt;br /&gt;We got this exception on when trying to generate a PDF from a URL using the PDF library from org.zefer.pd4ml:&lt;br /&gt;&lt;br /&gt;java.lang.Error: Probable fatal error:No fonts found.&lt;br /&gt; sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1088)&lt;br /&gt; sun.font.FontManager.initialiseDeferredFont(FontManager.java:960)&lt;br /&gt; sun.font.FontManager.findOtherDeferredFont(FontManager.java:899)&lt;br /&gt; sun.font.FontManager.findDeferredFont(FontManager.java:916)&lt;br /&gt; sun.font.FontManager.findFont2D(FontManager.java:1904)&lt;br /&gt;....&lt;br /&gt; org.zefer.pd4ml.PD4ML.render(Unknown Source)&lt;br /&gt; org.zefer.pd4ml.PD4ML.render(Unknown Source)&lt;br /&gt; com.boathouseinc.project.template.pdf.UrlToPdfServlet.doGet(UrlToPdfServlet.java:84)&lt;br /&gt; javax.servlet.http.HttpServlet.service(HttpServlet.java:617)&lt;br /&gt; javax.servlet.http.HttpServlet.service(HttpServlet.java:717)&lt;br /&gt;&lt;br /&gt;Problem was resolved by installing liberation-fonts thusly:&lt;br /&gt;sudo yum install liberation-fonts&lt;br /&gt;&lt;br /&gt;Reference: &lt;br /&gt;https://bugzilla.redhat.com/show_bug.cgi?id=478480&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2529616848118972172-7406841758769937712?l=javastack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javastack.blogspot.com/feeds/7406841758769937712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2529616848118972172&amp;postID=7406841758769937712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/7406841758769937712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/7406841758769937712'/><link rel='alternate' type='text/html' href='http://javastack.blogspot.com/2011/03/java-awt-headless-fonts-not-installed.html' title='java awt headless fonts not installed on openjdk by default'/><author><name>MK</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/2484/160/1600/m1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2529616848118972172.post-5295278398371752032</id><published>2011-02-22T14:16:00.000-08:00</published><updated>2011-03-17T13:18:50.015-07:00</updated><title type='text'>java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()</title><content type='html'>For me, this error was caused by a conflict within Eclipse:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [spring-data.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [spring-data.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z&lt;br /&gt; at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)&lt;br /&gt; at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)&lt;br /&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1325)&lt;br /&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086)&lt;br /&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)&lt;br /&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)&lt;br /&gt; at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)&lt;br /&gt; at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)&lt;br /&gt; at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)&lt;br /&gt; at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)&lt;br /&gt; at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)&lt;br /&gt; at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)&lt;br /&gt; at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)&lt;br /&gt; at com.boathouse.autosite.BaseSpringContextAwareTestCase.setUp(BaseSpringContextAwareTestCase.java:30)&lt;br /&gt; at junit.framework.TestCase.runBare(TestCase.java:125)&lt;br /&gt; at junit.framework.TestResult$1.protect(TestResult.java:106)&lt;br /&gt; at junit.framework.TestResult.runProtected(TestResult.java:124)&lt;br /&gt; at junit.framework.TestResult.run(TestResult.java:109)&lt;br /&gt; at junit.framework.TestCase.run(TestCase.java:118)&lt;br /&gt; at junit.framework.TestSuite.runTest(TestSuite.java:208)&lt;br /&gt; at junit.framework.TestSuite.run(TestSuite.java:203)&lt;br /&gt; at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)&lt;br /&gt; at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)&lt;br /&gt; at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)&lt;br /&gt; at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)&lt;br /&gt; at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)&lt;br /&gt; at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)&lt;br /&gt;Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [spring-data.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z&lt;br /&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420)&lt;br /&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)&lt;br /&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)&lt;br /&gt; at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)&lt;br /&gt; at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)&lt;br /&gt; at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)&lt;br /&gt; at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)&lt;br /&gt; at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)&lt;br /&gt; ... 26 more&lt;br /&gt;Caused by: java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z&lt;br /&gt; at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1912)&lt;br /&gt; at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:796)&lt;br /&gt; at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:707)&lt;br /&gt; at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3977)&lt;br /&gt; at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3931)&lt;br /&gt; at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1368)&lt;br /&gt; at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1345)&lt;br /&gt; at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:717)&lt;br /&gt; at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)&lt;br /&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)&lt;br /&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)&lt;br /&gt; ... 33 more&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;UPDATE: Scratch the conclusion above.  Turned out that I had a maven dependency on persistence-api-1.0.jar after all.  I still don't understand why it didn't show up on eclipse or mvn dependency:tree.  Perhaps it was because the sub-component dependency specified &amp;lt;provided&amp;gt;true&amp;lt;/provided&amp;gt;.  Further info &lt;a href="http://stackoverflow.com/questions/3189056/hibernate-3-5-x-nosuchmethoderror-javax-persistence-onetomany-orphanremoval"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2529616848118972172-5295278398371752032?l=javastack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javastack.blogspot.com/feeds/5295278398371752032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2529616848118972172&amp;postID=5295278398371752032' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/5295278398371752032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/5295278398371752032'/><link rel='alternate' type='text/html' href='http://javastack.blogspot.com/2011/02/javalangnosuchmethoderror.html' title='java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()'/><author><name>MK</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/2484/160/1600/m1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2529616848118972172.post-6514528268892996921</id><published>2011-01-04T08:28:00.000-08:00</published><updated>2011-01-04T08:40:10.736-08:00</updated><title type='text'>Iterating over Map in Freemarker</title><content type='html'>Imagine you have a Map of car dealers and vehicles:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;Map&amp;lt;String, List&amp;lt;Vehicle&amp;gt;&amp;gt; vehiclesByDealer = new TreeMap&amp;lt;String, List&amp;lt;Vehicle&amp;gt;&amp;gt;();&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Turns out it can be tricky to iterate over such a Map in Freemarker.  As a workaround, add the keySet to the Model as a separate String list:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;mv.addObject("vehiclesByDealerName", vehiclesByDealer);&lt;br /&gt;mv.addObject("dealerNames", vehiclesByDealer.keySet());&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then iterate like this:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;#list dealerNames as dealerName&amp;gt;&lt;br /&gt;&amp;#9;&amp;lt;#assign vehicles = vehiclesByDealerName[dealerName] /&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;/#list&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2529616848118972172-6514528268892996921?l=javastack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javastack.blogspot.com/feeds/6514528268892996921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2529616848118972172&amp;postID=6514528268892996921' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/6514528268892996921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/6514528268892996921'/><link rel='alternate' type='text/html' href='http://javastack.blogspot.com/2011/01/iterating-over-map-in-freemarker.html' title='Iterating over Map in Freemarker'/><author><name>MK</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/2484/160/1600/m1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2529616848118972172.post-8883110207206933280</id><published>2010-07-08T07:34:00.000-07:00</published><updated>2010-07-08T08:26:27.093-07:00</updated><title type='text'>A failed attempt to recover a corrupt solr / lucene index with a missing segments_N file</title><content type='html'>&lt;h3&gt;Basic problem:&lt;/h3&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;SEVERE: Could not start SOLR. Check solr/home property&lt;br /&gt;java.lang.RuntimeException: java.io.FileNotFoundException: /solr_data/data/index/segments_l2b (No such file or directory)&lt;br /&gt; at org.apache.solr.core.SolrCore.getSearcher(SolrCore.java:1051)&lt;br /&gt; at org.apache.solr.core.SolrCore.&lt;init&gt;(SolrCore.java:565)&lt;br /&gt; at org.apache.solr.core.CoreContainer$Initializer.initialize(CoreContainer.java:130)&lt;br /&gt; at org.apache.solr.servlet.SolrDispatchFilter.init(SolrDispatchFilter.java:83)&lt;br /&gt; at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)&lt;br /&gt; at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)&lt;br /&gt; at org.apache.catalina.core.ApplicationFilterConfig.&lt;init&gt;(ApplicationFilterConfig.java:108)&lt;br /&gt; at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3800)&lt;br /&gt; at org.apache.catalina.core.StandardContext.start(StandardContext.java:4450)&lt;br /&gt; at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)&lt;br /&gt; at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)&lt;br /&gt; at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)&lt;br /&gt; at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:630)&lt;br /&gt; at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:556)&lt;br /&gt; at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:491)&lt;br /&gt; at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206)&lt;br /&gt; at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314)&lt;br /&gt; at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)&lt;br /&gt; at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)&lt;br /&gt; at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)&lt;br /&gt; at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)&lt;br /&gt; at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)&lt;br /&gt; at org.apache.catalina.core.StandardService.start(StandardService.java:516)&lt;br /&gt; at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)&lt;br /&gt; at org.apache.catalina.startup.Catalina.start(Catalina.java:583)&lt;br /&gt; at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&lt;br /&gt; at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)&lt;br /&gt; at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)&lt;br /&gt; at java.lang.reflect.Method.invoke(Method.java:597)&lt;br /&gt; at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)&lt;br /&gt; at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)&lt;br /&gt;Caused by: java.io.FileNotFoundException: /solr_data/data/index/segments_l2b (No such file or directory)&lt;br /&gt; at java.io.RandomAccessFile.open(Native Method)&lt;br /&gt; at java.io.RandomAccessFile.&lt;init&gt;(RandomAccessFile.java:212)&lt;br /&gt; at org.apache.lucene.store.SimpleFSDirectory$SimpleFSIndexInput$Descriptor.&lt;init&gt;(SimpleFSDirectory.java:77)&lt;br /&gt; at org.apache.lucene.store.SimpleFSDirectory$SimpleFSIndexInput.&lt;init&gt;(SimpleFSDirectory.java:107)&lt;br /&gt; at org.apache.lucene.store.NIOFSDirectory$NIOFSIndexInput.&lt;init&gt;(NIOFSDirectory.java:93)&lt;br /&gt; at org.apache.lucene.store.NIOFSDirectory.openInput(NIOFSDirectory.java:69)&lt;br /&gt; at org.apache.lucene.store.FSDirectory.openInput(FSDirectory.java:671)&lt;br /&gt; at org.apache.lucene.index.SegmentInfos.read(SegmentInfos.java:236)&lt;br /&gt; at org.apache.lucene.index.DirectoryReader$1.doBody(DirectoryReader.java:71)&lt;br /&gt; at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:704)&lt;br /&gt; at org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:68)&lt;br /&gt; at org.apache.lucene.index.IndexReader.open(IndexReader.java:468)&lt;br /&gt; at org.apache.lucene.index.IndexReader.open(IndexReader.java:309)&lt;br /&gt; at org.apache.solr.core.StandardIndexReaderFactory.newReader(StandardIndexReaderFactory.java:37)&lt;br /&gt; at org.apache.solr.core.SolrCore.getSearcher(SolrCore.java:1040)&lt;br /&gt; ... 30 more&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Initial diagnosis:&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;Initial diagnosis showed that the segments_N file did not exist.  The CheckIndex tool would not run, it reported the same problem as above.  I had a bunch of index data files with lots of data in them:&lt;pre&gt;&lt;br /&gt;-rw-r--r-- 1 root root 8028603002 Jul  3 20:27 _6l0.fdt&lt;br /&gt;-rw-r--r-- 1 root root   14156172 Jul  3 20:27 _6l0.fdx&lt;br /&gt;-rw-r--r-- 1 root root        328 Jul  3 20:21 _6l0.fnm&lt;br /&gt;-rw-r--r-- 1 root root  869412416 Jul  3 20:33 _6l0.frq&lt;br /&gt;-rw-r--r-- 1 root root    7078088 Jul  3 20:33 _6l0.nrm&lt;br /&gt;-rw-r--r-- 1 root root 1749950441 Jul  3 20:33 _6l0.prx&lt;br /&gt;-rw-r--r-- 1 root root    2428589 Jul  3 20:33 _6l0.tii&lt;br /&gt;-rw-r--r-- 1 root root  194919244 Jul  3 20:33 _6l0.tis&lt;br /&gt;-rw-r--r-- 1 root root    6867338 Jul  3 20:34 _6l0.tvd&lt;br /&gt;-rw-r--r-- 1 root root 1516183431 Jul  3 20:34 _6l0.tvf&lt;br /&gt;-rw-r--r-- 1 root root   28312340 Jul  3 20:34 _6l0.tvx&lt;br /&gt;-rw-r--r-- 1 root root       3943 Jul  7 17:00 _6l0_14u.del&lt;br /&gt;-rw-r--r-- 1 root root 3588947105 Jul  4 10:16 _a64.fdt&lt;br /&gt;-rw-r--r-- 1 root root    5950556 Jul  4 10:16 _a64.fdx&lt;br /&gt;-rw-r--r-- 1 root root        328 Jul  4 10:13 _a64.fnm&lt;br /&gt;-rw-r--r-- 1 root root  388042305 Jul  4 10:19 _a64.frq&lt;br /&gt;-rw-r--r-- 1 root root    2975280 Jul  4 10:19 _a64.nrm&lt;br /&gt;-rw-r--r-- 1 root root  786393928 Jul  4 10:19 _a64.prx&lt;br /&gt;-rw-r--r-- 1 root root    1332607 Jul  4 10:19 _a64.tii&lt;br /&gt;-rw-r--r-- 1 root root  106349618 Jul  4 10:19 _a64.tis&lt;br /&gt;-rw-r--r-- 1 root root    2898023 Jul  4 10:21 _a64.tvd&lt;br /&gt;-rw-r--r-- 1 root root  660740410 Jul  4 10:21 _a64.tvf&lt;br /&gt;-rw-r--r-- 1 root root   11901108 Jul  4 10:21 _a64.tvx&lt;br /&gt;-rw-r--r-- 1 root root        427 Jul  7 16:55 _a64_3x.del&lt;br /&gt;-rw-r--r-- 1 root root 4063439055 Jul  5 08:35 _fyc.fdt&lt;br /&gt;-rw-r--r-- 1 root root    6684556 Jul  5 08:35 _fyc.fdx&lt;br /&gt;-rw-r--r-- 1 root root        328 Jul  5 08:30 _fyc.fnm&lt;br /&gt;-rw-r--r-- 1 root root  442166844 Jul  5 08:39 _fyc.frq&lt;br /&gt;-rw-r--r-- 1 root root    3342280 Jul  5 08:39 _fyc.nrm&lt;br /&gt;-rw-r--r-- 1 root root  873120822 Jul  5 08:39 _fyc.prx&lt;br /&gt;-rw-r--r-- 1 root root    1535756 Jul  5 08:39 _fyc.tii&lt;br /&gt;-rw-r--r-- 1 root root  123009510 Jul  5 08:39 _fyc.tis&lt;br /&gt;-rw-r--r-- 1 root root    3171898 Jul  5 08:40 _fyc.tvd&lt;br /&gt;-rw-r--r-- 1 root root  760721721 Jul  5 08:40 _fyc.tvf&lt;br /&gt;-rw-r--r-- 1 root root   13369108 Jul  5 08:40 _fyc.tvx&lt;br /&gt;-rw-r--r-- 1 root root        340 Jul  7 16:55 _fyc_35.del&lt;br /&gt;-rw-r--r-- 1 root root 3774135320 Jul  6 08:30 _lwv.fdt&lt;br /&gt;-rw-r--r-- 1 root root    6003948 Jul  6 08:30 _lwv.fdx&lt;br /&gt;-rw-r--r-- 1 root root        328 Jul  6 08:26 _lwv.fnm&lt;br /&gt;-rw-r--r-- 1 root root  418485969 Jul  6 08:34 _lwv.frq&lt;br /&gt;-rw-r--r-- 1 root root    3001976 Jul  6 08:34 _lwv.nrm&lt;br /&gt;-rw-r--r-- 1 root root  843268283 Jul  6 08:34 _lwv.prx&lt;br /&gt;-rw-r--r-- 1 root root    1385423 Jul  6 08:34 _lwv.tii&lt;br /&gt;-rw-r--r-- 1 root root  111141259 Jul  6 08:34 _lwv.tis&lt;br /&gt;-rw-r--r-- 1 root root    2820840 Jul  6 08:36 _lwv.tvd&lt;br /&gt;-rw-r--r-- 1 root root  717490764 Jul  6 08:36 _lwv.tvf&lt;br /&gt;-rw-r--r-- 1 root root   12007892 Jul  6 08:36 _lwv.tvx&lt;br /&gt;-rw-r--r-- 1 root root         38 Jul  7 16:54 _lwv_8.del&lt;br /&gt;-rw-r--r-- 1 root root  404238685 Jul  6 11:23 _mlu.fdt&lt;br /&gt;-rw-r--r-- 1 root root     208748 Jul  6 11:23 _mlu.fdx&lt;br /&gt;-rw-r--r-- 1 root root        227 Jul  6 11:23 _mlu.fnm&lt;br /&gt;-rw-r--r-- 1 root root   46234520 Jul  6 11:24 _mlu.frq&lt;br /&gt;-rw-r--r-- 1 root root      78283 Jul  6 11:24 _mlu.nrm&lt;br /&gt;-rw-r--r-- 1 root root  106629909 Jul  6 11:24 _mlu.prx&lt;br /&gt;-rw-r--r-- 1 root root     196486 Jul  6 11:24 _mlu.tii&lt;br /&gt;-rw-r--r-- 1 root root   15606446 Jul  6 11:24 _mlu.tis&lt;br /&gt;-rw-r--r-- 1 root root      51755 Jul  6 11:24 _mlu.tvd&lt;br /&gt;-rw-r--r-- 1 root root   78839439 Jul  6 11:24 _mlu.tvf&lt;br /&gt;-rw-r--r-- 1 root root     417492 Jul  6 11:24 _mlu.tvx&lt;br /&gt;-rw-r--r-- 1 root root         15 Jul  6 12:14 _mlu_1.del&lt;br /&gt;-rw-r--r-- 1 root root  309050678 Jul  7 16:13 _n6y.fdt&lt;br /&gt;-rw-r--r-- 1 root root     165844 Jul  7 16:13 _n6y.fdx&lt;br /&gt;-rw-r--r-- 1 root root        227 Jul  7 16:13 _n6y.fnm&lt;br /&gt;-rw-r--r-- 1 root root   36044993 Jul  7 16:14 _n6y.frq&lt;br /&gt;-rw-r--r-- 1 root root      62194 Jul  7 16:14 _n6y.nrm&lt;br /&gt;-rw-r--r-- 1 root root   81168504 Jul  7 16:14 _n6y.prx&lt;br /&gt;-rw-r--r-- 1 root root     161925 Jul  7 16:14 _n6y.tii&lt;br /&gt;-rw-r--r-- 1 root root   12783522 Jul  7 16:14 _n6y.tis&lt;br /&gt;-rw-r--r-- 1 root root      41096 Jul  7 16:14 _n6y.tvd&lt;br /&gt;-rw-r--r-- 1 root root   61007940 Jul  7 16:14 _n6y.tvf&lt;br /&gt;-rw-r--r-- 1 root root     331684 Jul  7 16:14 _n6y.tvx&lt;br /&gt;-rw-r--r-- 1 root root  190234359 Jul  7 16:45 _nbf.fdt&lt;br /&gt;-rw-r--r-- 1 root root     272564 Jul  7 16:45 _nbf.fdx&lt;br /&gt;-rw-r--r-- 1 root root        328 Jul  7 16:45 _nbf.fnm&lt;br /&gt;-rw-r--r-- 1 root root   20098506 Jul  7 16:45 _nbf.frq&lt;br /&gt;-rw-r--r-- 1 root root     136284 Jul  7 16:45 _nbf.nrm&lt;br /&gt;-rw-r--r-- 1 root root   43187014 Jul  7 16:45 _nbf.prx&lt;br /&gt;-rw-r--r-- 1 root root     103893 Jul  7 16:45 _nbf.tii&lt;br /&gt;-rw-r--r-- 1 root root    8123849 Jul  7 16:45 _nbf.tis&lt;br /&gt;-rw-r--r-- 1 root root     126312 Jul  7 16:45 _nbf.tvd&lt;br /&gt;-rw-r--r-- 1 root root   35035417 Jul  7 16:45 _nbf.tvf&lt;br /&gt;-rw-r--r-- 1 root root     545124 Jul  7 16:45 _nbf.tvx&lt;br /&gt;-rw-r--r-- 1 root root   82107318 Jul  7 16:55 _nd8.fdt&lt;br /&gt;-rw-r--r-- 1 root root     136068 Jul  7 16:55 _nd8.fdx&lt;br /&gt;-rw-r--r-- 1 root root        328 Jul  7 16:55 _nd8.fnm&lt;br /&gt;-rw-r--r-- 1 root root    8642891 Jul  7 16:55 _nd8.frq&lt;br /&gt;-rw-r--r-- 1 root root      68036 Jul  7 16:55 _nd8.nrm&lt;br /&gt;-rw-r--r-- 1 root root   17964715 Jul  7 16:55 _nd8.prx&lt;br /&gt;-rw-r--r-- 1 root root      60156 Jul  7 16:55 _nd8.tii&lt;br /&gt;-rw-r--r-- 1 root root    4671427 Jul  7 16:55 _nd8.tis&lt;br /&gt;-rw-r--r-- 1 root root      69422 Jul  7 16:56 _nd8.tvd&lt;br /&gt;-rw-r--r-- 1 root root   15417989 Jul  7 16:56 _nd8.tvf&lt;br /&gt;-rw-r--r-- 1 root root     272132 Jul  7 16:56 _nd8.tvx&lt;br /&gt;-rw-r--r-- 1 root root   46219469 Jul  7 16:58 _ndo.fdt&lt;br /&gt;-rw-r--r-- 1 root root      62964 Jul  7 16:58 _ndo.fdx&lt;br /&gt;-rw-r--r-- 1 root root        328 Jul  7 16:58 _ndo.fnm&lt;br /&gt;-rw-r--r-- 1 root root    4357258 Jul  7 16:58 _ndo.frq&lt;br /&gt;-rw-r--r-- 1 root root      31484 Jul  7 16:58 _ndo.nrm&lt;br /&gt;-rw-r--r-- 1 root root   10196509 Jul  7 16:58 _ndo.prx&lt;br /&gt;-rw-r--r-- 1 root root      33580 Jul  7 16:58 _ndo.tii&lt;br /&gt;-rw-r--r-- 1 root root    2566267 Jul  7 16:58 _ndo.tis&lt;br /&gt;-rw-r--r-- 1 root root      31172 Jul  7 16:58 _ndo.tvd&lt;br /&gt;-rw-r--r-- 1 root root    7756092 Jul  7 16:58 _ndo.tvf&lt;br /&gt;-rw-r--r-- 1 root root     125924 Jul  7 16:58 _ndo.tvx&lt;br /&gt;-rw-r--r-- 1 root root   31234528 Jul  7 17:00 _ndz.fdt&lt;br /&gt;-rw-r--r-- 1 root root      38196 Jul  7 17:00 _ndz.fdx&lt;br /&gt;-rw-r--r-- 1 root root        328 Jul  7 17:00 _ndz.fnm&lt;br /&gt;-rw-r--r-- 1 root root    2689685 Jul  7 17:00 _ndz.frq&lt;br /&gt;-rw-r--r-- 1 root root      19100 Jul  7 17:00 _ndz.nrm&lt;br /&gt;-rw-r--r-- 1 root root    6729134 Jul  7 17:00 _ndz.prx&lt;br /&gt;-rw-r--r-- 1 root root      20814 Jul  7 17:00 _ndz.tii&lt;br /&gt;-rw-r--r-- 1 root root    1572257 Jul  7 17:00 _ndz.tis&lt;br /&gt;-rw-r--r-- 1 root root      18936 Jul  7 17:00 _ndz.tvd&lt;br /&gt;-rw-r--r-- 1 root root    4777281 Jul  7 17:00 _ndz.tvf&lt;br /&gt;-rw-r--r-- 1 root root      76388 Jul  7 17:00 _ndz.tvx&lt;br /&gt;-rw-r--r-- 1 root root         15 Jul  7 17:00 _ndz_1.del&lt;br /&gt;-rw-r--r-- 1 root root    3143760 Jul  7 17:00 _ne0.fdt&lt;br /&gt;-rw-r--r-- 1 root root       1004 Jul  7 17:00 _ne0.fdx&lt;br /&gt;-rw-r--r-- 1 root root        328 Jul  7 17:00 _ne0.fnm&lt;br /&gt;-rw-r--r-- 1 root root     242609 Jul  7 17:00 _ne0.frq&lt;br /&gt;-rw-r--r-- 1 root root        504 Jul  7 17:00 _ne0.nrm&lt;br /&gt;-rw-r--r-- 1 root root     820393 Jul  7 17:00 _ne0.prx&lt;br /&gt;-rw-r--r-- 1 root root       4440 Jul  7 17:00 _ne0.tii&lt;br /&gt;-rw-r--r-- 1 root root     333653 Jul  7 17:00 _ne0.tis&lt;br /&gt;-rw-r--r-- 1 root root        351 Jul  7 17:00 _ne0.tvd&lt;br /&gt;-rw-r--r-- 1 root root     473525 Jul  7 17:00 _ne0.tvf&lt;br /&gt;-rw-r--r-- 1 root root       2004 Jul  7 17:00 _ne0.tvx&lt;br /&gt;-rw-r--r-- 1 root root         24 Jul  7 17:00 _ne0_2.del&lt;br /&gt;-rw-r--r-- 1 root root    2800555 Jul  7 17:00 _ne1.fdt&lt;br /&gt;-rw-r--r-- 1 root root       1148 Jul  7 17:00 _ne1.fdx&lt;br /&gt;-rw-r--r-- 1 root root        328 Jul  7 17:00 _ne1.fnm&lt;br /&gt;-rw-r--r-- 1 root root     222294 Jul  7 17:00 _ne1.frq&lt;br /&gt;-rw-r--r-- 1 root root        576 Jul  7 17:00 _ne1.nrm&lt;br /&gt;-rw-r--r-- 1 root root     749837 Jul  7 17:00 _ne1.prx&lt;br /&gt;-rw-r--r-- 1 root root       4109 Jul  7 17:00 _ne1.tii&lt;br /&gt;-rw-r--r-- 1 root root     294783 Jul  7 17:00 _ne1.tis&lt;br /&gt;-rw-r--r-- 1 root root        448 Jul  7 17:00 _ne1.tvd&lt;br /&gt;-rw-r--r-- 1 root root     421801 Jul  7 17:00 _ne1.tvf&lt;br /&gt;-rw-r--r-- 1 root root       2292 Jul  7 17:00 _ne1.tvx&lt;br /&gt;-rw-r--r-- 1 root root         26 Jul  7 17:00 _ne1_1.del&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Steps taken:&lt;/h3&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Copied over valid segments.gen and segments_N files from another server with a non-corrupt index&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ran the Lucene CheckIndex tool to "fix" the segments files (in /webapp/WEB-INF/lib):&lt;pre&gt;java -cp lucene-core-2.9-dev.jar org.apache.lucene.index.CheckIndex /solr_data/data/index/&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Now I had a bunch of data files and empty segments files that did not point to my data files.  So I started the solr server and ran &lt;pre&gt;/solr/update?optimize=true&lt;/pre&gt; in the hopes that this would re-create the segments files and keep the data files intact&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Results:&lt;/h3&gt;&lt;br /&gt;Optimize removed the data files so I was left with only segments.gen and segments_bao.  This whole step failed and now I'll have to re-create the index (which took 5 days last time).  Bummer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2529616848118972172-8883110207206933280?l=javastack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javastack.blogspot.com/feeds/8883110207206933280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2529616848118972172&amp;postID=8883110207206933280' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/8883110207206933280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/8883110207206933280'/><link rel='alternate' type='text/html' href='http://javastack.blogspot.com/2010/07/what-to-do-with-corrupt-solr-lucene.html' title='A failed attempt to recover a corrupt solr / lucene index with a missing segments_N file'/><author><name>MK</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/2484/160/1600/m1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2529616848118972172.post-4363536192287594154</id><published>2009-11-25T11:42:00.000-08:00</published><updated>2009-11-25T11:42:45.702-08:00</updated><title type='text'>Startup key combinations for Intel-based Macs</title><content type='html'>&lt;a href="http://support.apple.com/kb/HT1533"&gt;Startup key combinations for Intel-based Macs&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2529616848118972172-4363536192287594154?l=javastack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://support.apple.com/kb/HT1533' title='Startup key combinations for Intel-based Macs'/><link rel='replies' type='application/atom+xml' href='http://javastack.blogspot.com/feeds/4363536192287594154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2529616848118972172&amp;postID=4363536192287594154' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/4363536192287594154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/4363536192287594154'/><link rel='alternate' type='text/html' href='http://javastack.blogspot.com/2009/11/startup-key-combinations-for-intel.html' title='Startup key combinations for Intel-based Macs'/><author><name>MK</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/2484/160/1600/m1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2529616848118972172.post-1429245166238150674</id><published>2009-11-13T07:56:00.000-08:00</published><updated>2009-11-13T12:17:15.176-08:00</updated><title type='text'>Adding a jar to a local file system maven2 repository using deploy:deploy-file</title><content type='html'>It seems mvn is extremely picky about the syntax for this.  Here's an example on windows that works with both apache-maven-2.0.9 and apache-maven-2.2.1:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;C:\temp&gt;mvn deploy:deploy-file -Dfile=gdata-calendar-2.0.jar -Durl=file:C:\m2repo -DgroupId=com.google -DartifactId=gdata-calendar -Dversion=2.0 -Dpackaging=jar&lt;br /&gt;&lt;br /&gt;[INFO] Scanning for projects...&lt;br /&gt;[INFO] Searching repository for plugin with prefix: 'deploy'.&lt;br /&gt;[INFO] ------------------------------------------------------------------------&lt;br /&gt;[INFO] Building Maven Default Project&lt;br /&gt;[INFO]    task-segment: [deploy:deploy-file] (aggregator-style)&lt;br /&gt;[INFO] ------------------------------------------------------------------------&lt;br /&gt;[INFO] [deploy:deploy-file]&lt;br /&gt;Uploading: file:C:\m2repo/com/google/gdata-calendar/2.0/gdata-calendar-2.0.jar&lt;br /&gt;48K uploaded&lt;br /&gt;[INFO] Retrieving previous metadata from remote-repository&lt;br /&gt;[INFO] repository metadata for: 'artifact com.google:gdata-calendar' could not b&lt;br /&gt;e found on repository: remote-repository, so will be created&lt;br /&gt;[INFO] Uploading repository metadata for: 'artifact com.google:gdata-calendar'&lt;br /&gt;[INFO] Uploading project information for gdata-calendar 2.0&lt;br /&gt;[INFO] ------------------------------------------------------------------------&lt;br /&gt;[INFO] BUILD SUCCESSFUL&lt;br /&gt;[INFO] ------------------------------------------------------------------------&lt;br /&gt;[INFO] Total time: 1 second&lt;br /&gt;[INFO] Finished at: Fri Nov 13 11:00:03 EST 2009&lt;br /&gt;[INFO] Final Memory: 2M/5M&lt;br /&gt;[INFO] ------------------------------------------------------------------------&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;To simplify, you can use this command:&lt;pre&gt;&lt;br /&gt;upload gdata-calendar 2.0 com.google&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;If you first create this batch script:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;call mvn deploy:deploy-file -Dfile=%1-%2.jar -Durl=file:C:\m2repo -DgroupId=%3 -DartifactId=%1 -Dversion=%2 -Dpackaging=jar&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;If you also want to create a simple maven2 &lt;dependency&gt; entry, add this to the above script (note the Windows Command Interpreter escape character is "^"):&lt;pre&gt;&lt;code&gt;&lt;br /&gt;echo   ^&amp;lt;dependency^&amp;gt; &gt;&gt; pom-dependencies.txt&lt;br /&gt;echo    ^&amp;lt;groupId^&amp;gt%3^&amp;lt;/groupId^&amp;gt &gt;&gt; pom-dependencies.txt&lt;br /&gt;echo    ^&amp;lt;artifactId^&amp;gt%1^&amp;lt;/artifactId^&amp;gt &gt;&gt; pom-dependencies.txt&lt;br /&gt;echo    ^&amp;lt;version^&amp;gt%2^&amp;lt;/version^&amp;gt &gt;&gt; pom-dependencies.txt&lt;br /&gt;echo   ^&amp;lt;/dependency^&amp;gt &gt;&gt; pom-dependencies.txt&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And finally, this batch scrip will upload all the jars in Google's Java API:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;call upload gdata-analytics 2.0 com.google&lt;br /&gt;call upload gdata-analytics-meta 2.0 com.google&lt;br /&gt;call upload gdata-appsforyourdomain 1.0 com.google&lt;br /&gt;call upload gdata-appsforyourdomain-meta 1.0 com.google&lt;br /&gt;call upload gdata-base 1.0 com.google&lt;br /&gt;call upload gdata-blogger 2.0 com.google&lt;br /&gt;call upload gdata-blogger-meta 2.0 com.google&lt;br /&gt;call upload gdata-books 1.0 com.google&lt;br /&gt;call upload gdata-books-meta 1.0 com.google&lt;br /&gt;call upload gdata-calendar 2.0 com.google&lt;br /&gt;call upload gdata-calendar-meta 2.0 com.google&lt;br /&gt;call upload gdata-client 1.0 com.google&lt;br /&gt;call upload gdata-client-meta 1.0 com.google&lt;br /&gt;call upload gdata-codesearch 2.0 com.google&lt;br /&gt;call upload gdata-codesearch-meta 2.0 com.google&lt;br /&gt;call upload gdata-contacts 3.0 com.google&lt;br /&gt;call upload gdata-contacts-meta 3.0 com.google&lt;br /&gt;call upload gdata-core 1.0 com.google&lt;br /&gt;call upload gdata-docs 3.0 com.google&lt;br /&gt;call upload gdata-docs-meta 3.0 com.google&lt;br /&gt;call upload gdata-finance 2.0 com.google&lt;br /&gt;call upload gdata-finance-meta 2.0 com.google&lt;br /&gt;call upload gdata-health 2.0 com.google&lt;br /&gt;call upload gdata-health-meta 2.0 com.google&lt;br /&gt;call upload gdata-maps 2.0 com.google&lt;br /&gt;call upload gdata-maps-meta 2.0 com.google&lt;br /&gt;call upload gdata-media 1.0 com.google&lt;br /&gt;call upload gdata-photos 2.0 com.google&lt;br /&gt;call upload gdata-photos-meta 2.0 com.google&lt;br /&gt;call upload gdata-projecthosting 2.0 com.google&lt;br /&gt;call upload gdata-projecthosting-meta 2.0 com.google&lt;br /&gt;call upload gdata-sidewiki 2.0 com.google&lt;br /&gt;call upload gdata-sidewiki-meta 2.0 com.google&lt;br /&gt;call upload gdata-sites 2.0 com.google&lt;br /&gt;call upload gdata-sites-meta 2.0 com.google&lt;br /&gt;call upload gdata-spreadsheet 3.0 com.google&lt;br /&gt;call upload gdata-spreadsheet-meta 3.0 com.google&lt;br /&gt;call upload gdata-webmastertools 2.0 com.google&lt;br /&gt;call upload gdata-webmastertools-meta 2.0 com.google&lt;br /&gt;call upload gdata-youtube 2.0 com.google&lt;br /&gt;call upload gdata-youtube-meta 2.0 com.google&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Note you can also use &lt;code&gt;mvn install:install-file&lt;/code&gt; as per &lt;a href="http://ianibbo.blogspot.com/2009/04/google-apis-maven2-artifacts.html"&gt;this blog post&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2529616848118972172-1429245166238150674?l=javastack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javastack.blogspot.com/feeds/1429245166238150674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2529616848118972172&amp;postID=1429245166238150674' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/1429245166238150674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/1429245166238150674'/><link rel='alternate' type='text/html' href='http://javastack.blogspot.com/2009/11/adding-jar-to-local-file-system-maven2.html' title='Adding a jar to a local file system maven2 repository using deploy:deploy-file'/><author><name>MK</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/2484/160/1600/m1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2529616848118972172.post-4562928262996663148</id><published>2009-10-01T05:47:00.000-07:00</published><updated>2009-10-01T05:51:35.830-07:00</updated><title type='text'>Accessing the current request path with Freemarker and Spring MVC</title><content type='html'>Use this to get the URI prefix&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;#assign lastSlashPos = Request['springMacroRequestContext'].requestUri?last_index_of("/") /&gt;&lt;br /&gt;&lt;#assign uriPrefix = Request['springMacroRequestContext'].requestUri?substring(0, lastSlashPos) /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then construct your link&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;a href="${uriPrefix}/myPath.html"&amp;gt;click here&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2529616848118972172-4562928262996663148?l=javastack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javastack.blogspot.com/feeds/4562928262996663148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2529616848118972172&amp;postID=4562928262996663148' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/4562928262996663148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/4562928262996663148'/><link rel='alternate' type='text/html' href='http://javastack.blogspot.com/2009/10/accessing-current-request-path-with.html' title='Accessing the current request path with Freemarker and Spring MVC'/><author><name>MK</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/2484/160/1600/m1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2529616848118972172.post-754059635346924027</id><published>2008-10-07T09:29:00.000-07:00</published><updated>2008-10-07T12:11:29.140-07:00</updated><title type='text'>Broken pipe</title><content type='html'>I got the following stack trace from a MySQL based app (spring, hibernate, c3p0 connection pool) after it had been sitting for a while.  &lt;br /&gt;&lt;br /&gt;Turns out the MySQL server was timing out connections while the c3p0 connection pool kept them open on the client-side.  The solution in my case was to add a connection timeout on the client-side like this:&lt;pre&gt;&lt;br /&gt; &amp;lt;!-- Configuration resources:&lt;br /&gt;   http://www.hibernate.org/214.html&lt;br /&gt;   http://forum.springframework.org/showthread.php?t=13078&lt;br /&gt;   http://www.mchange.com/projects/c3p0/apidocs/com/mchange/v2/c3p0/ComboPooledDataSource.html&lt;br /&gt; --&amp;gt;&lt;br /&gt; &amp;lt;bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"&amp;gt;&lt;br /&gt;  &amp;lt;property name="driverClass" value="${db.driverClass}" /&amp;gt;&lt;br /&gt;  &amp;lt;property name="jdbcUrl" value="${db.jdbcUrl}" /&amp;gt;&lt;br /&gt;  &amp;lt;property name="user" value="${db.user}" /&amp;gt;&lt;br /&gt;  &amp;lt;property name="password" value="${db.password}" /&amp;gt;&lt;br /&gt;  &amp;lt;!-- 1/2 hr. MySQL server default connection timeout is 43200 (12hrs) --&amp;gt;&lt;br /&gt;  &amp;lt;property name="maxIdleTime" value="1800" /&amp;gt;&lt;br /&gt; &amp;lt;/bean&amp;gt;&lt;/pre&gt;&lt;hr /&gt;&lt;pre&gt;04:20:53,868 [sor40] ERROR ExceptionResolver Exception reference: WNJMN5FDML&lt;br /&gt;org.hibernate.exception.JDBCConnectionException: could not execute query&lt;br /&gt; at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:74)&lt;br /&gt; at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)&lt;br /&gt; at org.hibernate.loader.Loader.doList(Loader.java:2223)&lt;br /&gt; at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)&lt;br /&gt; at org.hibernate.loader.Loader.list(Loader.java:2099)&lt;br /&gt; at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)&lt;br /&gt; at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)&lt;br /&gt; at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)&lt;br /&gt; at com.acme.repository.Repository.findInspectorCompanyByShortName(Repository.java:110)&lt;br /&gt; at com.acme.webapp.PickInspectionTimeController.handleRequestInternal(PickInspectionTimeController.java:65)&lt;br /&gt; at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)&lt;br /&gt; at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:45)&lt;br /&gt; at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:820)&lt;br /&gt; at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:755)&lt;br /&gt; at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:396)&lt;br /&gt; at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:350)&lt;br /&gt; at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)&lt;br /&gt; at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)&lt;br /&gt; at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)&lt;br /&gt; at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)&lt;br /&gt; at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:119)&lt;br /&gt; at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:55)&lt;br /&gt; at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)&lt;br /&gt; at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)&lt;br /&gt; at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)&lt;br /&gt; at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)&lt;br /&gt; at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)&lt;br /&gt; at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)&lt;br /&gt; at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)&lt;br /&gt; at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)&lt;br /&gt; at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)&lt;br /&gt; at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)&lt;br /&gt; at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)&lt;br /&gt; at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)&lt;br /&gt; at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)&lt;br /&gt; at java.lang.Thread.run(Thread.java:595)&lt;br /&gt;Caused by: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: &lt;br /&gt;&lt;br /&gt;** BEGIN NESTED EXCEPTION ** &lt;br /&gt;&lt;br /&gt;java.net.SocketException&lt;br /&gt;MESSAGE: Broken pipe&lt;br /&gt;&lt;br /&gt;STACKTRACE:&lt;br /&gt;&lt;br /&gt;java.net.SocketException: Broken pipe&lt;br /&gt; at java.net.SocketOutputStream.socketWrite0(Native Method)&lt;br /&gt; at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)&lt;br /&gt; at java.net.SocketOutputStream.write(SocketOutputStream.java:136)&lt;br /&gt; at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)&lt;br /&gt; at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)&lt;br /&gt; at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2692)&lt;br /&gt; at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2621)&lt;br /&gt; at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1552)&lt;br /&gt; at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)&lt;br /&gt; at com.mysql.jdbc.Connection.execSQL(Connection.java:2994)&lt;br /&gt; at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:936)&lt;br /&gt; at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1030)&lt;br /&gt; at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76)&lt;br /&gt; at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)&lt;br /&gt; at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)&lt;br /&gt; at org.hibernate.loader.Loader.doQuery(Loader.java:674)&lt;br /&gt; at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)&lt;br /&gt; at org.hibernate.loader.Loader.doList(Loader.java:2220)&lt;br /&gt; at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)&lt;br /&gt; at org.hibernate.loader.Loader.list(Loader.java:2099)&lt;br /&gt; at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)&lt;br /&gt; at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)&lt;br /&gt; at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)&lt;br /&gt; at com.acme.repository.Repository.findInspectorCompanyByShortName(Repository.java:110)&lt;br /&gt; at com.acme.webapp.PickInspectionTimeController.handleRequestInternal(PickInspectionTimeController.java:65)&lt;br /&gt; at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)&lt;br /&gt; at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:45)&lt;br /&gt; at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:820)&lt;br /&gt; at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:755)&lt;br /&gt; at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:396)&lt;br /&gt; at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:350)&lt;br /&gt; at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)&lt;br /&gt; at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)&lt;br /&gt; at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)&lt;br /&gt; at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)&lt;br /&gt; at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:119)&lt;br /&gt; at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:55)&lt;br /&gt; at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)&lt;br /&gt; at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)&lt;br /&gt; at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)&lt;br /&gt; at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)&lt;br /&gt; at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)&lt;br /&gt; at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)&lt;br /&gt; at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)&lt;br /&gt; at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)&lt;br /&gt; at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)&lt;br /&gt; at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)&lt;br /&gt; at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)&lt;br /&gt; at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)&lt;br /&gt; at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)&lt;br /&gt; at java.lang.Thread.run(Thread.java:595)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;** END NESTED EXCEPTION **&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Last packet sent to the server was 2 ms ago.&lt;br /&gt; at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2710)&lt;br /&gt; at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2621)&lt;br /&gt; at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1552)&lt;br /&gt; at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)&lt;br /&gt; at com.mysql.jdbc.Connection.execSQL(Connection.java:2994)&lt;br /&gt; at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:936)&lt;br /&gt; at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1030)&lt;br /&gt; at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76)&lt;br /&gt; at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)&lt;br /&gt; at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)&lt;br /&gt; at org.hibernate.loader.Loader.doQuery(Loader.java:674)&lt;br /&gt; at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)&lt;br /&gt; at org.hibernate.loader.Loader.doList(Loader.java:2220)&lt;br /&gt; ... 33 more&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2529616848118972172-754059635346924027?l=javastack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javastack.blogspot.com/feeds/754059635346924027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2529616848118972172&amp;postID=754059635346924027' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/754059635346924027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2529616848118972172/posts/default/754059635346924027'/><link rel='alternate' type='text/html' href='http://javastack.blogspot.com/2008/10/broken-pipe.html' title='Broken pipe'/><author><name>MK</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://photos1.blogger.com/blogger/2484/160/1600/m1.jpg'/></author><thr:total>0</thr:total></entry></feed>
