Andrej Koelewijn

  • Home
  • About
  • Departments
    • cloud
    • java
    • mobile
    • open standards
    • oracle
    • oss
    • other
    • soa
    • software development
    • tablet
    • Uncategorized
    • web
  • Subscribe via RSS

Nice Java Decompiler tool: JD

August 26th, 2010  |  Published in java

In the past I used JAD to decompile java classes, but it hasn’t been updated to current java versions. So i tried the alternative suggested on the JAD wiki page: JD – Java Decompiler. It’s pretty nice: you can use the GUI to view the source code, navigate around with hyperlinks, search. You can also save all sources as a zip file.

Java Decompiler screenshot

VMware Player: The virtual machine is busy.

August 25th, 2010  |  Published in Uncategorized

Lost a couple of hours trying to start a vmware image on linux. Turns out the solution was to remove /etc/vmware/not_configured as described here.

Adding a maven repository for installing features to ServiceMix

June 21st, 2010  |  Published in java, oss, soa

I’m running ServiceMix on a machine which doesn’t have internet access, so installing and upgrading features is a bit hard. You can, however, install features from an internal maven repository like Nexus. This post explains how you can configure which maven repositories should be used by ServiceMix.

The OSGI implementation of ServiceMix (Apache Felix/Karaf) has a console which you can use to update the configuration. You can see the currently active configurations as follows:

karaf@root> config:list
...
----------------------------------------------------------------
Pid:            org.ops4j.pax.url.mvn
BundleLocation: mvn:org.ops4j.pax.url/pax-url-mvn/1.1.2
Properties:
   service.pid = org.ops4j.pax.url.mvn
   org.ops4j.pax.url.mvn.defaultRepositories = file:/opt/fuse/fuse-4.2/system@snapshots
   felix.fileinstall.filename = org.ops4j.pax.url.mvn.cfg
   org.ops4j.pax.url.mvn.repositories = http://repo1.maven.org/maven2,http://repo.fusesource.com/maven2, \
  http://repo.fusesource.com/maven2-snapshot@snapshots@noreleases, \
  http://repository.apache.org/content/groups/snapshots-group@snapshots@noreleases, \
  http://repository.ops4j.org/maven2, \
  http://svn.apache.org/repos/asf/servicemix/m2-repo, \
  http://repository.springsource.com/maven/bundles/release, \

http://repository.springsource.com/maven/bundles/external

...

The configuration with Pid org.ops4j.pax.url.mvn is used to tell ServiceMix where to look for features. You can add your own Maven repository to org.ops4j.pax.url.mvn.repositories.

First you need to tell karaf that you want to edit the configuration with pid org.ops4j.pax.url.mvn:

karaf@root> config:edit org.ops4j.pax.url.mvn

Now you can modify the value of org.ops4j.pax.url.mvn.repositories:

karaf@root> config:propset org.ops4j.pax.url.mvn.repositories \

http://<internal-maven-repo>/nexus/content/groups/public

Save the configuration updates, make sure the changes are visible to the bundles that use it:

karaf@root> config:update

You can see the updated configuration using config:list:

karaf@root> config:list
----------------------------------------------------------------
Pid:            org.ops4j.pax.url.mvn
BundleLocation: mvn:org.ops4j.pax.url/pax-url-mvn/1.1.2
Properties:
   service.pid = org.ops4j.pax.url.mvn
   org.ops4j.pax.url.mvn.defaultRepositories = file:/opt/fuse/fuse-4.2/system@snapshots
   felix.fileinstall.filename = org.ops4j.pax.url.mvn.cfg
   org.ops4j.pax.url.mvn.repositories = \

http://<internal-maven-repo>/nexus/content/groups/public

Using this modified configuration i can now install features from my internal maven repository. This means i need to proxy all the required external maven repositories in my internal maven repository.

Upgrade Apache Camel in ServiceMix to version 2.3.0

June 15th, 2010  |  Published in java, oss, soa  |  3 Comments

Apache ServiceMix 4.2 includes Apache Camel 2.2.0. The following steps outline how you can add Apache Camel 2.3.0 in the same ServiceMix instance. This example uses the versions as released by Progress Fuse.

Go to the ServiceMix console, either by starting servicemix, or by ssh-ing into ServiceMix. To install Camel 2.3 we need to add a features repository. You can list the currently registered repositories using features:listUrl:

