tomee-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andy Gumbrecht (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (TOMEE-1547) Use application classloader for resources defined in resources.xml
Date Thu, 10 Dec 2015 13:44:11 GMT

     [ https://issues.apache.org/jira/browse/TOMEE-1547?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Andy Gumbrecht updated TOMEE-1547:
----------------------------------
    Fix Version/s:     (was: 1.7.3)
                   1.7.4

> Use application classloader for resources defined in resources.xml
> ------------------------------------------------------------------
>
>                 Key: TOMEE-1547
>                 URL: https://issues.apache.org/jira/browse/TOMEE-1547
>             Project: TomEE
>          Issue Type: Improvement
>    Affects Versions: 1.7.1
>            Reporter: Jonathan Gallimore
>            Assignee: Jonathan Gallimore
>             Fix For: 7.0.0-M2, 1.7.4
>
>
> Resources can be defined in applications using META-INF/resources.xml. This is a useful
feature, but because resources are created very early on in deployment the final classloader
for the application is not available.
> I know I can manually specify a specific jar or classpath, but I specifically want the
resources I define to be loaded using the same classpath the application uses.
> So, for example, if I have an EJB jar in an EAR, and the EJB jar contains a POJO called
HelloBean, the following should load the resource from the application classloader:
> <Resources>
>   <Resource id="Hello" type="org.superbiz.HelloBean">
>    property1 value1
>    property2 value2
>   </Resource>
> </Resources>
> Currently this fails with a class not found error, due to the following in org.apache.openejb.assembler.classic.Assembler.createResource(ResourceInfo):
>         ClassLoader loader = Thread.currentThread().getContextClassLoader();
>         boolean customLoader = false;
>         try {
>             if (serviceInfo.classpath != null && serviceInfo.classpath.length
> 0) {
>                 final URL[] urls = new URL[serviceInfo.classpath.length];
>                 for (int i = 0; i < serviceInfo.classpath.length; i++) {
>                     urls[i] = serviceInfo.classpath[i].toURL();
>                 }
>                 loader = new URLClassLoaderFirst(urls, loader);
>                 customLoader = true;
>             }
>         } catch (final MalformedURLException e) {
>             throw new OpenEJBException("Unable to create a classloader for " + serviceInfo.id,
e);
>         }
>         Object service = serviceRecipe.create(loader);
>       



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message