标签: guice-servlet

如何在Jersey 2.0中使用guice-servlet?

有没有示例代码演示如何在Jersey 2.0中使用guice-servlet?

guice-servlet jersey-2.0

29
推荐指数
2
解决办法
2万
查看次数

Guice + Tomcat潜在的内存泄漏

我刚刚开始在我的Tomcat webapp中使用Google Guice,并且只要取消部署WAR文件,就会在catalina.out文件中注意到以下内容:

May 16, 2011 5:37:24 PM org.apache.catalina.startup.HostConfig checkResources INFO: Undeploying context [/app]

May 16, 2011 5:37:24 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads SEVERE: A web application appears to have started a thread named [com.google.inject.internal.util.$Finalizer] but has failed to stop it. This is very likely to create a memory leak.

May 16, 2011 5:37:24 PM org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap SEVERE: A web application created a ThreadLocal with key of type [null] (value [com.google.inject.internal.InjectorImpl$1@10ace8d]) and a value of type [java.lang.Object[]] (value [[Ljava.lang.Object;@7e9bed]) but failed to …

java tomcat guice guice-servlet

12
推荐指数
2
解决办法
9491
查看次数

使用Google Guice Servlet配置Apache Shiro

我开始使用Guice/Shiro而不是Spring/Spring Security.我查看了Shiro站点的示例,所有配置示例都是作为INI文件示例制作的.是否可以在普通Java中配置Shiro,因为要配置Guice Servlet?

guice shiro guice-servlet

8
推荐指数
1
解决办法
3678
查看次数

如何让Google Guice与JaxRS合作(泽西岛)

我有一个基本的JAXRS服务,我可以轻松地公开,但一次我希望使用依赖注入API,我怀疑Google Guice将是最好的之一.考虑到这一点,我试图整合它,但文档有点沉重,我不得不四处寻找尝试找到合适的组合

  • 在web.xml
  • Context Listener(我应该使用ServletContainer还是GuiceContainer)
  • 服务
  • 是用@Singleton或@Request注释服务还是什么都没有(我应该用@Singleton注释 - 文档说我应该但是然后说默认是请求范围)
  • 是否使用@InjectParam注释构造函数参数

但是目前我从Google Guice那里得到错误,他们会根据我是否使用@InjectParam注释而改变.

如果我用@InjectParam注释,那么我得到

       Mar 29, 2013 9:52:04 PM com.sun.jersey.spi.inject.Errors processErrorMessages
   SEVERE: The following errors and warnings have been detected with resource and/or provider classes:
   SEVERE: The class com.hillingar.server.dao.interfaces.UserDao is an interface and cannot be instantiated.
   SEVERE: Missing dependency for constructor public com.hillingar.server.SessionUtility(com.hillingar.server.dao.interfaces.UserDao) at parameter index 0
Run Code Online (Sandbox Code Playgroud)

如果我没有注释,那么我得到

    Mar 29, 2013 9:54:59 PM com.sun.jersey.spi.inject.Errors processErrorMessages
SEVERE: The following errors and warnings have been detected with resource and/or provider classes:
  SEVERE: Missing …
Run Code Online (Sandbox Code Playgroud)

java jax-rs jersey guice guice-servlet

8
推荐指数
1
解决办法
7799
查看次数

在Tomcat 7上运行的Web应用程序中的NoClassDefFoundError

我使用由Maven 3构建的gucie-servlet框架用Java编写的Web应用程序.当我在Tomcat 7容器上部署它并尝试使用浏览器访问它时,Tomcat回复404状态代码.这是来自Tomcat的日志:

Apr 4, 2013 11:39:50 AM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextDestroyed()
Apr 4, 2013 11:39:50 AM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextDestroyed()
Apr 4, 2013 11:39:55 AM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class ru.hive.webserver.config.HiveServletConfig
java.lang.NoClassDefFoundError: ru/hive/base/db/modules/DatabaseModule
    at ru.hive.webserver.config.HiveServletConfig.getInjector(HiveServletConfig.java:24)
    at com.google.inject.servlet.GuiceServletContextListener.contextInitialized(GuiceServletContextListener.java:45)
    at ru.hive.webserver.config.HiveServletConfig.contextInitialized(HiveServletConfig.java:19)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4797)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5291)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:977)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1655)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:662)
Caused by: …
Run Code Online (Sandbox Code Playgroud)

java maven-3 maven tomcat7 guice-servlet

7
推荐指数
1
解决办法
3万
查看次数

Weblogic 12c:Jersey的首选web-inf-classes和prefer-application-packages

我必须 在Weblogic 12c服务器(12.2.1)上使用两者(奇怪的是......)" prefer-web-inf-classes "和" web- to -application-packages"的weblogic.xml属性

它是基于Jersey 1.9的REST应用程序.*(Jersey 1.x JAX-RS RI)和Guice.

1.为什么要使用:prefer-web-inf-classes

如果你有多个WAR,你必须在war/lib的级别放置guice-jersey/guice的库,否则你会得到Multibindings Error.

它必须表明prefer-web-inf-classes为true. 这种方式正常!我试图以相同的方式使用prefer-application-packages和package(com.sun.jersey.guice.spi.container.servlet /com.google.inject.servlet等等),但没办法.

注意:无法在EAR级别排除此库.

2.为什么要使用:prefer-application-packages

要在Weblogic 12c(12.2.1)上使用Jersey 1.x JAX-RS RI,所以我必须指出以下包(Weblogic使用Jersey 2的其他方式,以及不同版本的Jackson库等)

如果以这种方式表示,它在Jersey 1.X上完美运行..我已分别探讨了两场战争,并且工作得很好......但是,请记住我的朋友我有两场战争......所以....

摘要

