2012-10-19 12 views
7

Mam usługi REST realizowany z JAX-RS. Usługa internetowa jest przeznaczona do testowania. Moja aplikacja ma HashMap, która zarządza obiekty chcę odzyskać. W jaki sposób można zainicjować tę HashMap kiedy usługa zostanie uruchomiona w celu umożliwienia HashMap ma kilka obiektów można odzyskać? Próbowałem dodać kilka przedmiotów do HashMap w konstruktorze, ale HashMap jest pusta podczas uruchamiania usługi. Używam implementacji JAX-RS z Jersey i konfiguruję zasoby przy użyciu pliku web.xml.Zainicjowanie aplikacji JAX-RS

Mój plik web.xml ma następującą zawartość:

<?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> 

A moja klasa zasób ma następującą treść:

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

Co dokładnie masz na myśli zainicjować? – Javiator

+0

1. Jakiej implementacji JAX-RS używasz? Jersey, CXF, Resteasy? 2. Jak skonfigurować zasoby JAX-RS? Czy używasz 'web.xml' lub jakiejś klasy konfiguracyjnej? Być może nawet używasz Spring. –

+0

używam realizację Jersey i skonfigurować moje JAX-RS zasobów przy użyciu pliku web.xml. – Javiator

Odpowiedz

9

w konstruktorze Twojego serwletu powinny działać (to zawsze wywoływana przed wywołaniem doGet i doPost), ale poza tym można zarejestrować słuchacza, aby wyzerować wszystkie swoje rzeczy:

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) { 
    } 

} 

Jeśli nie jesteś jeszcze na Servlet 3.0 i nie można uaktualnić, a tym samym nie mogą korzystać @WebListener adnotacji, to trzeba ręcznie zarejestrować go w /WEB-INF/web.xml jak poniżej:

<?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> 
Powiązane problemy