karaf@root> features:listUrl
mvn:org.apache.servicemix.nmr/apache-servicemix-nmr/1.2.0-fuse-01-00/xml/features
mvn:org.apache.felix.karaf/apache-felix-karaf/1.4.0-fuse-01-00/xml/features
mvn:org.apache.servicemix/apache-servicemix/4.2.0-fuse-01-00/xml/features
mvn:org.apache.camel.karaf/apache-camel/2.2.0-fuse-01-00/xml/features
mvn:org.apache.ode/ode-jbi-karaf/1.3.3-fuse-01-00/xml/features

Add the URL for the Camel 2.3.0 repository:

karaf@root> features:addUrl  \
  mvn:org.apache.camel.karaf/apache-camel/2.3.0-fuse-01-00/xml/features

Verify that the repository has been added:

karaf@root> features:listUrl
mvn:org.apache.servicemix.nmr/apache-servicemix-nmr/1.2.0-fuse-01-00/xml/features
mvn:org.apache.felix.karaf/apache-felix-karaf/1.4.0-fuse-01-00/xml/features
mvn:org.apache.camel.karaf/apache-camel/2.3.0-fuse-01-00/xml/features
mvn:org.apache.servicemix/apache-servicemix/4.2.0-fuse-01-00/xml/features
mvn:org.apache.camel.karaf/apache-camel/2.2.0-fuse-01-00/xml/features
mvn:org.apache.ode/ode-jbi-karaf/1.3.3-fuse-01-00/xml/features

Using features:list you can see that new features are now available for installation:

karaf@root> features:list
State         Version                Name                                 Repository
...
[uninstalled] [2.3.0-fuse-01-00    ] camel                                repo-0
[uninstalled] [2.3.0-fuse-01-00    ] camel-core                           repo-0
[uninstalled] [2.3.0-fuse-01-00    ] camel-spring-osgi                    repo-0
[uninstalled] [2.3.0-fuse-01-00    ] camel-test                           repo-0
[uninstalled] [2.3.0-fuse-01-00    ] camel-cxf                            repo-0
[uninstalled] [2.3.0-fuse-01-00    ] camel-cache                          repo-0
[uninstalled] [2.3.0-fuse-01-00    ] camel-castor                         repo-0
[uninstalled] [2.3.0-fuse-01-00    ] camel-crypto                         repo-0
[uninstalled] [2.3.0-fuse-01-00    ] camel-dozer                          repo-0
[uninstalled] [2.3.0-fuse-01-00    ] camel-http                           repo-0
[uninstalled] [2.3.0-fuse-01-00    ] camel-http4                          repo-0
[uninstalled] [2.3.0-fuse-01-00    ] camel-mina                           repo-0
[uninstalled] [2.3.0-fuse-01-00    ] camel-jetty                          repo-0
[uninstalled] [2.3.0-fuse-01-00    ] camel-servlet                        repo-0
...

Install camel using features:install:

karaf@root> features:install camel-core 2.3.0-fuse-01-00

You can verify that the camel osgi bundle has been installed using osgi:list:

karaf@root> osgi:list
START LEVEL 100
   ID   State         Blueprint      Spring    Level  Name
[   0] [Active     ] [            ] [       ] [    0] OSGi System Bundle (3.5.1.R35x_v20090827)
...
[ 180] [Active     ] [            ] [       ] [   60] Apache ServiceMix Specs :: ACTIVATION API 1.4 (1.5.0)
[ 181] [Active     ] [            ] [       ] [   60] Apache ServiceMix Specs :: JAXB API 2.1 (1.5.0)
[ 182] [Active     ] [            ] [       ] [   60] Apache ServiceMix Specs :: STAX API 1.0 (1.5.0)
[ 183] [Active     ] [            ] [       ] [   60] camel-core (2.3.0.fuse-01-00)

The steps outlined above will not work if you need to go through a proxy. One way to fix this is by adding your proxy settings in %SERVICEMIX_HOME%/bin/servicemix.bat:

set JAVA_OPTS=-Dhttp.proxyHost=host -Dhttp.proxyPort=8080 -Dhttp.proxyUser=user -Dhttp.proxyPassword=password -Dhttp.nonProxyHosts=*.local

