[
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)