[ https://issues.apache.org/jira/browse/AMBARI-10748?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14512641#comment-14512641 ]
Tom Beerbower commented on AMBARI-10748: ---------------------------------------- I think that the main objective here is to make sure that we can include classes and jars in a view that don't conflict other versions of those classes used by Ambari. We also want to make sure that there aren't any other obstacles that prevent us from deploying Spring web apps as views. So far, I've found the following issues that need to be addressed to support Spring apps as views... # Class loading order. The classes in the WEB-INF/lib or WEB-INF/classes should have priority over classes on the parent class loader. There is a bug here. The fix involves minimal changes and is minimal risk, I think. Fixing the ClassLoader issue gets past the {{IllegalAccessError}} noted above but exposes a couple of other issues for Spring apps. This issue could potentially be a separate Jira since it is not specific to deploying Spring apps. # Ambari's embedded Jetty server not setup to support JSP. {code}500 JSP support not configured{code}This is really just configuration (make javac available) and making sure that the right jsp dependencies ({{jsp-2.1-glassfish, ant, ant-launcher}}) are included for ambari-server. Again, changes and risk are minimal. This is not Spring specific since we should support JSPs in any view but in a Spring MVC app the view is usually a JSP. # Ambari internal usage of Spring. We currently use Spring to setup the Ambari web app and we set this as the root context for all of the deployed view web apps ... {code}context.getServletContext().setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, springWebAppContext){code} This results in the following exception because the root web app context is from a different version of Spring loaded by a different class loader... {code}java.lang.IllegalStateException: Context attribute is not of type WebApplicationContext: org.springframework.web.context.support.GenericWebApplicationContext@774189d0: startup date [Thu Jan 01 00:00:00 UTC 1970]; parent: org.springframework.context.support.ClassPathXmlApplicationContext@318511f0 at org.springframework.web.context.support.WebApplicationContextUtils.getWebApplicationContext(WebApplicationContextUtils.java:124) at org.springframework.web.context.support.WebApplicationContextUtils.getWebApplicationContext(WebApplicationContextUtils.java:99) at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:514) at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484) at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) at javax.servlet.GenericServlet.init(GenericServlet.java:241) {code} I'm still evaluating this. I'll update this Jira once I have an understanding of what is involved to fix. As suggested, I'm developing a simple Spring based web app deployed as view to work through these issues. I will push the Spring example under ambari-views/examples once the issues are resolved. Also, I don't see a workaround in the existing released Ambari. I think that code changes are required. > Views: IllegalAccessError: tried to access class > ------------------------------------------------ > > Key: AMBARI-10748 > URL: https://issues.apache.org/jira/browse/AMBARI-10748 > Project: Ambari > Issue Type: Bug > Reporter: Tom Beerbower > Assignee: Tom Beerbower > Fix For: 2.1.0 > > > Deploying a spring web app within a view. > Certain spring jars are being picked up from /usr/lib/ambari-server as > opposed to my web app's WEB-INF/lib directory. > For example, when my view web app gets instantiated (when the web.xml is > processed), classes from the jar spring-context are loaded from: > {code} > Latest exception from my view: > IllegalAccessError: tried to access class > org.springframework.core.convert.support.NumberToNumberConverterFactory from > class org.springframework.core.convert.support.DefaultConversionService > at > org.springframework.core.convert.support.DefaultConversionService.addScalarConverters(DefaultConversionService.java:79) > at > org.springframework.core.convert.support.DefaultConversionService.addDefaultConverters(DefaultConversionService.java:63) > at > org.springframework.core.convert.support.DefaultConversionService.<init>(DefaultConversionService.java:50) > at > org.springframework.data.solr.core.convert.SolrConverterBase.<init>(SolrConverterBase.java:33) > at > org.springframework.data.solr.core.convert.MappingSolrConverter.<init>(MappingSolrConverter.java:73) > at > org.springframework.data.solr.core.SolrTemplate.getDefaultSolrConverter(SolrTemplate.java:480) > at > org.springframework.data.solr.core.SolrTemplate.afterPropertiesSet(SolrTemplate.java:529) > at > org.springframework.data.solr.repository.support.SolrRepositoryFactory.createTemplate(SolrRepositoryFactory.java:88) > at > org.springframework.data.solr.repository.support.SolrRepositoryFactory.<init>(SolrRepositoryFactory.java:76) > at > hortonworks.hdp.refapp.ecm.service.core.indexstore.SolrIndexStore.initialize(SolrIndexStore.java:54) > at > hortonworks.hdp.refapp.ecm.registry.ECMBeanRefresher.refreshIndexStoreInAppContext(ECMBeanRefresher.java:40) > at > hortonworks.hdp.refapp.ecm.registry.ECMBeanRefresher.refreshBeans(ECMBeanRefresher.java:28) > at > hortonworks.hdp.refapp.ecm.view.DocumentManagementViewService.createAppContext(DocumentManagementViewService.java:138) > at > hortonworks.hdp.refapp.ecm.view.DocumentManagementViewService.initialize(DocumentManagementViewService.java:53) > at > hortonworks.hdp.refapp.ecm.view.DocumentManagementViewService.getDocumentService(DocumentManagementViewService.java:109) > at > hortonworks.hdp.refapp.ecm.view.DocumentManagementViewService.search(DocumentManagementViewService.java:94) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)