A composite Rest service using Apache Camel

June 13th, 2010  |  Published in java, oss, soa, web  |  4 Comments

The following example illustrates how you can implement a composite service using Apache Camel. The service is exposed as a REST resource, and it uses two other resources to collect the data required.

The composite service will enable a client to get info on a customer and it’s orders. To get this data the composite service first needs to query a customer service. Using a relation id retrieved from the customer service, the composite then needs to query an orders services. The steps are as follows:

  • Client calls the composite, eg., GET http://localhost/customerOrders?custNo=123
  • The composite gets the customer resource, but this resource expects the customer id to be named differently: GET http://localhost/customer?customer=123. Here’s an xml representation of the resource returned:
    <customer
      custNo='123'
      relationId='443'
      firstName='Peter'
      lastName='Semper'
    />
    
  • Next the composite needs to use the relationId in the customer resource to get it’s orders, e.g., GET http://localhost/orders?relId=443. This will result in the following xml document:
    <orders relationId='443'>
      <order id='1' product='Car'/>
      <order id='2' product='Bicycle'/>
    </orders>
    
  • The composite service will use the data returned by the customer resource and the order resource to create a new xml document containing both the customer info and the order info:
    <customer>
      <id>123</id>
      <orders>
        <order><id>1</id><product name="Car"/></order>
        <order><id>2</id><product name="Bicycle"/></order>
      </orders>
    </customer>
    

Here’s the sequence diagram illustrating the steps outlined above.

You can achieve this with the following route:

        from("jetty:http://localhost:9012/customerOrders")
                .removeHeaders("CamelHttp*")
                .setHeader("customer",header("custNo"))
                .setHeader(Exchange.HTTP_METHOD,constant("GET"))
                .to("http://localhost:9012/customer")
                .removeHeaders("CamelHttp*")
                .setHeader("relId", xpath("/customer/@relationId",String.class))
                .setHeader(Exchange.HTTP_METHOD,constant("GET"))
                .enrich("http://localhost:9012/orders",aggregate)
                .to("xquery:merge-customer-orders.xquery")
                .setHeader(Exchange.CONTENT_TYPE,constant("text/xml"));

Line by line explanation:

  1. Define an endpoint where the composite service is reachable. I’m using a jetty component to listen for requests.
  2. Remove the http headers from the message received, so they won’t be used for calls from the composite to the other services.
  3. Set the customer parameter for the http call to /customer.
  4. Specify that we’re GETting the customer resource.
  5. Get the customer resource.
  6. Again, remove any http headers, so we’re not messing up the next http call.
  7. Use an xpath expression to determine the relation id of the customer, set the query parameter used to GET the orders for this relation.
  8. Specify that we’re GETting the orders resource.
  9. GET the orders resource, and then use the aggregate object to combine customer and orders. In this example the aggregate object just concatenates both xml documents, so we can easily use it in the next step.
  10. Use an xquery to create a new xml document from the combined customer and orders document.
  11. Set the Http header for Content-type to text/xml, so the client knows it’s receiving an xml representation of the resource.

The aggregate object takes the message (exchange) received from the customer resource and the message received from the orders resource and concatenes them into one xml document:

AggregationStrategy aggregate = new AggregationStrategy(){
  @Override
  public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
    newExchange.getOut().setBody("<all>"
      + oldExchange.getIn().getBody(String.class)
      + newExchange.getIn().getBody(String.class)
      + "</all>");
    return newExchange;
  }
};

The combined xml document can easily be used in an xquery to build a new xml document:

<customer>
  <id>{data(/all/customer/@custNo)}</id>
  <orders>
    { for $order
      in  /all/orders/order
      return <order><id>{data($order/@id)}</id><product name='{data($order/@product)}'/></order>
    }
  </orders>
</customer>

That’s most of the code you need. You’ll have to put the route configuration into a route builder and start a camel context to run the route:

    public static void main(String args[]) throws Exception {
        CamelContext ctx = new DefaultCamelContext();
        ctx.addRoutes(new CustomerOrdersResourceRouteBuilder());
        ctx.start();
    }

The nice thing about camel is that’s easy to test and debug. You can simply start the main class in your IDE and give the route a try. You can use the same approach to unit test the route. No need to do a complete deployment to some ESB server.

