[jbosstools-dev] Unnecessary Dependencies

Max Rydahl Andersen max.andersen at redhat.com
Fri Feb 13 13:22:37 EST 2009


> WHY are people reaching into other unrelated plugins and using classes 
> and adding unnecessary dependencies?!
Because AS is a *natural* thing to depend on.
> If so many people are doing this, then the code *should* be in a 
> common area!  There is ZERO reason that we should be reaching into 
> unrelated plugins and adding dependencies. This is absolutely disgusting.
Then why did you decided to copy the code instead of modularizing it ?

Snjezana's info just makes it even more important to not create 
duplication and instead keep it as it is (because it has *extremely* 
little impact) and this is something to do after GA *properly*.

>
> If everyone just starts reaching into each others plugins and using 
> code without permission or some type of process, then before you know 
> it we get spaghetti linkages and cyclical dependencies and all sorts 
> of things. We can NOT just go around adding dependencies for this kind 
> of stuff!
Of course - but having our WS and ESB stuff depend on AS core is not a 
big issue is it ?
> I would never reach into Denny's code or Grid's code or VPE code or 
> any other code without careful consideration to how the dependencies 
> will be affected... as should everyone else.
It was discussed on the mailing list and jira. Of course I want to fix 
this - but again, duplicating the code is the *worst* choice of all 
possible options.
> We need to have a clear process as to what types of projects are 
> allowed to depend on others and when. This type of lawlessness is 
> horrific.
>
> As far as I can see it, if someone else has some code you want to use, 
> the process should be done in this order:
> 1) if you already depend on the plugin, go ahead and use it the class.
> 2) If you have no reason to depend on it, try to copy or abstract the 
> code into a common area, and use it there.
> 3) If other difficulties make it so you cannot copy or abstract the 
> code into a common area, then copy  it into your own plugin
> 4) Only as a last resort do you go about adding dependencies.
And before you even start copying you raise it on the mailing list if a 
new module/plugin needs creating...
> I'm quite certain Max will disagree with me, but my point is, you 
> cannot just go extending classes in other plugins without looking at 
> how it will affect the dependency tree. We're heading down a dangerous 
> road where plugins just willy-nilly link up with each other and can't 
> be extricated. This is not professional at all.
It is not professional to create double maintenance either.

This is not a new issue, have been known for a long time but AS is not a 
*big* dependency and completely ok since all of those modules only work 
with AS adapter.

Could it be improved, yes sure. Should it be fixed now - no, it does not 
hurt anyone afaik and we are too close to GA to start restructuring 
plugin dependencies IMO.

