Конфигурация не требуется. Если вы желаете взглянуть на другой контейнер - по крайней мере, для справочных целей - вот пример, в котором EJB @Singleton представляет собой службу JAX-RS и @ LocalBean.
Сам бин использует Управляемые контейнером транзакции и JPA с объектами JPA @Entity, используемыми в реальных сообщениях JAX-RS, - эффективно превращая EntityManager в транзакционную службу JAX-RS.
Небольшой кусок класса EJB:
@Singleton
@Lock(LockType.WRITE)
@Path("/user")
@Produces(MediaType.APPLICATION_XML)
public class UserService {
@PersistenceContext
private EntityManager em;
@Path("/create")
@PUT
public User create(@QueryParam("name") String name,
@QueryParam("pwd") String pwd,
@QueryParam("mail") String mail) {
User user = new User();
user.setFullname(name);
user.setPassword(pwd);
user.setEmail(mail);
em.persist(user);
return user;
}
@Path("/list")
@GET
public List<User> list(@QueryParam("first") @DefaultValue("0") int first,
@QueryParam("max") @DefaultValue("20") int max) {
List<User> users = new ArrayList<User>();
List<User> found = em.createNamedQuery("user.list", User.class).setFirstResult(first).setMaxResults(max).getResultList();
for (User u : found) {
users.add(u.copy());
}
return users;
}
И вот часть модульного теста для него (использует API Embeddable EJBContainer ):
public class UserServiceTest {
private static Context context;
private static UserService service;
private static List<User> users = new ArrayList<User>();
@BeforeClass
public static void start() throws NamingException {
Properties properties = new Properties();
properties.setProperty(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE, "true");
context = EJBContainer.createEJBContainer(properties).getContext();
// create some records
service = (UserService) context.lookup("java:global/rest-on-ejb/UserService");
users.add(service.create("foo", "foopwd", "foo@foo.com"));
users.add(service.create("bar", "barpwd", "bar@bar.com"));
}
@Test
public void list() throws Exception {
String users = WebClient.create("http://localhost:4204")
.path("/user/list")
.get(String.class);
assertEquals(
"<users>" +
"<user>" +
"<email>foo@foo.com</email>" +
"<fullname>foo</fullname>" +
"<id>1</id>" +
"<password>foopwd</password>" +
"</user>" +
"<user>" +
"<email>bar@bar.com</email>" +
"<fullname>bar</fullname>" +
"<id>2</id>" +
"<password>barpwd</password>" +
"</user>" +
"</users>", users);
}
Полный источник примера здесь . Весь пример состоит из трех классов (включая тест) и файла persistence.xml.