I had to try TomEE
I had to try TomEE and I liked it (TomEE 1.5.2 plus).
I started of building a simpel model, then an ejb to end of with JAX-RS and JAX-WS.
I missed the @Stateless annotation on the dk/jarry/tomee/todo/ws/ToDoImpl.java class in the first run and it was a pain to find the error. Place to work on default values.
eclipse project in a zip file
I am thrilled to learn that TomEE have chosen CXF for both JAX-WS and JAX-RS.
Next on my ToDo list is using JPA to store data in Derby or MySQL.
- dk/jarry/tomee/todo/model/Priority.java
- dk/jarry/tomee/todo/model/ToDo.java
- dk/jarry/tomee/todo/ejb/ToDoService.java
- dk/jarry/tomee/todo/ejb/ToDoServiceBean.java
- dk/jarry/tomee/todo/rest/ToDoResource.java
- dk/jarry/tomee/todo/ws/IToDo.java
- dk/jarry/tomee/todo/ws/ToDoImpl.java
package dk.jarry.tomee.todo.model;
/**
* @author Michael Bornholdt Nielsen
*
*/
public enum Priority {
VARY_HIGE,
HIGH,
MEDIUM,
LOW,
VARY_LOW;
}
package dk.jarry.tomee.todo.model;
import java.util.Calendar;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.xml.bind.annotation.XmlRootElement;
/**
* If you forget @XmlRootElement you get something like this<br>
* <br> *
* May 03, 2013 8:50:28 PM org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor
* writeResponseErrorMessage<br>
* WARNING: No message body writer has been found for response class ArrayList.
*
* @author Michael Bornholdt Nielsen
*/
@XmlRootElement
@Entity
public class ToDo {
@Id
@GeneratedValue
private Integer id;
private String subject;
private String body;
private Calendar created;
private Calendar updated;
private Priority priority;
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public Calendar getCreated() {
return created;
}
public void setCreated(Calendar created) {
this.created = created;
}
public Calendar getUpdated() {
return updated;
}
public void setUpdated(Calendar updated) {
this.updated = updated;
}
public Priority getPriority() {
return priority;
}
public void setPriority(Priority priority) {
this.priority = priority;
}
public Integer getId() {
return id;
}
}
package dk.jarry.tomee.todo.ejb;
import java.util.List;
import javax.ejb.Local;
import dk.jarry.tomee.todo.model.ToDo;
/**
* @author Michael Bornholdt Nielsen
*
*/
@Local
public interface ToDoService {
public List<ToDo> getAll();
}
package dk.jarry.tomee.todo.ejb;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.ejb.Stateless;
import dk.jarry.tomee.todo.model.Priority;
import dk.jarry.tomee.todo.model.ToDo;
/**
* @author Michael Bornholdt Nielsen
*
*/
@Stateless
public class ToDoServiceBean implements ToDoService {
private List<ToDo> todos = new ArrayList<ToDo>();
public ToDoServiceBean(){
System.out.println("ToDoService constructor...");
ToDo toDo = new ToDo();
toDo.setBody("Body 1");
toDo.setCreated(Calendar.getInstance());
toDo.setPriority(Priority.HIGH);
toDo.setSubject("Subject 1");
toDo.setUpdated(Calendar.getInstance());
todos.add(toDo);
toDo = new ToDo();
toDo.setBody("Body 2");
toDo.setCreated(Calendar.getInstance());
toDo.setPriority(Priority.HIGH);
toDo.setSubject("Subject 2");
toDo.setUpdated(Calendar.getInstance());
todos.add(toDo);
toDo = new ToDo();
toDo.setBody("Body 3");
toDo.setCreated(Calendar.getInstance());
toDo.setPriority(Priority.HIGH);
toDo.setSubject("Subject 3");
toDo.setUpdated(Calendar.getInstance());
todos.add(toDo);
}
@Override
public List<ToDo> getAll() {
// TODO Auto-generated method stub
return todos;
}
}
package dk.jarry.tomee.todo.rest;
import java.util.List;
import javax.ejb.EJB;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import dk.jarry.tomee.todo.ejb.ToDoService;
import dk.jarry.tomee.todo.model.ToDo;
@Path("rest/todo")
public class ToDoResource {
@EJB
ToDoService toDoService;
@GET
public List<ToDo> getAll(){
return toDoService.getAll();
}
}
package dk.jarry.tomee.todo.ws;
import java.util.List;
import javax.jws.WebService;
import dk.jarry.tomee.todo.model.ToDo;
/**
* @author Michael Bornholdt Nielsen
*
*/
@WebService
public interface IToDo {
public List<ToDo> getAll();
}
package dk.jarry.tomee.todo.ws;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.jws.WebService;
import dk.jarry.tomee.todo.ejb.ToDoService;
import dk.jarry.tomee.todo.model.ToDo;
/**
* If you forget @Stateless you get something like this<br>
* SEVERE: Error deploying CXF webservice for servlet
* dk.jarry.tomee.todo.ws.ToDoImpl java.lang.IllegalArgumentException: Could not
* find servlet dk.jarry.tomee.todo.ws.ToDoImpl in web application context
* /dk.jarry.tomee.todo<br>
* <br>
* See : <a
* href="http://tomee.apache.org/examples-trunk/simple-webservice/README.html"
* title="simple-webservice"></a>
*
* @author Michael Bornholdt Nielsen
*
*/
@Stateless
@WebService
public class ToDoImpl implements IToDo {
@EJB
ToDoService toDoService;
public List<ToDo> getAll() {
return toDoService.getAll();
}
}
Created 03/05-2013 by Michael Bornholdt Nielsen