/max
>
> Snjezana Peco wrote:
>> We need to take into consideration that the 
>> AbstractClasspathContainer, AbstractClasspathContainerInitializer, 
>> ClasspathDecorations and ClasspathDecorationsManager classes are also 
>> being used in the WS and portlet plugins.
>>
>> Snjeza
>>
>> Rob Stryker wrote:
>>> Perhaps a more articulate way to explain my point is that copying 
>>> the code is the best solution because
>>>
>>> 1) It does not make real "code" changes before release. IE if this 
>>> code which has been stable for months continues to be stable, 
>>> there's no problem.
>>> 2) It severs an unnecessary dependency, thus allowing users to use a 
>>> deployment method of their choosing (project archives, ant)
>>> 3) It does not make big structural changes by introducing a new 
>>> module or some such.
>>> 4) It provides a stop-gap to the proper solution (new common code 
>>> area) once structural changes are permitted.
>>>
>>> Max Rydahl Andersen wrote:
>>>> Maybe showing  the +/- of each scenario would make it more obvious:
>>>>
>>>> A) We keep the ESB to AS dependency:
>>>> + Does not require module structure/dependency changes shortly 
>>>> before GA
>>>> ++ if there is a bug in the shared code it will be fixed once and 
>>>> work for all
>>>> - I have to download AS to get the shared functionality (but this 
>>>> is not a big minus if you use the updatesite since there would be a 
>>>> dependency)
>>>>
>>>> B) We copy code from AS to ESB:
>>>> + ESB can be downloaded separately
>>>> - Changes dependency changes shortly before GA (a small minus but 
>>>> it needs to be checked after all)
>>>> -- if one fixes a bug in the copied code in ESB he also need to fix 
>>>> this where the code was copied from (i.e. which will be forgotten 
>>>> because we are all humans)
>>>> - I have to download AS to get the ESB projects to actually deploy  
>>>> (but this is not a big minus if you use the updatesite since there 
>>>> would be a dependency)
>>>>
>>>> C) We share code between AS to ESB in a common core
>>>> + ESB can be downloaded separately
>>>> ++ if there is a bug in the shared code it will be fixed once and 
>>>> work for all
>>>> - I have to download common core (but this is not a big minus if 
>>>> you use the updatesite since there would be a dependency)
>>>> -- Require module structure/dependency changes shortly before GA
>>>>
>>>> So for me the copy option is the worst of all choices. Since it has 
>>>> a big minus (duplication of code), but no real benefits plus moving 
>>>> from A to C is easier then B to C.
>>>>
>>>> If ESB and AS did not have a natural dependency and the duplicated 
>>>> code was just simple - things would be different. It all depends on 
>>>> the context.
>>>> Dependencies are not a bad thing - but yes, in general we should 
>>>> modularize our code so we don't get *unnatural* dependencies.
>>>> /max
>>>>> On 12-02-2009 06:34, Rob Stryker wrote:
>>>>>> So today I decided to work on JBIDE-3772 and I create a workspace 
>>>>>> with just ESB projects.
>>>>>>
>>>>>> I see immediately that it requires XModel (bleh), but that's fine 
>>>>>> I guess. It provides a lot of functionality. I also see, however, 
>>>>>> that it requires as.classpath.core.
>>>>>>
>>>>>> Requiring XModel is maybe justifiable as it's "common" code. The 
>>>>>> requirement on as.classpath.core is just to make use of an 
>>>>>> Abstract classpath provider that's in there.
>>>>>>
>>>>>> I'm not trying to call any plugin or developer out here, but I'd 
>>>>>> like to suggest that we try to decouple our code as much as is 
>>>>>> possible. If you're just borrowing one or two classes with 
>>>>>> minimal dependencies, would it be better to copy that class?  I 
>>>>>> think it would be better but I'd like to hear other's thoughts.
>>>>> No, copy/paste of code that is doing more than just very simple 
>>>>> things should not just be copied.
>>>>>
>>>>> You don't tell what classpath provider you are copying so I can't 
>>>>> see what it does (and fisheye is down), but my guess is that it is 
>>>>> the classpth container
>>>>> that manages the sourcecode and javadoc attachements - that is 
>>>>> excellent candidates for code to be shared.
>>>>>
>>>>> This does not mean you should not decouple your code, but 
>>>>> decoupling is much more than just avoiding plugin dependencies 
>>>>> between our plugins.
>>>>> i.e. if having ESB classpath containers and deployment being 
>>>>> dependent on AS plugin saves us from a lot of possibly maintanence 
>>>>> duplication then why bother
>>>>> separating them when the only adapter and server in the world that 
>>>>> will work with ESB is our AS plugin...in other words ESB has (IMO) 
>>>>> a natural dependeny on AS
>>>>> hence having common code in AS does not hurt anyone.
>>>>>
>>>>> If ESB one day can be deployed to other servers or the classpath 
>>>>> container start being used by other parts of our code that is not 
>>>>> 100% dependent on AS by nature then
>>>>> separating those base classes out makes a lot of sense.
>>>>>
>>>>> /max
>>>>> _______________________________________________
>>>>> jbosstools-dev mailing list
>>>>> jbosstools-dev at lists.jboss.org
>>>>> https://lists.jboss.org/mailman/listinfo/jbosstools-dev
>>>>
>>>
>>> _______________________________________________
>>> jbosstools-dev mailing list
>>> jbosstools-dev at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/jbosstools-dev
>>
>




More information about the jbosstools-dev mailing list