Two weeks of holiday means time to finally play with some things I had on my list for quite some time now. One of them was Tomee. I have always been interested in JEE applications. Coming from the old old EJB 1 I remember the pain of working with it and I switched quite fast to Spring.
A lot has changed in the years and EJB 3 and 3.1 are a delight to work with. Tomee is a apache project where they have upgraded Tomcat with other apache projects to make a complete TCK passing EE server. Go to tomee.apache.org and especially watch David talk about it. I saw him give a talk in Devoxx and he is very enthousiastic.
While playing with it I noticed not even the examples worked from within Wicket. The problem was the way the wicketstuff javaee-inject does the naming lookup:
public String calculateName(String ejbName, Class<?> ejbType)
{
return "java:comp/env/" + (ejbName == null ? ejbType.getName() : ejbName);
}
The name will not be found that way. Tomee is built on EJB 3.1 and it standardized they lookup to:
java:global[/<application-name>]/<module-name>/<bean-name>#<interface-name>
So again the way wicket is setup comes to the rescue. Make your namingstrategy:
public class TomeeJndiNamingStrategy implements IJndiNamingStrategy {
private static final long serialVersionUID = 4496498533970047379L;
@Override
public String calculateName(String ejbName, Class<?> ejbType) {
String nameToUse = ejbName != null ? ejbName : ejbType.getSimpleName();
return "java:global/tomee/" + nameToUse + "!" + ejbType.getName();
}
}
I use tomee
here as it is the name of the project. YOu could of course make it generic by using java:global/module/
.
Install it like this:
@Override
protected void init() {
getComponentInstantiationListeners().add(new JavaEEComponentInjector(this,new TomeeJndiNamingStrategy()));
}
done. You can now get EJB’s from tomee in your wicket application. Will it be much use this way? According to the wicketstuff wiki:
Beware! Due to classloading limitations for entities, you cannot mix the usage of @PersistenceUnit and @EJB to persist your entities. So you have to choose only one of these approaches in your application.
So either you can use a persistenceUnit or an EJB. Hmmmz but I wanted EJB’s that have persistence units. You know the way netbeans does facade’s………
Well another thing solved.