Hi guys,
I'm using Jersey, and Spring for AOP. In the rest tier, I need to set my proxy target type to be of the target class. This is due to resources not using interfaces (as expected). Otherwise jersey blows up when proxying. However, I'm receiving strange errors on bean scope. Specifically, I'm receiving this error. As you can see, the scope is singleton, so I'm a bit confused why I'm receiving this error. Any thoughts?
V 3.2.0.RELEASE
Thanks!
Todd
Code:SEVERE: service exception: java.lang.RuntimeException: The scope of the component class org.usergrid.rest.JacksonCustomMapperProvider must be a singleton at com.sun.jersey.core.spi.component.ioc.IoCProviderFactory.wrap(IoCProviderFactory.java:102) at com.sun.jersey.core.spi.component.ioc.IoCProviderFactory._getComponentProvider(IoCProviderFactory.java:93) at com.sun.jersey.core.spi.component.ProviderFactory.getComponentProvider(ProviderFactory.java:153) at com.sun.jersey.core.spi.component.ProviderServices.getComponent(ProviderServices.java:251) at com.sun.jersey.core.spi.component.ProviderServices.getProviders(ProviderServices.java:148) at com.sun.jersey.core.spi.factory.ContextResolverFactory.init(ContextResolverFactory.java:83) at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1271) at com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:169) at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:775) at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:771) at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193) at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:771) at com.sun.jersey.spi.spring.container.servlet.SpringServlet.initiate(SpringServlet.java:117) at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:318) at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:609) at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210) at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:373) at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:556) at javax.servlet.GenericServlet.init(GenericServlet.java:241) at org.glassfish.grizzly.servlet.ServletHandler.loadServlet(ServletHandler.java:448) at org.glassfish.grizzly.servlet.ServletHandler.doServletService(ServletHandler.java:373) at org.glassfish.grizzly.servlet.ServletHandler.service(ServletHandler.java:330) at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:163) at org.glassfish.grizzly.http.server.HttpHandlerChain.service(HttpHandlerChain.java:195) at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:163) at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:158) at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:286) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:223) at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:155) at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:134) at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:78) at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:827) at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:103) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:111) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:131) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:508) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:488) at java.lang.Thread.run(Thread.java:680)
Class
Code:@Provider @Component @Scope("singleton") @Produces({ MediaType.APPLICATION_JSON }) public class JacksonCustomMapperProvider implements ContextResolver<ObjectMapper> { private static final Logger logger = LoggerFactory .getLogger(JacksonCustomMapperProvider.class); public final static Annotations[] BASIC_ANNOTATIONS = { Annotations.JACKSON }; MapperConfigurator _mapperConfig; public JacksonCustomMapperProvider() { logger.info("JacksonCustomMapperProvider installed"); _mapperConfig = new MapperConfigurator(new ObjectMapper(), BASIC_ANNOTATIONS); _mapperConfig.setAnnotationsToUse(BASIC_ANNOTATIONS); // do configuration of mapper here _mapperConfig .configure(SerializationConfig.Feature.INDENT_OUTPUT, true); _mapperConfig.configure( SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false); } @Override public ObjectMapper getContext(Class<?> aClass) { return _mapperConfig.getConfiguredMapper(); } public MapperConfigurator getConfigurator() { return _mapperConfig; } }
Code:<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> <import resource="classpath:/usergrid-services-context.xml" /> <!-- we need to scope our proxy as our target class since we're not using interfaces for resources --> <context:component-scan base-package="org.usergrid.rest" scoped-proxy="targetClass" /> <bean id="serverEnvironmentProperties" class="org.usergrid.rest.ServerEnvironmentProperties"> <constructor-arg ref="properties" /> </bean> <bean id="apiResponse" class="org.usergrid.rest.ApiResponse"/> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor" /> <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <property name="securityManager" ref="securityManager" /> </bean> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager" /> </bean> <bean id="mongoServer" class="org.usergrid.mongo.MongoServer" init-method="startServer" destroy-method="stopServer" /> <bean id="usergridSystemMonitor" class="org.usergrid.system.UsergridSystemMonitor"> <constructor-arg value="${usergrid.version.build}" /> <constructor-arg ref="cassandraCluster" /> </bean> <!-- override the security manager --> <bean id="securityManager" class="org.usergrid.rest.security.shiro.RestSecurityManager"> <property name="cacheManager" ref="cacheManager" /> <property name="realm" ref="realm" /> </bean> <bean id="cacheManager" class="org.apache.shiro.cache.MemoryConstrainedCacheManager" /> <!-- override the task executor --> <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <property name="corePoolSize" value="5" /> <property name="maxPoolSize" value="10" /> <property name="queueCapacity" value="25" /> </bean> <bean id="binaryStore" class="org.usergrid.services.assets.data.LocalFileBinaryStore"> <property name="reposLocation" value="${usergrid.temp.files}"/> </bean> </beans>


Reply With Quote