Tuesday, April 6, 2010

Faster protoyping with Rails webservices

Well, I just spent about a 1.5 days tweaking/trying to get a VERY simple Maven/CXF/Spring project deployed on WebLogic 10.3.2 (the web service part wasn't the issue... this could have been deployed on Jetty/Tomcat in minutes) - finally got it deploying to WLS from Eclipse (but not JDeveloper of course, but that's another story)

For kicks, I thought I'd see what it would take to set up a webservice in Ruby/Rails. (about 10 mins for the impatient)

There used to be a gem called actionwebservice, but it looks like it's been removed from Rails so install datanoise-actionwebservice instead.
sudo gem install datanoise-actionwebservice --source http://gems.github.com

Now, set up a quick rails app and configure the environment.
rails ws-test

Edit the config/environment.rb file:
1) Find the load_paths section and add:
config.load_paths += %W( #{RAILS_ROOT}/app/apis )

2) Find the config.gem section and add:
config.gem 'datanoise-actionwebservice', :lib => 'actionwebservice',
:version => '2.3.2'

Ok, now lets take advantage of that config work we just did...
Create the app/apis directory that we referenced in the environment.rb file
mkdir app/apis

Create the app/apis/hello_world_api.rb file
class HelloWorldApi < ActionWebService::API::Base
api_method :hello_message, :expects => [{:name=>:string}], :returns => [:string]
end

Create a controller in app/controller/hello_world_controller.rb
class HelloWorldController < ApplicationController

web_service_api HelloWorldApi
web_service_dispatching_mode :direct
wsdl_service_name 'hello_message'
web_service_scaffold :invoke

def hello_message( name )
return "Hello #{name}"
end

end

Finally, fire it up...
script/server

And browse to http://localhost:3000/hello_world/invoke for a spiffy web page or http://localhost:3000/hello_world/wsdl for the WSDL.

UPDATE (4/7/2010): You can also use script/generate on webservices
script/generate web_service HelloWorld
create app/services/
exists app/controllers/
exists test/functional/
create app/services/hello_world_api.rb
create app/controllers/hello_world_controller.rb
create test/functional/hello_world_api_test.rb

Friday, April 2, 2010

Insufficient Disk space! WebLogic 10.3.2.0 running on Mac OSX

Note: First read my post about getting JDeveloper installed - you still need to fake out the Oracle installer so it realizes you have a JDK install

Go to Oracle.com and get the Oracle WebLogic Server 11gR1 (10.3.2) - Package Installer - generic

Warning: If you double-click on the jar, you'll get a few screens in and then it will complain (completely incorrectly) about "Insufficient disk space!" regardless of how much free space you have on your machine.

The workaround is to pull up a terminal window, go to the directory holding the wls1032_generic.jar file and execute:

java -Dos.name=unix -XX:MaxPermSize=512m -Xmx1024m -jar wls1032_generic.jar

Seems the installer can't determine disk space correctly without knowing it's an unix system... should install successfully after that.

If you don't increase the perm gen space, you'll hit: "Exception in thread "runScript" java.lang.OutOfMemoryError: PermGen space"

Monday, March 29, 2010

Installing JDeveloper 11 on OSX

Guess what, JDeveloper doesn't install out of box on a Mac... here's how to fix the JDK issue so you can at least get JDeveloper installed:

cd /System/Library/Frameworks/JavaVM.framework/Home
sudo mkdir -p jre/lib
cd jre/lib/
sudo ln -s ../../../Classes/classes.jar rt.jar

Monday, March 1, 2010

Ok break is over...

Given that railsconf 2010 (and rails 3) is on the horizon, decided it's time to get writing some rails stuff again =)

Of course that means updating the gems I haven't touched in ages.
sudo gem update --system
sudo gem update

oops... rmagick fails complaining about imagemagick... Since I installed it with macports, I figured it would be easy.
sudo port update imagemagick
Except that failed, complaining about gettext. Long story short, I didn't update macports when I upgraded to snow leopard. Easiest (if probably slowest) was to blow away macports.

sudo port -f uninstall installed

sudo port clean --work --archive all

sudo port install imagemagick

An hour or two later... imagemagick works!

Friday, October 16, 2009

Die MacRoman, DIE!!

OSX defaults to MacRoman for an encoding, so if you're using Maven, you might see messages like:
[WARNING] Using platform encoding (MacRoman actually) to copy
filtered resources, i.e. build is platform dependent
Simple enough, but it can cause you headaches. To change to UTF-8, just add the following properties to your pom.xml:
<properties>
...
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
...
</properties>


(edit: had a couple typos, encoding in the property name needs to start with a capital E - camelCase)

Extremely useful maven placeholder based on profile

Someone just showed me this example which solves one of the annoying parts of multiple devs working with multiple resource configurations (databases, mailservers, etc) for different environments (dev,test,prod,etc)

(in project pom)
<properties>
...
<project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>
<log4j.priority>DEBUG</log4j.priority>
<project.build.listener-resources-context>staging-listener-resources.xml</project.build.listener-resources-context>
</properties>
<profiles>
<profile>
<id>production</id>
<properties>
<log4j.priority>INFO</log4j.priority>
<project.build.listener-resources-context>prod-listener-resources.xml</project.build.listener-resources-context>
<maven.test.skip>true</maven.test.skip>
</properties>
</profile>
</profiles>
...

Then this goes in the build section:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>

Then in your spring context, you can import just like normal, but using a placeholder now:
<import resource="${project.build.listener-resources-context}"/>

So now a normal build uses the staging resources, and something like
mvn install -Pproduction
now uses the production resources.

Thursday, October 15, 2009

Removing chars from files in a directory

Some files got generated with symbols like the 'tm' symbol and the system consuming those files can't handle those characters... so we had to remove them.

To identify them:
find . | xargs perl -ne 'print if /[\176-\512]/' | perl -ne 'print "$1\n" if /(\d+),.*/'

To remove the "special" characters:
find . -type f -print0 | xargs -0 perl -p -i -e 's/[\176-\512]//g'

quick and dirty!