我不能同时使用这两个属性(在weblogic.xml上使用这两个属性部署错误..),但它需要:

  1. 对于Guice Filter的问题,需要将prefer-web-inf-classes设置为true,以便在war-lib级别使用guice-servlet.jar/jersey-guice.jar.
  2. 要使用Jersey 1.x,需要使用..... prefer-application-package

问题:如何将两者结合使用其中之一?

java guice guice-servlet weblogic12c jersey-1.0

7
推荐指数
1
解决办法
9747
查看次数

使用Guice向ServletContextListener注入依赖项

由于ServletContextListener是由服务器创建的,而不是由Guice创建的,因此无法找到让它一起工作的方法.如何在ServletContextListener中获取guice注入器?

也许有更好的方法可以关闭logger或persistance之类的服务,然后在contextDestroyed方法中执行它并在contextInitialized中初始化它们?

servlets dependency-injection guice servlet-listeners guice-servlet

6
推荐指数
2
解决办法
4788
查看次数

在Java GAE后端Servlet中使用Guice Injection

我有一个两难选择在我的GAE的Java应用程序:我想写将由GAE后端处理一个servlet 它也必须用Guice的依赖注入启动所有servlet的领域.我尝试了多种方法,但似乎没有人为我做这个伎俩.

我首先尝试在servlet中使用Sitebricks,但似乎这样做会导致GAE在查询后端URL时无法将类检测为合法的servlet:始终从后端返回404 Not Found.尽管如此,我确信该类使用Sitebricks注释正确注释,因为相同的URI路径与前端实例一起工作正常.

接下来,我尝试使用Guice Servlet Extension(参见此链接); 在我创建全局的类中Injector,我使用了这个绑定:

return Guice.createInjector(..., new ServletModule() {
    @Override
    protected void configureServlets() {
        serve("/backend/*").with(MyBackend.class);
    }
}, ...);
Run Code Online (Sandbox Code Playgroud)

不幸的是,与Sitebricks发生的问题完全相同:我在后端返回404错误,但在前端没有.

最后一种可行的方法是配置servlet-mapping web.xml; 传统的方法.这最终允许我的后端检测URI映射(随后是Google的Java GAE后端文档中写的内容:"后端与主应用程序版本共享web.xml中定义的servlet.").不幸的是,我无法利用Guice注射器使用这个程序,因此我非常不希望使用它web.xml.

我甚至尝试结合第二种和第三种方法:同时使用Guice Servlet Extension和web.xml.这个错误从后端返回500错误,并出现此错误:

java.lang.InstantiationException: com.example.MyBackend
    at java.lang.Class.newInstance0(Class.java:340)
    at java.lang.Class.newInstance(Class.java:308)
    at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
    at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428)
    at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.google.appengine.tools.development.BackendServersFilter.doRedirectedServerRequest(BackendServersFilter.java:292)
    at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:106)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at …
Run Code Online (Sandbox Code Playgroud)

google-app-engine servlets guice guice-servlet sitebricks

6
推荐指数
1
解决办法
882
查看次数

Servlet 3.0注释与Guice结合使用

我正在尝试更新遗留的Guice应用程序,我想知道在考虑Servlet 3.0注释时是否有任何一种首选的方法.例如,我的应用程序有一个过滤器FooFilter,它在Guice Module Factory方法configureServlets()中定义,如下所示:

    Map<String, String> fooParams = new HashMap<String, String>();
    fooParams.put("someParam", "parameter information");                              
    filter("/foo.jsp","/foo/*").through(com.example.filter.FooFilter.class, fooParams);
Run Code Online (Sandbox Code Playgroud)

以上绑定是否仍然必要,或者它是否会使用@WebFilter Servlet 3.0注释干扰以下内容:

    @Singleton
    @WebFilter(
        filterName="FooFilter",
        urlPatterns={"/foo.jsp", "/foo/*"},
        initParams = {
                    @WebInitParam(name="foo", value="Hello "),
                    @WebInitParam(name="bar", value=" World!")
                 })
    public class FooFilter implements Filter {
    etc....
Run Code Online (Sandbox Code Playgroud)

现在首选哪种方法?他们会互相混乱吗?

annotations guice servlet-3.0 servlet-filters guice-servlet

6
推荐指数
1
解决办法
934
查看次数

Tomcat:在同一个Web应用程序中使用servlet和websocket(jsr356)

我在tomcat中使用Guice-servlets和websocket创建了一个示例webapp,现在一次使用guice过滤器websocket停止工作

基本信息:

在我的web.xml中,我使用了初始化Guiceservlet GuiceBasedListener

<web-app>
     <listener>
        <listener-class>test.GuiceBasedListener</listener-class>
    </listener>          
    <filter>
        <filter-name>guiceFilter</filter-name>
        <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>guiceFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)

GuieBasedListener将所有请求绑定/*到的代码MyDispatcher

public class GuiceBasedListener extends GuiceServletContextListener {
    protected Injector getInjector() {
        return Guice.createInjector( new ServletModule() {
            @Override
            protected void configureServlets() {
                bind(MyDispatcher.class).asEagerSingleton();
                serve("/*").with(MyDispatcher.class);//////IMPORTANT LINE//
            }
        });}}
Run Code Online (Sandbox Code Playgroud)

MyDispatcher 只用String响应的代码

public class MyDispatcher extends HttpServlet {    
    @Inject private Injector injector;
    public MyDispatcher() {}    
    public void service(ServletRequest req, ServletResponse resp) throws IOException, ServletException {
        resp.getOutputStream().print("SUCCESS:" + req);
    }
}
Run Code Online (Sandbox Code Playgroud)

我还有一个@ServerEndPoint for Websocket …

tomcat servlets websocket guice-servlet jsr356

6
推荐指数
1
解决办法
1166
查看次数