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]