Another advantage of using Camel is that all your endpoints are normal strings in some java code that can easily be made configurable, for example using a property file

Getting started with Nexus maven repository manager

March 9th, 2010  |  Published in java, oss, software development

Nexus is a maven repository manager. You can use Nexus to host your own maven repository for artifact created in your company, or for caching external artifacts.

Getting started with Nexus is pretty easy. Download the application. The package contains a webserver, so you don’t have to have a java container running. Simply unpack the downloaded archive and start the applications:

cd nexus/nexus-webapp-1.5.0/bin/jsw/linux-x86-32/
nexus start

Nexus has a web interface for managing your maven repository. The url for this web app is: http://localhost:8081/nexus/. The preconfigured admin account is admin, password: admin123.

According to the Nexus documentation you need to enable remote index downloads on a new installation, but it seems that this has been removed in the latest Nexus release. I couldn’t find the checkbox mentioned in Nexus 1.5.0.

Next you need to tell maven to use your maven repository. To do this, modify $HOME/.m2/settings.xml as follows:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <mirrors>
    <mirror>
      <id>nexus</id>
      <mirrorOf>*</mirrorOf>
      <url>http://localhost:8081/nexus/content/groups/public</url>
    </mirror>
  </mirrors>
  <proxies></proxies>
  <servers></servers>
  <pluginGroups></pluginGroups>
  <profiles>
    <profile>
      <id>nexus</id>
      <!--Enable snapshots for the built in central repo to direct -->
      <!--all requests to nexus via the mirror -->
      <repositories>
        <repository>
          <id>central</id>
          <url>http://central</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>central</id>
          <url>http://central</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>nexus</activeProfile>
  </activeProfiles>
</settings>

To make sure you are actually using dependencies downloaded through nexus, delete all dependencies maven has already cached on your system:

rm -rf ~/.m2/repository

To test this Nexus setup, we can create a little java application using maven. The following create a java web application:

mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=nl.iteye -DartifactId=App1
cd App1

You should now be able to compile and package your application:

mvn clean install

Next we’ll add the embedded glassfish maven plugin to our pom so we can test the web application. Add the plugin in the build section of your pom:

    <plugins>
         <plugin>
            <groupId>org.glassfish</groupId>
            <artifactId>maven-embedded-glassfish-plugin</artifactId>
            <version>3.0</version>
            <configuration>
               <app>${project.build.directory}/${build.finalName}.war</app>
               <port>7070</port>
               <containerType>web</containerType>
            </configuration>
         </plugin>
    </plugins>

When you try to run your application using the embedded glassfish plugin you’ll run into an error as maven will not be able to download all the required dependencies:

