Вопрос

Я довольно новых для всего этого сервлета, поэтому, пожалуйста, исправьте меня, если я смешу или использую неправильные / запутанные условия для вещей. Однако я пингу в блоге Ping Server в Java, используя JAX-RS (Джерси), и я сталкиваюсь с проблемой, где у меня есть один класс сервлета, который принимает вход в отдохнуть, и другой класс Servlet, который перечислены тот же контент.

прямо сейчас они делятся своими объектами через класс, который выглядит так:

public class BlogPingUtils {

    private static final String LIST_OF_CHANGES = "listOfChanges";

    public static List<PingInfo> getListOfChanges(ServletContext context) {
        List<PingInfo> listOfChanges = (List<PingInfo>)context.getAttribute(LIST_OF_CHANGES);
        if(listOfChanges == null) listOfChanges = new ArrayList<PingInfo>();

        return listOfChanges;
    }

    public static void setListOfChanges(ServletContext context, List<PingInfo> listOfChanges) {
        context.setAttribute(LIST_OF_CHANGES, listOfChanges);
    }
}
.

Это работает в небольшой среде разработки, но она чувствует себя грязной, и, вероятно, не будет работать в тяжелой производственной среде из-за вопросов параллелизма и таких. Также это не очень гибко. Я хотел бы сделать, это иметь интерфейс, который будет иметь методы чтения и записи данных. Тогда я бы ввел объект класса, который реализует этот интерфейс в этих двух сервлетах, чтобы они на самом деле используют один и тот же объект для взаимодействия с данными. Затем он будет поддерживаться синхронизированным списком или транзакциями базы данных или что-то в этом роде.

Что будет предпочтительным способом сделать это? Является ли это возможным? My web.xml сейчас очень просто и выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
                             http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
  <display-name>Blog Ping</display-name>

  <servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.vrutberg.blogping</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>
.

Это было полезно?

Решение

, а не статический класс, я бы разработал интерфейс с вашими геттерс и загадателями, чем создать класс реализации.

Я бы тогда зарегистрировал Singleton (или Pool в зависимости от ваших потребностей) класса реализации с помощью потокового центрального хранилища, видимого как сервлеткой, такими как jndi.

Серлеты запрашивают центральный репозиторий и «лить» на интерфейс.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top