不需要任何配置。如果您愿意查看另一个容器的示例用作参考,请看下面的示例,它将@Singleton EJB公开为JAX-RS服务和@LocalBean。
这个bean本身使用容器管理的事务和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;
}
下面是与之相关的单元测试代码(使用可嵌入的EJBContainer API):
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();
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文件。
Application
继承的类,该类被注释为**@ApplicationPath("/resources"),我的web服务类是无状态的,被注释为@Path("/getdata"),它包括一个简单的方法,被注释为@GET @Path("/getaccount")。我在Weblogic中使用的URL来调用此webservice是:http://localhost:7001/resources/getdata/getaccount
,结果是错误404--未找到**。 - Hosein Aqajani