Hi, You guys can find the attach file here[1], but if you are really interested in this project, i suggest that you have a trial of OSGiMaker, its update center is [2], you should install Bndtools first, and then install OSGiMaker, you can get relative documents here[3].
[1] http://osgimaker.googlecode.com/svn/trunk/OSGiMakerDemo/ [2] http://osgimaker.googlecode.com/svn/trunk/OSGiMakerUpdateCenter/ [3] http://code.google.com/p/osgimaker/wiki/Implement_of_project_analyse_algorithm 2011/8/11 Nicolas Lalevée <nicolas.lale...@hibnet.org>: > If I may, could put the attached documents somewhere we could download and > see them, they get filtered throw the mailing list. This topic seems very > interesting, all your discussion seems too, reading Peter being enthusiast; > all this teasing without getting the actual content, so frustrating ! :) > > cheers, > Nicolas > > Le 11 août 2011 à 08:14, Tiger Gui a écrit : > >> Ok, i will keep on improving the visualization things and improve the >> split algorithm according to the visualization result :-) >> >> 2011/8/10 Peter Kriens <peter.kri...@aqute.biz>: >>> Make sure you get the naming + layout right on these examples before you >>> take other products. This is the stage where you really want to focus on >>> the tool. You now get more understanding of the problem because you now >>> know the structure. So I really think we now should do: >>> >>> - better visualization of the contents (naming mostly, maybe show >>> the inside package names when zoomed) >>> - show the imports somehow >>> >>> It is not that useful to now analyze a lot of projects, it is understanding >>> the structure of the projects that counts. These lessons must then be >>> applied to other projects, which will give new problems, solve them, ad >>> nauseum. >>> >>> But this is really starting to look interestingly. >>> >>> Kind regards, >>> >>> Peter Kriens >>> >>> >>> On 10 aug 2011, at 08:29, Tiger Gui wrote: >>> >>>> And this is Spring's packages relation figure and bundles relationship >>>> figure in the attach png files. And you can get the bundle details in >>>> the html split report generated by OSGiMaker. >>>> >>>> Now, we use Jung to read the visualize the split result of OSGiMaker, >>>> in the next few days, i will integrate the visualize tool with >>>> OSGiMaker, help users to check the bundles relation in the Eclipse >>>> once he use OSGiMaker to split the application. >>>> >>>> 2011/8/9 Peter Kriens <peter.kri...@aqute.biz>: >>>>> This is starting to look really interesting! >>>>> >>>>> Can you make your own layout? Would be nice to sort the "bundles" in >>>>> layers. The core should be at the bottom and when you go up, you should >>>>> see the higher layers depend on the lower layers. This is never perfect >>>>> but you cannot have cycles by definition, they've been removed earlier. >>>>> >>>>> It is important to minimize the number of imports so they need also be >>>>> grouped in such a way that you have a minimum set of import groups. They >>>>> should be visible on the edge of the picture >>>>> >>>>> Also spend some time on shortening the names without loosing the >>>>> recognition. >>>>> >>>>> Good work! As I said, visualizing this stuff is all important. >>>>> >>>>> Kind regards, >>>>> >>>>> Peter Kriens >>>>> >>>>> >>>>> On 9 aug 2011, at 08:43, Tiger Gui wrote: >>>>> >>>>>> Hi Peter, >>>>>> >>>>>> This is Tomcat's bundles relationship figure, i use Jung to visualize >>>>>> the dependencies, arrow from A to B means bundle A need bundle B. And >>>>>> the html attach file is the bundles relationship report >>>>>> >>>>>> 2011/8/2 Tiger Gui <tigergui1...@gmail.com>: >>>>>>> Yeah, the imports are too much, but there is not any problem. >>>>>>> >>>>>>> The good new is that i am working for the visualize job of the >>>>>>> dependencies, it will give us a more clear graph about the bundles >>>>>>> relationship, just wait for 2 -3 days, I am on my way of playing with >>>>>>> JUNG >>>>>>> >>>>>>> 2011/8/2 Peter Kriens <peter.kri...@aqute.biz>: >>>>>>>> Can you take a look at the imports? There seems to be many class names? >>>>>>>> >>>>>>>> I also think you should try to shorten the package names. Maybe names >>>>>>>> like oac.comet (org.apache.catalina.comet) would already help. >>>>>>>> >>>>>>>> And we really need visualize the dependencies ... This is however a >>>>>>>> great start. >>>>>>>> >>>>>>>> Kind regards, >>>>>>>> >>>>>>>> Peter Kriens >>>>>>>> >>>>>>>> On 30 jul 2011, at 16:02, Tiger Gui wrote: >>>>>>>> >>>>>>>>> Hi Peter, >>>>>>>>> >>>>>>>>> I changed the merge situation a little, >>>>>>>>> >>>>>>>>> FROM: >>>>>>>>> boolean condition4 = 4 * sameUB >= one.usedByList.size() + >>>>>>>>> two.usedByList.size(); >>>>>>>>> TO: >>>>>>>>> boolean condition4 = 3 * sameUB >= one.usedByList.size() + >>>>>>>>> two.usedByList.size(); >>>>>>>>> >>>>>>>>> Try the analyse and split algorithm in Tomcat application again, and >>>>>>>>> we got another report, in the attach file. It seems that this bundle >>>>>>>>> structure is more reasonable >>>>>>>>> >>>>>>>>> 2011/7/30 Tiger Gui <tigergui1...@gmail.com>: >>>>>>>>>> Hi Peter, >>>>>>>>>> >>>>>>>>>> I have generated the report for Tomcat too, in the attach file, and >>>>>>>>>> improve the report as you wish, just see the comments >>>>>>>>>> >>>>>>>>>> 2011/7/29 Peter Kriens <peter.kri...@aqute.biz>: >>>>>>>>>>> Now we're getting somewhere! Could you: >>>>>>>>>>> >>>>>>>>>>> 1) Please rename names like round1MergeBundle8 to just R18 or so ... >>>>>>>>>> >>>>>>>>>> I have renamed round1MergeBundle8 to just R1B8, BTW, you should know >>>>>>>>>> that users can change the bundle name as he wish in our tools, >>>>>>>>>> OSGiMaker has supplies the feature already, we have a GUI bundle edit >>>>>>>>>> editor >>>>>>>>>> >>>>>>>>>>> 2) The imports look like they sometimes contain classes? And it >>>>>>>>>>> would be nice if you put a </br> after each one of them (maybe >>>>>>>>>>> combine the ones with the same prefix?) >>>>>>>>>> >>>>>>>>>> No, the imports are all package, i add a "<br />" every 5 imports, if >>>>>>>>>> we add a "<br/>" after each of them, it will be a long list, not very >>>>>>>>>> comfortable to read >>>>>>>>>> >>>>>>>>>>> 3) Can you sort on the number of contains entries? I.e. biggest >>>>>>>>>>> bundle first >>>>>>>>>> >>>>>>>>>> Yeah, i have sorted it already, the biggest first >>>>>>>>>> >>>>>>>>>>> 4) Could you link the bundles with an <a href="..">R18</a>? >>>>>>>>>> >>>>>>>>>> Yeah, i have add the http link already in the report >>>>>>>>>> >>>>>>>>>>> 5) Could you make the names of the >>>>>>>>>> >>>>>>>>>> ??? >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> 6) Get rid of the .*? >>>>>>>>>> >>>>>>>>>> It is easy to get rid of the .*, but i think it make things more >>>>>>>>>> clear, make us know, the bundles includes all the classes in the >>>>>>>>>> packages >>>>>>>>>> >>>>>>>>>>> 7) Also generate one of these for catalina/Tomcat? >>>>>>>>>>> >>>>>>>>>>> Actually, this spring one is pretty neat. >>>>>>>>>>> >>>>>>>>>>> I am a bit curious about the jdbc stuff. I assume all the packages >>>>>>>>>>> in org.springframework.jdbc11 are strongly connected? What are the >>>>>>>>>>> packages that refer to com.ibm.websphere.rsadapter and >>>>>>>>>>> com.mchange.v2.c3p0, etc? These are the VERY expensive dependencies >>>>>>>>>>> and I wonder how they get merged in so badly in this bundle. >>>>>>>>>>> >>>>>>>>>>> Similar to the orm bundle, who is the culprit (class?) that points >>>>>>>>>>> to hibernate? You see why this is bad? In a good design the >>>>>>>>>>> org.springframework.orm should not be strongly connected to >>>>>>>>>>> something like hibernate. The hibernate should be a bridge package >>>>>>>>>>> but not have internal references. >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Interesting! Kind regards, >>>>>>>>>>> >>>>>>>>>>> Peter Kriens >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On 29 jul 2011, at 11:32, Tiger Gui wrote: >>>>>>>>>>> >>>>>>>>>>>> Hi Peter, >>>>>>>>>>>> >>>>>>>>>>>> To visualize things, i have a simple review to JUNG, it seems that >>>>>>>>>>>> it >>>>>>>>>>>> is good solution for display graph or tree in a canvas, but it is a >>>>>>>>>>>> problem that JUNG is developed for AWT/SWING, not suitable for >>>>>>>>>>>> Eclipse >>>>>>>>>>>> SWT/JFace environment, so, i will continue searching for the best >>>>>>>>>>>> solution, may be we can even consider Eclipse GMF technology >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> To report things: >>>>>>>>>>>> I have changed the report to a HTML file in the attach file, it's >>>>>>>>>>>> still Spring's OSGi split report, it looks much better :-) >>>>>>>>>>>> >>>>>>>>>>>> 2011/7/29 Peter Kriens <peter.kri...@aqute.biz>: >>>>>>>>>>>>> Rule #1, as long as I see you're engaged you do not have to worry >>>>>>>>>>>>> about the evaluation. So do not do things for my sake, do them >>>>>>>>>>>>> because you believe it is the best way forward. I think Tinkerpop >>>>>>>>>>>>> and JUNG are a great way to visualize, but do not take my word. I >>>>>>>>>>>>> have the greatest respect for people who do not listen to me >>>>>>>>>>>>> because they are convinced they know better. That out of the way. >>>>>>>>>>>>> >>>>>>>>>>>>> This whole things is very much about understanding and our visual >>>>>>>>>>>>> brains is by far the most powerful tool on earth to understand >>>>>>>>>>>>> things. And you're not taking advantage of it :-) We are looking >>>>>>>>>>>>> for structure here, the names are only relevant later. So to see >>>>>>>>>>>>> structure, tables are perfect. Which means you have to have short >>>>>>>>>>>>> names. Just using the last part of a package >>>>>>>>>>>>> (com.springframework.jca, take jca). I.e. a name like >>>>>>>>>>>>> round1MergeBundle8 is ok to call b8. You can always later provide >>>>>>>>>>>>> a list of translations. This is also the reason why we need to >>>>>>>>>>>>> use packages, classes are too many off. Visualization is >>>>>>>>>>>>> everything in this phase because we need to find the rules of the >>>>>>>>>>>>> structure. >>>>>>>>>>>>> >>>>>>>>>>>>> So lets retry. First give me a list of all groups (named g1 .. >>>>>>>>>>>>> gn) and their package content >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Group Contains Uses Used >>>>>>>>>>>>> By External >>>>>>>>>>>>> g3 com.springframework.{jca,jdbc,...}, g4, g5, g7 g2 >>>>>>>>>>>>> org.w3.xml, javax.persistence, >>>>>>>>>>>>> ... >>>>>>>>>>>>> com.oracle.g11.{impl,whatever} >>>>>>>>>>>>> >>>>>>>>>>>>> It might be easiest to generate HTML so you can use tables. Don't >>>>>>>>>>>>> make it look fancy, just use the tools to get insight in the >>>>>>>>>>>>> structure: >>>>>>>>>>>>> >>>>>>>>>>>>> <html> >>>>>>>>>>>>> <body> >>>>>>>>>>>>> <table> >>>>>>>>>>>>> <tr> >>>>>>>>>>>>> <th>Group</th> >>>>>>>>>>>>> <th>Contains</th> >>>>>>>>>>>>> <th>Uses</th> >>>>>>>>>>>>> <th>Used By</th> >>>>>>>>>>>>> <th>External</th> >>>>>>>>>>>>> </tr> >>>>>>>>>>>>> <tr> >>>>>>>>>>>>> <td>g3</td> >>>>>>>>>>>>> <td>com.springframework.{jca,jdbc,...},...</td> >>>>>>>>>>>>> <td>g4, g5, g7</td> >>>>>>>>>>>>> <td>g2</td> >>>>>>>>>>>>> <td>org.w3.xml, >>>>>>>>>>>>> javax.persistence,com.oracle.g11.{impl,whatever}</td> >>>>>>>>>>>>> </tr> >>>>>>>>>>>>> </table> >>>>>>>>>>>>> </body> >>>>>>>>>>>>> </html> >>>>>>>>>>>>> >>>>>>>>>>>>> Shortening the names is everything or else your eyes drown in a >>>>>>>>>>>>> sea of characters. >>>>>>>>>>>>> >>>>>>>>>>>>> Kind regards, >>>>>>>>>>>>> >>>>>>>>>>>>> Peter Kriens >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On 29 jul 2011, at 05:16, Tiger Gui wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Hi Peter, >>>>>>>>>>>>>> >>>>>>>>>>>>>> Thank you for your reply first, please see the following comments >>>>>>>>>>>>>> >>>>>>>>>>>>>> 2011/7/28 Peter Kriens <peter.kri...@aqute.biz>: >>>>>>>>>>>>>>> It is good that you use a real project now. What I like to see >>>>>>>>>>>>>>> how many "bundles" we have after the first round, where you >>>>>>>>>>>>>>> group strongly connected packages. This should already simplify >>>>>>>>>>>>>>> because the nr of entities will be smaller. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I need to see a real case. Step 1 is ok, but maybe you can add >>>>>>>>>>>>>>> merging of bundles that have identical usesExternal (imports). >>>>>>>>>>>>>> >>>>>>>>>>>>>> Yes, I do merge the bundles that have identical usesExternal >>>>>>>>>>>>>> (imports), i described in the former mail, >>>>>>>>>>>>>> >>>>>>>>>>>>>> We define sameUE: it menas the number of two bundles have same >>>>>>>>>>>>>> usedExternal external package rely elements. >>>>>>>>>>>>>> >>>>>>>>>>>>>> boolean condition2 = 3 * sameUE >= one.usedExternalList.size() + >>>>>>>>>>>>>> two.usedExternalList.size(); >>>>>>>>>>>>>> >>>>>>>>>>>>>> if(condition2 == true) i will merge bundles one and two,In the >>>>>>>>>>>>>> process >>>>>>>>>>>>>> of real case test(Spring and Tomcat), i found that it's hardly >>>>>>>>>>>>>> to find >>>>>>>>>>>>>> two bundles which have exactly the same usesExternal items, we >>>>>>>>>>>>>> should >>>>>>>>>>>>>> also merge bundles who have *proportional* usesExternal items. >>>>>>>>>>>>>> In my >>>>>>>>>>>>>> test case, it works good. >>>>>>>>>>>>>> >>>>>>>>>>>>>>> And make sure you ignore all java.* to make the info smaller >>>>>>>>>>>>>>> (in OSGi, java is always provided by the VM). Can you just >>>>>>>>>>>>>>> print out something like >>>>>>>>>>>>>> >>>>>>>>>>>>>> Yes, i have considered this situation, in the whole merge >>>>>>>>>>>>>> process, we >>>>>>>>>>>>>> do not consider jdk supplies java.* classes. >>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> name usesInternal usesExternal >>>>>>>>>>>>>>> g1 g2 a,b,c >>>>>>>>>>>>>>> g2 d,e,f >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> Let's take example of Spring, this report is like this: >>>>>>>>>>>>>> Name --- >>>>>>>>>>>>>> usesInternal >>>>>>>>>>>>>> org.springframework.jms2 >>>>>>>>>>>>>> ---round1MergeBundle8,mergedBundle9,org.springframework.jca22,org.springframework.scheduling15,org.springframework.context14,round1MergeBundle5 >>>>>>>>>>>>>> org.springframework.jdbc11 --- >>>>>>>>>>>>>> round1MergeBundle8,mergedBundle9 >>>>>>>>>>>>>> org.springframework.orm13 >>>>>>>>>>>>>> --- >>>>>>>>>>>>>> round1MergeBundle8,org.springframework.jdbc11,mergedBundle9,round1MergeBundle3 >>>>>>>>>>>>>> org.springframework.context14 >>>>>>>>>>>>>> --- round1MergeBundle8,round1MergeBundle1,mergedBundle9 >>>>>>>>>>>>>> org.springframework.scheduling15 >>>>>>>>>>>>>> --- >>>>>>>>>>>>>> round1MergeBundle8,mergedBundle9,org.springframework.context14,org.springframework.jdbc11 >>>>>>>>>>>>>> org.springframework.jca22 >>>>>>>>>>>>>> --- >>>>>>>>>>>>>> round1MergeBundle8,mergedBundle9,org.springframework.context14,org.springframework.scheduling15 >>>>>>>>>>>>>> round1MergeBundle1 >>>>>>>>>>>>>> --- >>>>>>>>>>>>>> round1MergeBundle8,mergedBundle9,org.springframework.metadata7 >>>>>>>>>>>>>> round1MergeBundle3 >>>>>>>>>>>>>> --- >>>>>>>>>>>>>> round1MergeBundle8,org.springframework.context14,round1MergeBundle5 >>>>>>>>>>>>>> round1MergeBundle4 --- >>>>>>>>>>>>>> round1MergeBundle8,org.springframework.context14 >>>>>>>>>>>>>> round1MergeBundle5 >>>>>>>>>>>>>> --- >>>>>>>>>>>>>> round1MergeBundle8,round1MergeBundle3,org.springframework.context14,mergedBundle9 >>>>>>>>>>>>>> mergedBundle9 >>>>>>>>>>>>>> --- >>>>>>>>>>>>>> round1MergeBundle8,round1MergeBundle5,org.springframework.context14,org.springframework.metadata7 >>>>>>>>>>>>>> org.springframework.metadata7 --- none >>>>>>>>>>>>>> round1MergeBundle8 --- none >>>>>>>>>>>>>> >>>>>>>>>>>>>> As usesExternal element list is too long, i abridged them, you >>>>>>>>>>>>>> can get >>>>>>>>>>>>>> the report details with usesExternal elements in attach file >>>>>>>>>>>>>> "bundles_relation.txt", and get the bundles details in attach >>>>>>>>>>>>>> file >>>>>>>>>>>>>> "SpringSplitTest.analyse" >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>>> I hope we see one big bundle which is the core and then have to >>>>>>>>>>>>>>> find rules to classify the remaining bundles. I expect there >>>>>>>>>>>>>>> are the following categories: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> core implementation classes, lots of strongly >>>>>>>>>>>>>>> connected packages >>>>>>>>>>>>>>> api api classes, do not refer to core, very few >>>>>>>>>>>>>>> imports >>>>>>>>>>>>>>> bridge refer strongly to core and have expensive >>>>>>>>>>>>>>> imports >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> At this stage, the trick is to do some work by hand until you >>>>>>>>>>>>>>> find you really understand the problem. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> It would be perfect if you could take a look at Tinkerpop and >>>>>>>>>>>>>>> JUNG. I think it would be quite easy to visualize the graph of >>>>>>>>>>>>>>> dependencies. >>>>>>>>>>>>>> >>>>>>>>>>>>>> You mean my next step is developing a Tinkerpop or JUNG >>>>>>>>>>>>>> graphical view >>>>>>>>>>>>>> for this report for user to adjust the bundles details manully ? >>>>>>>>>>>>>> Am i >>>>>>>>>>>>>> right ? I will start learn Jung and start this job soon >>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Kind regards, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Peter Kriens >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On 26 jul 2011, at 16:24, Tiger Gui wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Hi Peter, >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> This is the whole application split algorithm here. After >>>>>>>>>>>>>>>> application >>>>>>>>>>>>>>>> source code analyse algorithm described here[1], we can know >>>>>>>>>>>>>>>> each >>>>>>>>>>>>>>>> package/class use which packages/classes and be used by which >>>>>>>>>>>>>>>> packages/classes. Now, we just discuss package here, we treat >>>>>>>>>>>>>>>> package >>>>>>>>>>>>>>>> as a single atom, each package has three important attributes, >>>>>>>>>>>>>>>> usedBy, >>>>>>>>>>>>>>>> usesExternal and usesInternal, just like below: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> <package name="org.apache.catalina.deploy" >>>>>>>>>>>>>>>> sources="/E:/GSoC/gsoc2011osgi/runtime-New_configuration/TomcatJava/bin" >>>>>>>>>>>>>>>> size="30" usedBy="8" usesInternal="11" usesExternal="14" >>>>>>>>>>>>>>>> layer="6" >>>>>>>>>>>>>>>> cycle="org.apache.catalina et al."> >>>>>>>>>>>>>>>> <packageRef name="org.apache.catalina.core" >>>>>>>>>>>>>>>> type="usedBy"/> >>>>>>>>>>>>>>>> <packageRef name="org.apache.catalina.startup" >>>>>>>>>>>>>>>> type="usedBy"/> >>>>>>>>>>>>>>>> <packageRef name="org.apache.catalina.deploy" >>>>>>>>>>>>>>>> type="usedBy"/> >>>>>>>>>>>>>>>> <packageRef name="org.apache.catalina.authenticator" >>>>>>>>>>>>>>>> type="usedBy"/> >>>>>>>>>>>>>>>> <packageRef name="org.apache.catalina" type="usedBy"/> >>>>>>>>>>>>>>>> <packageRef name="org.apache.catalina.mbeans" >>>>>>>>>>>>>>>> type="usedBy"/> >>>>>>>>>>>>>>>> <packageRef name="org.apache.catalina.connector" >>>>>>>>>>>>>>>> type="usedBy"/> >>>>>>>>>>>>>>>> <packageRef name="org.apache.catalina.realm" >>>>>>>>>>>>>>>> type="usedBy"/> >>>>>>>>>>>>>>>> <packageRef name="java.lang" type="usesExternal"/> >>>>>>>>>>>>>>>> <packageRef name="java.io" type="usesExternal"/> >>>>>>>>>>>>>>>> <packageRef name="org.apache.catalina.deploy" >>>>>>>>>>>>>>>> type="usesInternal"/> >>>>>>>>>>>>>>>> <packageRef name="org.apache.catalina.util" >>>>>>>>>>>>>>>> type="usesInternal"/> >>>>>>>>>>>>>>>> <packageRef name="java.util" type="usesExternal"/> >>>>>>>>>>>>>>>> <packageRef name="org.apache.juli.logging" >>>>>>>>>>>>>>>> type="usesInternal"/> >>>>>>>>>>>>>>>> <packageRef name="org.apache.tomcat.util.res" >>>>>>>>>>>>>>>> type="usesInternal"/> >>>>>>>>>>>>>>>> <packageRef name="java.beans" type="usesExternal"/> >>>>>>>>>>>>>>>> <packageRef name="(default package)" type="usesExternal"/> >>>>>>>>>>>>>>>> <packageRef name="org.apache.catalina" >>>>>>>>>>>>>>>> type="usesInternal"/> >>>>>>>>>>>>>>>> <packageRef name="org.apache.catalina.mbeans" >>>>>>>>>>>>>>>> type="usesInternal"/> >>>>>>>>>>>>>>>> <packageRef name="javax.management" type="usesExternal"/> >>>>>>>>>>>>>>>> <packageRef name="namingResources" type="usesExternal"/> >>>>>>>>>>>>>>>> <packageRef name="javax.naming" type="usesExternal"/> >>>>>>>>>>>>>>>> <packageRef name="org.apache.naming" type="usesInternal"/> >>>>>>>>>>>>>>>> <packageRef name="java.lang.reflect" type="usesExternal"/> >>>>>>>>>>>>>>>> <packageRef name="javax.servlet" type="usesInternal"/> >>>>>>>>>>>>>>>> <packageRef name="javax.servlet.annotation" >>>>>>>>>>>>>>>> type="usesInternal"/> >>>>>>>>>>>>>>>> <packageRef name="org.apache.catalina.order" >>>>>>>>>>>>>>>> type="usesExternal"/> >>>>>>>>>>>>>>>> <packageRef name="java.net" type="usesExternal"/> >>>>>>>>>>>>>>>> <packageRef name="webXml" type="usesExternal"/> >>>>>>>>>>>>>>>> <packageRef name="webXml.version" type="usesExternal"/> >>>>>>>>>>>>>>>> <packageRef name="webxml" type="usesExternal"/> >>>>>>>>>>>>>>>> <packageRef name="org.apache.catalina.core" >>>>>>>>>>>>>>>> type="usesInternal"/> >>>>>>>>>>>>>>>> <packageRef name="javax.servlet.descriptor" >>>>>>>>>>>>>>>> type="usesInternal"/> >>>>>>>>>>>>>>>> </package> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> usedBy means who use current package; >>>>>>>>>>>>>>>> usesInternal means which packages current package use in >>>>>>>>>>>>>>>> current >>>>>>>>>>>>>>>> application source code; >>>>>>>>>>>>>>>> usesExternal means which packages current pakcage use not in >>>>>>>>>>>>>>>> current >>>>>>>>>>>>>>>> application's source code. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Now, we start split the whole application in to bundles, >>>>>>>>>>>>>>>> according to >>>>>>>>>>>>>>>> above algorithm source code analyse algorithm, we can also know >>>>>>>>>>>>>>>> package cycles in current application. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> 1. Treat each package cycle as a single bundle; >>>>>>>>>>>>>>>> 2. Treat each packages not in cycle as a single bundle; >>>>>>>>>>>>>>>> 3. Then we should decide which bundles can be merged into one >>>>>>>>>>>>>>>> new bundle; >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> First round merge job: >>>>>>>>>>>>>>>> 4. If one bundle's all usesInternal elements are in the other >>>>>>>>>>>>>>>> bundle, >>>>>>>>>>>>>>>> these two bundles should be merged into a new bundle; >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Think about how to merge used by only bundle (bundle be used >>>>>>>>>>>>>>>> only by >>>>>>>>>>>>>>>> other bundle, it does not rely on any other bundle): >>>>>>>>>>>>>>>> Define two variable for used by only bundle: >>>>>>>>>>>>>>>> sameUB: it means the number of two bundles have same usedBy >>>>>>>>>>>>>>>> elements. >>>>>>>>>>>>>>>> sameUE: it menas the number of two bundles have same >>>>>>>>>>>>>>>> usedExternal >>>>>>>>>>>>>>>> external package rely elements. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> boolean condition1 = 4 * sameUB >= one.usedByList.size() + >>>>>>>>>>>>>>>> two.usedByList.size(); >>>>>>>>>>>>>>>> boolean condition2 = 2 * sameUE >= one.usedExternalList.size() >>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>> two.usedExternalList.size(); >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> if condition1 or condition2 is true, we should merge these two >>>>>>>>>>>>>>>> usedBy >>>>>>>>>>>>>>>> only bundle. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Merge the other bundles: >>>>>>>>>>>>>>>> 5.The core problem is how to decide two bundles(bundle one and >>>>>>>>>>>>>>>> bundle >>>>>>>>>>>>>>>> two) can be merged or not. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Define 5 variables: >>>>>>>>>>>>>>>> uiNumber: the sum of bundle one's usesInternal elements in >>>>>>>>>>>>>>>> bundle two >>>>>>>>>>>>>>>> number and bundle two's usesInternal elements in bundle one >>>>>>>>>>>>>>>> number; >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> ubNumber:the sum of bundle one's usedBy elements in bundle two >>>>>>>>>>>>>>>> number >>>>>>>>>>>>>>>> and bundle two's usedBy elements in bundle one number; >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> sameUI: the same usesInternal number bundle one and two have >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> sameUB: Be similar with used by only bundle's this variable >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> sameUE: Be similar with used by only bundle's this variable >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Define these conditions: >>>>>>>>>>>>>>>> boolean condition1 = 2 * uiNumber >= >>>>>>>>>>>>>>>> one.usesInternalList.size() + >>>>>>>>>>>>>>>> two.usesInternalList.size(); >>>>>>>>>>>>>>>> boolean condition2 = 2 * ubNumber >= one.usedByList.size() + >>>>>>>>>>>>>>>> two.usedByList.size() ; >>>>>>>>>>>>>>>> boolean condition3 = 3.5 * sameUI >= >>>>>>>>>>>>>>>> one.usesInternalList.size() + >>>>>>>>>>>>>>>> two.usesInternalList.size(); >>>>>>>>>>>>>>>> boolean condition4 = 4 * sameUB >= one.usedByList.size() + >>>>>>>>>>>>>>>> two.usedByList.size(); >>>>>>>>>>>>>>>> boolean condition5 = 3 * sameUE >= one.usedExternalList.size() >>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>> two.usedExternalList.size(); >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> If any above condition is true, these two bundles can be >>>>>>>>>>>>>>>> merged. But >>>>>>>>>>>>>>>> these are another problem, if bundle A can be merged with B, >>>>>>>>>>>>>>>> but it >>>>>>>>>>>>>>>> also can be merged with C, now, we should decide merge A with >>>>>>>>>>>>>>>> B or A >>>>>>>>>>>>>>>> with C. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Define the follow attribute: >>>>>>>>>>>>>>>> int mergeFactor= 2 * (uiNumber + ubNumber) + 0.4 * (sameUI + >>>>>>>>>>>>>>>> sameUB) + >>>>>>>>>>>>>>>> 0.2 * sameUE - number; >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> If A and B's mergeFactor is 20 and A and C's mergeFactor is >>>>>>>>>>>>>>>> 30, we >>>>>>>>>>>>>>>> should merge A and C. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> This is current merge algorithm in OSGiMaker, i will keep on >>>>>>>>>>>>>>>> improving >>>>>>>>>>>>>>>> it, use class relationship factors or etc. You can find the >>>>>>>>>>>>>>>> source >>>>>>>>>>>>>>>> code detail of this algorithm in class AnalyseJob of our >>>>>>>>>>>>>>>> project. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> The attach file is the analyse result document OSGiMaker >>>>>>>>>>>>>>>> analyse >>>>>>>>>>>>>>>> Tomcat's source code and split it into bundles, you can have a >>>>>>>>>>>>>>>> review. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> In fact, i did not want to bother you too much, but it seems >>>>>>>>>>>>>>>> that you >>>>>>>>>>>>>>>> have enough time to help me to improve it, this is a good >>>>>>>>>>>>>>>> thing. If >>>>>>>>>>>>>>>> you have any advises, please let me know, let's improving it >>>>>>>>>>>>>>>> together >>>>>>>>>>>>>>>> :-) >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Thank you >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> [1] >>>>>>>>>>>>>>>> http://code.google.com/p/osgimaker/wiki/Implement_of_project_analyse_algorithm >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> 2011/7/26 Peter Kriens <peter.kri...@aqute.biz>: >>>>>>>>>>>>>>>>> Well, I do not think I am eager but I have a hard time >>>>>>>>>>>>>>>>> getting a feeling where you are. You do not have to send >>>>>>>>>>>>>>>>> reports, I want to see intermediate results and discuss >>>>>>>>>>>>>>>>> issues if there are any. As I said earlier, it is not clear >>>>>>>>>>>>>>>>> to me yet what the best algorithm is so that need to be >>>>>>>>>>>>>>>>> worked out before we do the gui stuff. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Kind regards, >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Peter Kriens >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> On 26 jul 2011, at 11:24, Tiger Gui wrote: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> In my schedule, i will report current status to you tomorrow >>>>>>>>>>>>>>>>>> as i >>>>>>>>>>>>>>>>>> think i can get a usable version today, the whole analyse >>>>>>>>>>>>>>>>>> and split >>>>>>>>>>>>>>>>>> algorithm is complex i have to organize a document to >>>>>>>>>>>>>>>>>> describe it >>>>>>>>>>>>>>>>>> clearly. As you are really eager to see its progress, it is >>>>>>>>>>>>>>>>>> OK, i will >>>>>>>>>>>>>>>>>> start the report now >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> 2011/7/26 Peter Kriens <peter.kri...@aqute.biz>: >>>>>>>>>>>>>>>>>>> If that is the case you have to provide more on going >>>>>>>>>>>>>>>>>>> feedback. What happened to the analysis by hand? >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Kind regards, >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Peter Kriens >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> On 26 jul 2011, at 11:02, Tiger Gui wrote: >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> No, Peter, i am really working hard for this project, you >>>>>>>>>>>>>>>>>>>> can check >>>>>>>>>>>>>>>>>>>> the progress here[1]. Now, this tool can analyse a whole >>>>>>>>>>>>>>>>>>>> project and >>>>>>>>>>>>>>>>>>>> export the its analyse result to bundles( I test it in >>>>>>>>>>>>>>>>>>>> Spring and >>>>>>>>>>>>>>>>>>>> Tomcat project), if possible, you can install it in your >>>>>>>>>>>>>>>>>>>> Eclipse and >>>>>>>>>>>>>>>>>>>> have a trial of it. But, i am still improving the split >>>>>>>>>>>>>>>>>>>> algorithm as >>>>>>>>>>>>>>>>>>>> the current algorithm is not working perfect. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> I will supply a document about the current status of this >>>>>>>>>>>>>>>>>>>> project and >>>>>>>>>>>>>>>>>>>> a simple guide for you to have a trial of it. I am really >>>>>>>>>>>>>>>>>>>> working very >>>>>>>>>>>>>>>>>>>> hard for it these days :-( >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> [1] http://code.google.com/p/osgimaker/updates/list >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> 2011/7/26 Peter Kriens <peter.kri...@aqute.biz>: >>>>>>>>>>>>>>>>>>>>> I am getting the feeling that you're not working very >>>>>>>>>>>>>>>>>>>>> hard on this project and only does something just for the >>>>>>>>>>>>>>>>>>>>> evaluations ... >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> Peter Kriens >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>>>>>> Best Regards >>>>>>>>>>>>>>>>>>>> ---------------------------------------------------- >>>>>>>>>>>>>>>>>>>> Tiger Gui [tigergui1...@gmail.com] >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>>>> Best Regards >>>>>>>>>>>>>>>>>> ---------------------------------------------------- >>>>>>>>>>>>>>>>>> Tiger Gui [tigergui1...@gmail.com] >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>> Best Regards >>>>>>>>>>>>>>>> ---------------------------------------------------- >>>>>>>>>>>>>>>> Tiger Gui [tigergui1...@gmail.com] >>>>>>>>>>>>>>>> <TomcatJava.analyse> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> -- >>>>>>>>>>>>>> Best Regards >>>>>>>>>>>>>> ---------------------------------------------------- >>>>>>>>>>>>>> Tiger Gui [tigergui1...@gmail.com] >>>>>>>>>>>>>> <bundles_relation.txt><SpringSplitTest.analyse> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> Best Regards >>>>>>>>>>>> ---------------------------------------------------- >>>>>>>>>>>> Tiger Gui [tigergui1...@gmail.com] >>>>>>>>>>>> <SpringSplitTest.html> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> Best Regards >>>>>>>>>> ---------------------------------------------------- >>>>>>>>>> Tiger Gui [tigergui1...@gmail.com] >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Best Regards >>>>>>>>> ---------------------------------------------------- >>>>>>>>> Tiger Gui [tigergui1...@gmail.com] >>>>>>>>> <TomcatJava.html> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Best Regards >>>>>>> ---------------------------------------------------- >>>>>>> Tiger Gui [tigergui1...@gmail.com] >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Best Regards >>>>>> ---------------------------------------------------- >>>>>> Tiger Gui [tigergui1...@gmail.com] >>>>>> <TomcatJava.html><tomat.png><tomcat2.png> >>>>> >>>>> >>>> >>>> >>>> >>>> -- >>>> Best Regards >>>> ---------------------------------------------------- >>>> Tiger Gui [tigergui1...@gmail.com] >>> >>> >> >> >> >> -- >> Best Regards >> ---------------------------------------------------- >> Tiger Gui [tigergui1...@gmail.com] > > -- Best Regards ---------------------------------------------------- Tiger Gui [tigergui1...@gmail.com]