2012-03-13 53 views
0

对于整个servlet而言,我很新,所以如果我混合使用不正确的或易混淆的术语,请纠正我的错误。然而,我使用JAX-RS(Jersey)编写了一个使用Java编写博客的ping服务器,并且我遇到了一个问题,我有一个接受REST输入的servlet类,另一个servlet类列出了相同的内容。使用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); 
    } 
} 

这个工作在一个小规模的开发环境,但感觉很脏,可能不会在重链工作由于并发问题等原因导致生产环境恶化。它也不是很灵活。我想要做的是有一个接口,可以有读取和写入数据的方法。然后,我会将实现此接口的类的对象注入到这两个servlet中,以便它们实际上使用相同的对象与数据进行交互。然后这将由同步的列表或数据库事务或其他事物支持。

这样做的首选方法是什么?可能吗?我的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> 

回答

0

,而不是一个静态类,我想设计一个接口与你的getter和setter,不是创建一个实现类。

然后,我会注册一个单线程(或根据您的需要的池)实现类与两个servlet,如JNDI可见的线程安全的中央存储库。

小服务程序查询中央存储库并'接口'转换。

+0

是的,这是我想到的。你能举一个例子说明如何用JNDI做到这一点吗?现在使用Google来尝试找到一个... :) – vrutberg 2012-03-13 18:32:52

+0

另外,我发现这个:http://jersey.java.net/nonav/documentation/latest/user-guide.html#d4e188 我可以使用它来解决单身人士的需求? – vrutberg 2012-03-13 18:35:09

+0

我会避免使用泽西岛唯一的解决方案;你可能总是需要来自另一个artefact的中央仓库的资源,比如标准的servlet。如果你确定你只会做Jersey/JAX-RX,为什么不呢。对于JNDI,它取决于你的servlet容器。如果您使用Jetty,则必须启用它:请点击此处:[link](http://wiki.eclipse.org/Jetty/Feature/JNDI)。对于Tomcat来说,它已经'在那里'了,请检查Tomcat **全局** JNDI如何 – 2012-03-14 06:27:51

相关问题