$:~/projects/jee/App1$ mvn embedded-glassfish:run
[INFO] Scanning for projects...
Downloading: http://localhost:8081/nexus/content/groups/public/org/glassfish/maven-embedded-glassfish-plugin/3.0/maven-embedded-glassfish-plugin-3.0.pom
[INFO] Unable to find resource 'org.glassfish:maven-embedded-glassfish-plugin:pom:3.0' in repository central (http://central)
Downloading: http://localhost:8081/nexus/content/groups/public/org/glassfish/maven-embedded-glassfish-plugin/3.0/maven-embedded-glassfish-plugin-3.0.pom
[INFO] Unable to find resource 'org.glassfish:maven-embedded-glassfish-plugin:pom:3.0' in repository central (http://central)
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error building POM (may not be this project's POM).

Project ID: org.glassfish:maven-embedded-glassfish-plugin

Reason: POM 'org.glassfish:maven-embedded-glassfish-plugin' not found in repository: Unable to download the artifact from any repository

  org.glassfish:maven-embedded-glassfish-plugin:pom:3.0

from the specified remote repositories:
  nexus (http://localhost:8081/nexus/content/groups/public)

 for project org.glassfish:maven-embedded-glassfish-plugin

To fix this problem we need to add the maven repository containing the glassfish plugin to Nexus. Log into Nexus using the admin account and, select repositories,and then add a proxy repository. Specify the following repository:

Next we need to add the glassfish proxy repository to the Public Repositories group:

Move the Glassfish Maven 2 Repository from available repositories to ordered group repositories:

Now you should be able to start Glassfish using maven, as Nexus will be able to find the required dependencies:

$:~/projects/jee/App1$ mvn embedded-glassfish:run
[INFO] Scanning for projects...
Downloading: http://localhost:8081/nexus/content/groups/public/org/glassfish/maven-embedded-glassfish-plugin/3.0/maven-embedded-glassfish-plugin-3.0.pom
4K downloaded  (maven-embedded-glassfish-plugin-3.0.pom)
[WARNING] *** CHECKSUM FAILED - Checksum failed on download: local = '7e111e395ec93ac48034fdf599552d547dc27618'; remote = '085185fbf2f1b3d0d36e557f4d42c9f47edc4d2c' - RETRYING
Downloading: http://localhost:8081/nexus/content/groups/public/org/glassfish/maven-embedded-glassfish-plugin/3.0/maven-embedded-glassfish-plugin-3.0.pom
4K downloaded  (maven-embedded-glassfish-plugin-3.0.pom)
[WARNING] *** CHECKSUM FAILED - Checksum failed on download: local = '7e111e395ec93ac48034fdf599552d547dc27618'; remote = '085185fbf2f1b3d0d36e557f4d42c9f47edc4d2c' - IGNORING
Downloading: http://localhost:8081/nexus/content/groups/public/org/glassfish/maven-embedded-glassfish-plugin/3.0/maven-embedded-glassfish-plugin-3.0.jar
16K downloaded  (maven-embedded-glassfish-plugin-3.0.jar)
[WARNING] *** CHECKSUM FAILED - Checksum failed on download: local = 'd6e53dbbc063ccb40aa673f0a56bafa0c2c225db'; remote = '0469be7e503a1c3df4c8ddf199b1fba3a998cca2' - RETRYING
Downloading: http://localhost:8081/nexus/content/groups/public/org/glassfish/maven-embedded-glassfish-plugin/3.0/maven-embedded-glassfish-plugin-3.0.jar
16K downloaded  (maven-embedded-glassfish-plugin-3.0.jar)
[WARNING] *** CHECKSUM FAILED - Checksum failed on download: local = 'd6e53dbbc063ccb40aa673f0a56bafa0c2c225db'; remote = '0469be7e503a1c3df4c8ddf199b1fba3a998cca2' - IGNORING
[INFO] ------------------------------------------------------------------------
[INFO] Building App1 Maven Webapp
[INFO]    task-segment: [embedded-glassfish:run]
[INFO] ------------------------------------------------------------------------
Downloading: http://localhost:8081/nexus/content/groups/public/org/glassfish/extras/glassfish-embedded-all/3.0/glassfish-embedded-all-3.0.pom
10K downloaded  (glassfish-embedded-all-3.0.pom)
Downloading: http://localhost:8081/nexus/content/groups/public/org/glassfish/extras/extras/3.0/extras-3.0.pom
2K downloaded  (extras-3.0.pom)
Downloading: http://localhost:8081/nexus/content/groups/public/org/glassfish/glassfish-parent/3.0/glassfish-parent-3.0.pom
53K downloaded  (glassfish-parent-3.0.pom)
...
INFO: Security service(s) started successfully....
classLoader = WebappClassLoader (delegate=true; repositories=WEB-INF/classes/)
SharedSecrets.getJavaNetAccess()=java.net.URLClassLoader$7@181c4eb
Mar 9, 2010 9:34:51 PM com.sun.enterprise.web.WebApplication start
INFO: Loading application App1 at /App1
Hit ENTER to redeploy, X to exit

That’s about it.

JEE CDI tip: Target Unreachable, identifier resolved to null

March 5th, 2010  |  Published in java

If you are just starting out with JEE CDI (Weld), it’s easy to forget the required beans.xml file. If you don’t include it, you may run into problems like this:

SEVERE: javax.el.PropertyNotFoundException: /index.xhtml @8,67 action="#{crm.ping}": Target Unreachable, identifier 'crm' resolved to null
javax.faces.el.EvaluationException: javax.el.PropertyNotFoundException: /index.xhtml @8,67 action="#{crm.ping}": Target Unreachable, identifier 'crm' resolved to null
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:95)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
...

The beans.xml file (in META-INF/classes or WEB-INF/) can be empty or contain the following:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>

Absent Code attribute in method that is not native or abstract

March 4th, 2010  |  Published in java, oss, soa  |  3 Comments

I ran into the following problem yesterday while building a rest service using resteasy: the code would compile ok, but the unit tests wouldn’t run. I got the following exception in the output of the unit tests:

java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/ws/rs/ext/RuntimeDelegate
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)

The problem is caused by the javeee-api dependency in my maven pom. As described here, the following dependency provides you with the java-ee api’s, not the implementation. This is ok for compiling, but can’t be used for executing code.

<dependency>
  <groupId>javax</groupId>
  <artifactId>javaee-api</artifactId>
  <version>6.0</version>
</dependency>

I thought i’d solved the issue by adding a scope of provided or even compile, but this doesn’t fix the problem. The maven build still fails with the Absent code attribute… error. Removing the dependency completely solves the issue for now, but will probably give me some problems when i add more code which uses jee6.

Prezi presentation software needs to add visual

February 11th, 2010  |  Published in other

I tried Prezi yesterday, and looked at some of the presentations others made with it. It’s a nice idea, but absolutely not the presentation tool i’m looking for. Prezi basically is a mind-mapping tool, with some nice transitions. But mindmaps are for brainstorming your presentation content. You do not create a compelling presentation by showing a mindmap.

Slides need to be visual support for your story. It should be about visual storytelling. A presentation needs to be more like a live spoken documentary on Discovery channel or National Geographic Channel. I want to be able to create a movie with a presentation tool, not embed a movie. After you create the mindmap of your contents, you need to visualize it. This is where prezi falls short.

In my opinion it should offer a way to translate your mindmap into a storyboard. I really want a presentation tool which allows me to sketch out all the slides on a storyboard using a Wacom tablet. After you’ve created the storyboard, you need to fill the slides with all the real images and graphics. This means the software should have a lot of support for creating (vector) images, and adding photo’s. Integrated internet image search would be perfect. This means it needs to be a combination of animation software with onion skinning support, e.g. Pencil, vector graphics, e.g. Adobe Illustrator or Inkscape, and something like flickr search tool compflight.

So you think it’s the iPad that’s missing features?

January 30th, 2010  |  Published in tablet  |  10 Comments

It’s amazing how many people complain about the hardware specs, but forget about the software. The iPad has the most important feature of all: usability.

Remember mobile internet before the iPhone? Nobody used it. Then along came the iPhone: technically nothing new: touch screens existed before, mobile browsers existed before.

But only the usability of the iPhone has made people start to use mobile internet. So much so that AT&T has a hard time keeping up.

Hardware features don’t matter if the usability isn’t there. And that’s where the iPad shines, just look at some of the video’s here: New Multi-touch Interactions on the Apple iPad. Again, it’s all about the software. Software is the key to ease of use. Apple has just made computing a lot easier.

Previously


Aug 25, 2010
VMware Player: The virtual machine is busy.

by akoelewijn | Read | View Comments

Lost a couple of hours trying to start a vmware image on linux. Turns out the solution was to remove /etc/vmware/not_configured as described here.


Jun 21, 2010
Adding a maven repository for installing features to ServiceMix

by akoelewijn | Read | View Comments

I’m running ServiceMix on a machine which doesn’t have internet access, so installing and upgrading features is a bit hard. You can, however, install features from an internal maven repository like Nexus. This post explains how you can configure which maven repositories should be used by ServiceMix.
The OSGI implementation of ServiceMix (Apache Felix/Karaf) has a [...]


Jun 15, 2010
Upgrade Apache Camel in ServiceMix to version 2.3.0

by akoelewijn | Read | View Comments

Apache ServiceMix 4.2 includes Apache Camel 2.2.0. The following steps outline how you can add Apache Camel 2.3.0 in the same ServiceMix instance. This example uses the versions as released by Progress Fuse.
Go to the ServiceMix console, either by starting servicemix, or by ssh-ing into ServiceMix. To install Camel 2.3 we need to add a [...]


Jun 13, 2010
A composite Rest service using Apache Camel

by akoelewijn | Read | View Comments

The following example illustrates how you can implement a composite service using Apache Camel. The service is exposed as a REST resource, and it uses two other resources to collect the data required.
The composite service will enable a client to get info on a customer and it’s orders. To get this data the composite service [...]


Mar 9, 2010
Getting started with Nexus maven repository manager

by akoelewijn | Read | View Comments

Nexus is a maven repository manager. You can use Nexus to host your own maven repository for artifact created in your company, or for caching external artifacts.
Getting started with Nexus is pretty easy. Download the application. The package contains a webserver, so you don’t have to have a java container running. Simply unpack the [...]


Mar 5, 2010
JEE CDI tip: Target Unreachable, identifier resolved to null

by akoelewijn | Read | View Comments

If you are just starting out with JEE CDI (Weld), it’s easy to forget the required beans.xml file. If you don’t include it, you may run into problems like this:

SEVERE: javax.el.PropertyNotFoundException: /index.xhtml @8,67 action="#{crm.ping}": Target Unreachable, identifier ‘crm’ resolved to null
javax.faces.el.EvaluationException: javax.el.PropertyNotFoundException: /index.xhtml @8,67 action="#{crm.ping}": Target Unreachable, identifier ‘crm’ resolved to null
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:95)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
…

The [...]

About Andrej Koelewijn

On Oracle, Java and OpenSource

Tags

bi bpel camel cep css dsl esb esper google governance grails groovy gtalk html5 innovation internet ipad ivy java javascript jaxrs jersey jigsaw jquery linkeddata linux maven middleware mule noiv openoffice openweb oracle osgi oss plsql rdbms rest soa sql sun tablet web 2.0 xmpp yql

Archives

  • August 2010
  • June 2010
  • March 2010
  • February 2010
  • January 2010
  • December 2009
  • November 2009
  • October 2009
  • August 2009
  • July 2009
  • June 2009
  • May 2009
  • April 2009
  • March 2009
  • February 2009
  • January 2009
  • December 2008
  • November 2008
  • October 2008

Meta

  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org

Recent Posts

  • Nice Java Decompiler tool: JD
  • VMware Player: The virtual machine is busy.
  • Adding a maven repository for installing features to ServiceMix
  • Upgrade Apache Camel in ServiceMix to version 2.3.0
  • A composite Rest service using Apache Camel

Categories

  • cloud
  • java
  • mobile
  • open standards
  • oracle
  • oss
  • other
  • soa
  • software development
  • tablet
  • Uncategorized
  • web

Recent Comments

  • Buddhika on Using google talk from java example
  • Anonymous on A composite Rest service using Apache Camel
  • Guest on How to find true cause of com.sun.star.uno.RuntimeException?
  • Absent Code attribute in method that is not native or abstract « Gooder Code - web development blog, php, java, asp.net, html, javascript on Absent Code attribute in method that is not native or abstract
  • Rmfume on Oracle best thing that could happen to JavaFX?
Buzz
andrkoel: RT @monkchips: James Governor's Monkchips » Day of The Dead: Web Drives Strong Demand for Java Skills http://monk.ly/d4UlND
57 minutes ago, comment
andrkoel: RT @monkchips: In which my business partner @sogrady explains Why You Should Pay Attention to Node.Js http://monk.ly/a4aGIP serverside # ...
7 hours ago, comment
andrkoel: RT @stilkov: http://bit.ly/cDdqgl - AWS Identity and Access Management — I'd hate to have to compete against Amazon's Cloud offerings
13 hours ago, comment
andrkoel: Twitter for ipad is nice, but i still think i need a tool to summarize all info, something like feedly or flipboard is the future
8:36 AM Sep 02, 2010, comment
andrkoel: Trying out the new twitter for ipad... Curious how the panels work.
8:32 AM Sep 02, 2010, comment
 

Contributors

  • admin
  • akoelewijn

Popular

  • Using google talk from java example
  • Groovy and Grape - easiest way to send gtalk message with Apache Camel?
  • So you think it's the iPad that's missing features?
  • SQL is a DSL
  • REST is a distributed data model
  • Oracle best thing that could happen to JavaFX?
  • Google Wave killer app for HTML 5?
  • Oracle buying Sun: what does it mean for Open Source?
  • OSGI boost for middleware innovation?
  • A simple file monitoring console with camel, cometd and jquery
  • Blogroll

    • Java / Oracle SOA blog
    • Oracle .. Java .. OpenSource .. SOA
    • Mike van Alst
    • IT-eye weblog


  • ©2010 Andrej Koelewijn
    Powered by WordPress using the Gridline Lite theme by Graph Paper Press.