On 24 June 2012 06:50, Peter Firmstone <j...@zeus.net.au> wrote:

> One of my first tasks as a River developer was to rewrite ClassDep,
> previously it was based on a jvm tools library, now it uses ASM.
>
> What became painfully obvious at the time: IT IS NOT POSSIBLE to determine
> all runtime dependencies at compile time.
>
> However this could be sufficient for most developers, even if it's not
> preferred, a class found during runtime may be not be available at the
> client and could still be loaded from the proxy jar, it just means the
> parent class loader will be tried first.
>
> So the preferred list automatically generated would not necessarily be
> comprehensive, but in most cases adequate, this seems less confusing than
> writing a new class loader with different behaviour.
>
> Can anyone see any issues with this?
>
>
No. The only problems we've ever had with this are that we do the most
flexible option as a default which puts load on the developer. So we're
picking a different default which, so long as we document it, and explain
what to do if that default is no good for you (and I reckon it will be for
most), we're done.

Peter.
>
>
>
> Peter Firmstone wrote:
>
>> Well spotted, I spoke to Peter Kriens over the phone about this in 2010
>> (very smart guy btw), ClassDep doesn't detect Class.forName dependencies.
>>
>> A string might not be defined until runtime, so it's not something that
>> can be easily determined.  This could become even more difficult if dynamic
>> languages like Groovy are used in the proxy.
>>
>> Another alternative might be to prefer everything resolvable by the proxy
>> codebase string annotation at runtime.   It would be up to the developer to
>> ensure that proxy classses are packaged correctly, annotations could go
>> some way to automating this for the developer.  The developer could include
>> any library jars required in their codebase string.
>>
>> Perhaps a classloader called ProxyPreferredClassLoader might be created
>> for such a purpose.
>>
>> @ServiceAPI - dependency tree excluded from proxy codebase.
>> @SmartProxy - root class for dependency search, to determine classes to
>> be included in proxy jar file.
>>
>> Consideration has to be given to felixibility for developers using Maven,
>> OSGi and dynamic languages.
>>
>> Peter.
>>
>>
>>  Could work for anything other than cases where someone makes liberal use
>>> of
>>> dynamic class loading via Class.forName and similar. So let's say I have
>>> a
>>> smart proxy that has some dynamically assembled bits, the references will
>>> be in String form making bytecode analysis difficult.
>>>
>>> I wouldn't say this is likely a common case, more something that would
>>> have
>>> to be noted as a limitation of the tool so developers are not caught out.
>>>
>>
>>
>>
>>
>

Reply via email to