Внедрение объектов в классы сервлетов с помощью JAX-RS - PullRequest
0 голосов
/ 13 марта 2012

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

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

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

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

Каков предпочтительный способ сделать это?Является ли это возможным?Мой 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>

1 Ответ

0 голосов
/ 13 марта 2012

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

Затем я бы зарегистрировал класс реализации синглтона (или пула в зависимости от ваших потребностей) в центральном хранилище с поддержкой потоков, видимым обоим сервлетам, таким как JNDI.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...