svn 1.5.1 breaks maven release plugin?

this morning i upgraded from subversion 1.5.0 to 1.5.1 via macports.

this afternoon, i tried to do a release of some software at work.. and the maven release plugin was failing! its a very odd error:


[INFO] Tagging release with the label release-0.4…
[INFO] Executing: svn –non-interactive copy –file /tmp/maven-scm-1130425261.commit . https://example.com/workstuff/release-0.4
[INFO] Working directory: /Users/osi/Documents/workstuff/trunk
[INFO] ————————————————————————
[ERROR] BUILD FAILURE
[INFO] ————————————————————————
[INFO] Unable to tag SCM
Provider message:
The svn tag command failed.
Command output:
svn: Commit failed (details follow):
svn: File ‘/workstuff/tags/release-0.4/pom.xml’ already exists

very weird. i tried executing that same command at the prompt, and got the same error. i did a svn up, and then it worked.. hrm. thankfully, macports makes it very easy to drop back to 1.5.0, and after i did that, maven was able to release no problem.

July 30th 2008 · Tags: , | No Comments »

dynamically installing agents in java 6

so, you’ve found java.lang.instrument.Instrumentation. neat, huh?

now, rather than having to start your agent via the command line, wouldn’t it be neat to do what they suggest in the package javadocs and load an agent dynamically at runtime?

i had a hell of a time finding details on exactly how to do this. install an agent in another vm? sure. current vm? nah.

in randomly following links last night, i came across a blog post from dain, and it mentioned a getPid() routine that OpenJPA uses. this tickled my memory, and i went looking for the class that uses it. i found the InstrumentationFactory from the OpenJPA code. jackpot!

what they do, is use the Attach API that Sun added in Java 6 to dynamically load an agent. They had to do a trick in order to figure out the current PID, but with that, no problem!

i did need to make some tweaks to their code to have it load in my environment. if you’re working in an environment with dynamic class loaders, when the class is loaded as an agent, it will be a new instance and thus not visible to the factory as-is. to get around this, split the factory into two pieces. the agent, and the factory. the factory does not use the agent at all, it always accesses it reflectively. then, after the agent has been loaded, use Class.forName("your.agent.class.name", true, ClassLoader.getSystemClassLoader() ) to get the instance. reflectively load the stored instrumentation and bingo!

June 27th 2008 · Tags: , | 3 Comments »

and now for something completely different

yesterday was my last day at radar networks. i had been there for 31 months. (incidentally, i’ll be 31 years old in a few months as well).

i’ve learned a lot working there; it was the first venture-funded startup i had worked for. i got to see the team grow from around 5 to the current 20-something. my co-workers and teammates were all immensely skilled in areas different than i, so it was a great experience to witness how they did what they did. we worked like mad to get twine launched. i now leave it in their capable hands to allow it to grow and mature. keep an eye on it, there are a lot of cool ideas that should be surfacing in the next few months.

the completely different thing is going to work for a gaming company, electrotank. i’m not much of a gamer myself (aside from lots of mario kart. comment if you’ve got it on the wii as well so we can play!),

it will be an opportunity to learn about an entirely different industry. what i’ll be doing is of course what i’m good at, helping architect/design/build the back-end systems for maintainability and scaling. their core product is built on apache mina, so this will also allow me to spend more time with the community than i had in the past year.

i wish all my past radar colleagues the best, look forward to meeting all my new teammates, and tackling the fun challenges ahead!

May 31st 2008 · Tags: , , , | 2 Comments »