2012-10-19 29 views
7

Tôi có dịch vụ REST được triển khai với JAX-RS. Dịch vụ web dành cho mục đích thử nghiệm. Ứng dụng của tôi có một số HashMap, quản lý các đối tượng mà tôi muốn truy xuất. Làm thế nào tôi có thể khởi tạo HashMap này khi dịch vụ bắt đầu theo thứ tự HashMap có một số đối tượng tôi có thể truy xuất? Tôi đã cố gắng để thêm một số đối tượng vào các HashMap trong constructor, nhưng HashMap là sản phẩm nào khi dịch vụ bắt đầu. Tôi sử dụng triển khai JAX-RS của Jersey và định cấu hình tài nguyên của mình bằng cách sử dụng tệp web.xml.Khởi tạo ứng dụng JAX-RS

tập tin web.xml của tôi có nội dung sau:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app 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/web-app_3_0.xsd" version="3.0"> 
<display-name>OPMSimulator</display-name> 

<servlet> 
    <servlet-name>MyServlet</servlet-name> 
    <servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class> 
     <init-param> 
      <param-name>javax.ws.rs.Application</param-name> 
    <param-value>com.ibm.opm.mobile.prototype.TestApplication</param-value> 
    </init-param> 
     <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>MyServlet</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 
</web-app> 

Và lớp tài nguyên của tôi có nội dung sau:

public class Test { 

    private static HashMap<Integer, Database> databases; 

    @GET 
    @Produces(MediaType.TEXT_XML) 
    @Path("/database/{id}") 
    public String database(@PathParam("id")String id) { 
     Database database = databases.get(Integer.parseInt(id)); 
     return XMLGenerator.getXML(database); 
    } 
} 
+0

Chính xác những gì bạn có ý nghĩa gì với khởi tạo? – Javiator

+0

1. Bạn đang sử dụng cài đặt JAX-RS nào? Jersey, CXF, Resteasy? 2. Bạn định cấu hình tài nguyên JAX-RS của mình như thế nào? Bạn có sử dụng 'web.xml' hoặc một số lớp cấu hình không? Có lẽ bạn thậm chí sử dụng Spring. –

+0

Tôi sử dụng triển khai Jersey và tôi định cấu hình tài nguyên JAX-RS của mình bằng cách sử dụng tệp web.xml. – Javiator

Trả lời

9

Trong constructor của servlet của bạn nên làm việc (nó luôn luôn gọi trước khi gọi doGetdoPost), nhưng nếu không bạn có thể đăng ký người nghe để khởi tạo tất cả nội dung của mình:

import javax.servlet.ServletContextEvent; 
import javax.servlet.ServletContextListener; 
import javax.servlet.annotation.WebListener; 

@WebListener 
public class Manager implements ServletContextListener { 

    public void contextInitialized(ServletContextEvent event) { 
    } 

    public void contextDestroyed(ServletContextEvent event) { 
    } 

} 

Nếu bạn không phải trên Servlet 3.0 được nêu ra và không thể nâng cấp, và do đó không thể sử dụng @WebListener chú thích, sau đó bạn cần phải tự đăng ký nó trong /WEB-INF/web.xml như dưới đây:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"> 
<display-name>projectName</display-name> 
<listener> 
    <listener-class>Manager</listener-class> 
    </listener> 
    ... 
</web-app> 
Các vấn đề liên quan