Difference between revisions of "PMC Architecture Meeting 20100317"

From ADempiere
Jump to: navigation, search
This Wiki is read-only for reference purposes to avoid broken links.
(suggestion for additional topic)
(Summary)
 
(One intermediate revision by one other user not shown)
Line 24: Line 24:
 
= Summary =
 
= Summary =
  
 +
* #8/#9: Dictionary audit
 +
** Big subproject
 +
** Needs to but prototyped
 +
** Dictionary entries: Core UNION Module entries
 +
** Model classes: Proxied in OSGi
 +
* OSGi open questions:
 +
** EJBs? Cann they called by OSGi plugins? Can they use OSGi plugins?
 +
** Web store and admin?
 +
** All in the same OSGi container?
 +
** Metadata: AD vs. Manifest: In AD is mandatory, optionally also in Manifest
 +
* Mercurial:
 +
** No objections, only timeframe a bit long?
  
 
= Chat =
 
= Chat =
 +
 +
(02:01:18) '''''CarlosRuiz''''': starting now Architectural<br>
 +
(02:01:26) '''''nwessel''''': cu<br>
 +
(02:01:54) '''''viola''''': OK, agenda as usual here: http://www.adempiere.com/index.php/PMC_Architecture_Meeting_20100317<br>
 +
(02:02:28) '''''viola''''': Carlos: Sorry again for removing the calendar entries last week - trying to learn ical... :-(<br>
 +
(02:02:50) '''''CarlosRuiz''''': no problem<br>
 +
(02:02:50) '''''hengsin''''': hi Jorg<br>
 +
(02:02:55) '''''CarlosRuiz''''': fortunately it was not google  :-)<br>
 +
(02:03:01) '''''viola''''': hehe<br>
 +
(02:03:37) '''''viola''''': so... last time we ended with #8/#9: dictionary audit<br>
 +
(02:04:14) '''''CarlosRuiz''''': about #8 - do you want to discuss it or just to clarify the point?<br>
 +
(02:04:48) '''''viola''''': hmm - i think point is clear<br>
 +
(02:04:54) '''''viola''''': solution not ;-)<br>
 +
(02:06:18) '''''trifon''''': what means dictionary audit?<br>
 +
(02:06:20) '''''CarlosRuiz''''': maybe we can maintain 2pack or backward compatibility<br>
 +
(02:06:20) '''''CarlosRuiz''''': and put hengsin modifications in trunk as 3pack  :-)<br>
 +
(02:06:24) '''''hengsin''''': one significant requirements is here to managed the modifications by extension and customization<br>
 +
(02:06:29) '''''trifon''''': ability to see who, when changed records?<br>
 +
(02:07:06) '''''viola''''': trifon yes - and uninstall<br>
 +
(02:07:28) '''''trifon''''': ok. OSGI provide this infrastructure, right?<br>
 +
(02:07:37) '''''viola''''': not really<br>
 +
(02:07:41) '''''trifon''''': OSGI has dependency between modules.<br>
 +
(02:07:44) '''''hengsin''''': at the moment, official dictionary entries can be overriden by customizaton and migration script can silently remove your customization too.<br>
 +
(02:07:44) '''''trifon''''': ups, why?<br>
 +
(02:08:04) '''''viola''''': OSGi provides code organsiation, plugin install and such<br>
 +
(02:08:14) '''''viola''''': and automatic dictionary upgrade via 2pack<br>
 +
(02:08:25) '''''viola''''': but no audit nor uninstall<br>
 +
(02:08:35) '''''trifon''''': viola: yes. right. OSGi is the infrastructure.<br>
 +
(02:08:38) '''''trifon''''': i see.<br>
 +
(02:08:57) '''''viola''''': if we could upgrade 2pack to 3pack that handles that<br>
 +
(02:09:05) '''''viola''''': OSGi could make use of that<br>
 +
(02:09:08) '''''trifon''''': but eclipse has uninstall. i supose they do it with p2  their<br>
 +
(02:09:26) '''''viola''''': yes you can unstanll the code, the plugin<br>
 +
(02:09:33) '''''viola''''': but what about the dictionary changes ?<br>
 +
(02:09:54) '''''viola''''': We can decide in OSGi that a plugin goes away<br>
 +
(02:10:11) '''''viola''''': but we have to rollback the changes it made to the dictionary<br>
 +
(02:10:37) '''''viola''''': I would feel better if we could factor that out of OSGi as 2/3pack<br>
 +
(02:10:50) '''''hengsin''''': I guess we can either rely on the change log to audit that or we can mandate that customization/extensions cannot update other "entity type" entries.<br>
 +
(02:11:16) '''''trifon''''': hengsin: this limits usability.<br>
 +
(02:11:48) '''''viola''''': 2pack already has a backup log<br>
 +
(02:11:48) '''''trifon''''': i mean then your customization can't edit ademepire core entries.<br>
 +
(02:12:16) '''''hengsin''''': trifon: we can provide an extend mechanism, for e.g, ad_column_ext ...<br>
 +
(02:12:17) '''''viola''''': hengsin: can we implement a rollback based on this?<br>
 +
(02:12:32) '''''hengsin''''': Jorg: yes, it is partially implemented<br>
 +
(02:12:58) '''''viola''''': if we have ad_column_ext which a column call "module"<br>
 +
(02:13:13) '''''hengsin''''': the rollback is also partially implemented in adempiere for ad_changelog.<br>
 +
(02:13:14) '''''viola''''': what if there are two entries for two modules for the same column?<br>
 +
(02:13:30) '''''viola''''': i.e. how to handle conflicts?<br>
 +
(02:13:51) '''''viola''''': (this is #9)<br>
 +
(02:14:03) '''''hengsin''''': Jorg: they will be using different entity type. so it could be either the last one win or we could block the installation<br>
 +
(02:14:10) '''''trifon''''': it getting more complicated.<br>
 +
(02:14:29) '''''hengsin''''': trifon: it is now, just that we pretend it is not.<br>
 +
(02:14:55) '''''viola''''': hengsin: diffferent entitiy type means? - which entry is used for UI generation?<br>
 +
(02:15:03) '''''viola''''': i think blocking is correct<br>
 +
(02:15:31) '''''hengsin''''': Jorg: it should be ad_column union ad_column_ext ...<br>
 +
(02:15:32) '''''trifon''''': have to go now. will be back soon.<br>
 +
(02:15:38) ''trifon has left the channel (quit: Quit: ChatZilla 0.9.86 [Firefox 3.5.8/20100214235958]).''<br>
 +
(02:16:06) '''''viola''''': hmm say module 1 changes column length to 15, module 2 to 10 - ...?<br>
 +
(02:16:42) '''''CarlosRuiz''''': that's an easy conflict - keep the longest<br>
 +
(02:16:42) '''''CarlosRuiz''''': the problem is when they overwrite reference, or callout<br>
 +
(02:16:55) '''''viola''''': carlos ok<br>
 +
(02:16:57) '''''hengsin''''': Jorg: if last one win, it will be 10, if we do blocking, then module 2 can't be install as it cause dictionary conflict<br>
 +
(02:17:33) '''''viola''''': ok - then i understand<br>
 +
(02:17:34) '''''hengsin''''': and as carlos mention, there can be additional rules here, like extend is not a problem, etc ...<br>
 +
(02:18:03) '''''viola''''': ok thats for conflict - back to uninstall<br>
 +
(02:18:22) '''''viola''''': this is solved by your union<br>
 +
(02:18:38) '''''viola''''': ... duplicated entries: last one wins - correct?<br>
 +
(02:18:50) '''''viola''''': then module only has to remove its entry<br>
 +
(02:18:55) '''''hengsin''''': yes, jorg, if we use union and each module use different entitytype then uninstall is straigth forward<br>
 +
(02:19:04) '''''viola''''': i see<br>
 +
(02:19:22) '''''viola''''': and this for each dictionary entitiy<br>
 +
(02:19:37) '''''viola''''': ... translation included<br>
 +
(02:20:08) '''''hengsin''''': yes jorg, thats basically how xml type configuration work, each module keep their own meta data<br>
 +
(02:20:35) '''''CarlosRuiz''''': we're still in #9 - I think that's a big elephant - we need to split it in minor pieces to make it digestible <br>
 +
(02:20:35) '''''CarlosRuiz''''': sounds like a subproject <br>
 +
(02:21:16) '''''hengsin''''': yes and we will need to prototype any idea that we think is worth pursuing<br>
 +
(02:21:52) '''''viola''''': and now comes the question: Who is doing that?<br>
 +
(02:21:55) '''''hengsin''''': actually, there is another conflict that we need to resolve - the model class<br>
 +
(02:22:33) '''''viola''''': yepp<br>
 +
(02:22:44) '''''viola''''': model class are an issue in OSGi too<br>
 +
(02:23:03) '''''hengsin''''': I'm thinking that customization/extension should not override core model class but we provide a tool to generate interface and dynamic proxy adapter<br>
 +
(02:23:12) '''''hengsin''''': and they can used that when it is needed.<br>
 +
(02:23:15) '''''viola''''': two plugins, different - non-conflicting - additional attributes - which model class<br>
 +
(02:23:29) '''''CarlosRuiz''''': or, extensions must use the generic setters / getters<br>
 +
(02:23:56) '''''viola''''': i hate dyn proxies (currently struggling with them in my project)<br>
 +
(02:23:58) '''''hengsin''''': Carlos: yes, that works but 1. difficult to enfore, 2. not developer friendly<br>
 +
(02:24:17) '''''viola''''': therefore i like carlos proposal though i see hengsins points too<br>
 +
(02:24:36) '''''viola''''': so: Each plugin defines its own class extending core class<br>
 +
(02:24:52) '''''hengsin''''': since model class is just a wrapper for the generic getter / setter, we can have tools that generate interface for a module and they can used that with the help of dynamic proxy<br>
 +
(02:24:56) '''''viola''''': but then they always have to be loaded again from db<br>
 +
(02:25:03) '''''hengsin''''': no Jorg, just interface and dynamic proxy<br>
 +
(02:25:08) '''''CarlosRuiz''''': agree with 2 - 1 is easy to enforce - not allow overwriting a core class on extension<br>
 +
(02:25:40) '''''hengsin''''': Jorg, don't have to you can use dynamic proxy to adapt an model class<br>
 +
(02:25:49) '''''hengsin''''': to the interface you want<br>
 +
(02:26:09) '''''viola''''': hengsin yes<br>
 +
(02:26:27) '''''viola''''': i just fear the proxy introduces probs<br>
 +
(02:26:48) '''''hengsin''''': Jorg: performance issue ?<br>
 +
(02:26:53) '''''viola''''': i can say for example that drools - whenever we want to intruduce rules engines - cannot handle them<br>
 +
(02:26:57) '''''hengsin''''': like PermGen outofmemory :<br>
 +
(02:27:42) '''''viola''''': no hengsin - in 1.6 proxies do free permgen after use (as far as i know)<br>
 +
(02:27:51) '''''hengsin''''': anyway, if your agree that this is a good idea, I can try to prototype this ...<br>
 +
(02:28:10) '''''viola''''': ok - for this i'll volunteer<br>
 +
(02:28:25) '''''viola''''': oh sorry didn't read correctly<br>
 +
(02:28:32) '''''viola''''': certainly you can!<br>
 +
(02:29:33) '''''viola''''': so we have a result: In OSGi model classes will be proxied and hengsin tries that<br>
 +
(02:30:01) '''''viola''''': in 2pack (and AD generally) we need module-specific changes (no volunteer until now)<br>
 +
(02:30:21) '''''viola''''': this addresses #8 and #9 i think?<br>
 +
(02:30:57) '''''hengsin''''': carlos, anything to add ?<br>
 +
(02:31:51) '''''CarlosRuiz''''': sorry I'm behind with architectural group - solving a crisis in functional at this moment (bugs, etc(<br>
 +
(02:31:51) '''''CarlosRuiz''''': so, I'm really happy with you two, and I try to not interfere as I'm not being too much helpful<br>
 +
(02:32:21) '''''viola''''': hengsin: added a task for you - leaving expected date open ;-)<br>
 +
(02:32:33) '''''hengsin''''': ok, no problem<br>
 +
(02:32:47) '''''hengsin''''': lets move on to the OSGi work<br>
 +
(02:33:05) '''''viola''''': ok i have three questions here<br>
 +
(02:33:18) '''''viola''''': 1. Deployment: Retain old deployment, move to new?<br>
 +
(02:33:32) '''''hengsin''''': for the osgi deployment, does it means we need no application server since servlet engine is already part of the osgi stack ?<br>
 +
(02:33:59) '''''viola''''': no, i currrntly simply throw i all into a plain tomcat<br>
 +
(02:34:08) '''''viola''''': works (despite ejb)<br>
 +
(02:34:20) '''''hengsin''''': hmm .. isn't jetty since is there ?<br>
 +
(02:34:34) '''''viola''''': right<br>
 +
(02:34:38) '''''hengsin''''': sorry, i means isn't jetty servlet engine is bundle with equinox ?<br>
 +
(02:34:59) '''''hengsin''''': so why do we still need tomcat then ?<br>
 +
(02:35:09) '''''viola''''': u are talking about that "servlet container inside OSGi" here<br>
 +
(02:35:21) '''''viola''''': i didn't want that<br>
 +
(02:35:33) '''''viola''''': because we then would be tied into jetty and equinox<br>
 +
(02:35:36) '''''hengsin''''': hmm ... what's the problem with that ?<br>
 +
(02:35:55) '''''viola''''': instead i used the "OSGi inside servlet container" thing<br>
 +
(02:36:00) '''''viola''''': with the servlet bridge<br>
 +
(02:36:03) '''''viola''''': works<br>
 +
(02:36:17) '''''viola''''': and is able to work in any servlet/j2ee container<br>
 +
(02:36:39) '''''hengsin''''': I just wondering is the other way round looks much simpler deployment wise.<br>
 +
(02:36:51) '''''viola''''': simpler maybe<br>
 +
(02:37:17) '''''viola''''': but if you alyready have a deployment environment - its a big move<br>
 +
(02:37:37) '''''viola''''': not simple<br>
 +
(02:37:50) '''''viola''''': you have a war and throw it into tomcat<br>
 +
(02:38:07) '''''viola''''': or jetty or jboss<br>
 +
(02:38:43) '''''hengsin''''': ok, I guess you means it is more flexible this way and more compatible with what people have been doing<br>
 +
(02:38:52) '''''viola''''': right!<br>
 +
(02:39:09) '''''hengsin''''': alright, if we follow this line, it means we would create a separate ear file for the deployment<br>
 +
(02:39:20) '''''hengsin''''': I means for the ejb deployment<br>
 +
(02:39:45) '''''hengsin''''': and do away with the current jboss bundle practise ?<br>
 +
(02:39:45) '''''viola''''': yes<br>
 +
(02:40:06) '''''CarlosRuiz''''': one question from my ignorance - with the move to OSGi - will Adempiere still run standalone like today?  I mean it can be run without a server<br>
 +
(02:40:25) '''''viola''''': yepp - maybe for the jun 14 release we should try a parallel deployment<br>
 +
(02:40:45) '''''hengsin''''': carlos, yes just like eclipse can run without application server<br>
 +
(02:41:00) '''''hengsin''''': I means eclipse is osgi based<br>
 +
(02:41:02) '''''CarlosRuiz''''': great<br>
 +
(02:41:42) '''''hengsin''''': Jorg, that mean we will need to rework the installation tool to cater for external application server - 1 for web and 1 for ejb<br>
 +
(02:41:59) '''''hengsin''''': although the 2 could be the same but they doesn't have to<br>
 +
(02:42:02) '''''viola''''': why?<br>
 +
(02:42:08) '''''viola''''': ah ok<br>
 +
(02:42:11) '''''viola''''': exactly<br>
 +
(02:42:36) '''''viola''''': the installation tool in first step simply should build a new web and webstart archive<br>
 +
(02:42:46) '''''viola''''': and put it beside the "old" ear<br>
 +
(02:43:12) '''''hengsin''''': it is more than that, we still have webstore and the admin apps<br>
 +
(02:43:15) '''''CarlosRuiz''''': #29 -> replace ejb ?<br>
 +
(02:43:26) '''''hengsin''''': I think the admin apps could be broken by this move too<br>
 +
(02:43:51) '''''viola''''': i have to look into that<br>
 +
(02:43:58) '''''CarlosRuiz''''': and as webapps we have posterita and webservices<br>
 +
(02:44:00) ''trifon [~chatzilla@pD95F0BD9.dip0.t-ipconnect.de] entered the channel.''<br>
 +
(02:44:01) '''''hengsin''''': carlos, I think that's optional follow Jorg's proposed approach. at least it is not significant<br>
 +
(02:44:38) '''''viola''''': i also would try to postpone the ejb thing<br>
 +
(02:44:49) '''''CarlosRuiz''''': ok<br>
 +
(02:44:58) '''''viola''''': simply try out whether they are reachable from an OSGi install<br>
 +
(02:45:16) '''''hengsin''''': Jorg: that shouldn't be an issue<br>
 +
(02:45:43) '''''viola''''': so we have an answer to 1: Stay with JBoss and deploy a new WAR<br>
 +
(02:46:08) '''''viola''''': (only i would try to change the dev environment because tomcat is so much handier than JBoss...)<br>
 +
(02:46:30) '''''viola''''': Question 2: OSGi metadata vs AD?<br>
 +
(02:46:38) '''''viola''''': Please no wars about that ;-)<br>
 +
(02:46:49) '''''CarlosRuiz''''': what is jboss requirement from adempiere?<br>
 +
(02:46:50) '''''hengsin''''': hmm .. Jorg, forgot one thing here - wouldn't it be an issue as we don't have the equivalent of servlet-bridge for ejb ?<br>
 +
(02:46:59) '''''CarlosRuiz''''': I mean - what do we need from jboss that tomcat doesn't have?<br>
 +
(02:47:03) '''''trifon''''': viola: by OSGi metadata is meant MANIFEST.MF, right?<br>
 +
(02:47:09) '''''trifon''''': all the data stored inside?<br>
 +
(02:47:19) '''''viola''''': wait - back to question 1 - sorry<br>
 +
(02:47:43) '''''viola''''': hengsin: dont think so - let me try it out ok?<br>
 +
(02:47:53) '''''viola''''': carlos: EJB support<br>
 +
(02:48:27) '''''hengsin''''': ok, we need to find that out - if that's an issue then we must move to web services.<br>
 +
(02:48:37) '''''viola''''': yepp<br>
 +
(02:49:16) '''''hengsin''''': trifon: yes, manifest.mf and plugin.xml<br>
 +
(02:49:18) '''''viola''''': but at least remote interfacing should work<br>
 +
(02:49:26) '''''viola''''': so now to question 2<br>
 +
(02:49:46) '''''CarlosRuiz''''': and ejbs in adempiere are just for db connection discovery and accounting posting (almost deprecated)<br>
 +
(02:49:48) '''''hengsin''''': jorg: yes but if it can't use the osgi module then it is a no go<br>
 +
(02:50:22) '''''viola''''': hengsin didn't get that?<br>
 +
(02:50:59) '''''viola''''': u mean if EJBs cannot use OSGi?<br>
 +
(02:51:11) '''''hengsin''''': for e.g, ejb will call the accounting processor and that might need to lookup posting rules extension from osgi module<br>
 +
(02:51:19) '''''viola''''': I see<br>
 +
(02:51:44) '''''viola''''': OK I'll have this in my mind when testing it<br>
 +
(02:52:35) '''''hengsin''''': yes and the osgi instance area should be shared by all web module too ( zk, posterita, webservice and webstore )<br>
 +
(02:53:32) '''''CarlosRuiz''''': > Question 2: OSGi metadata vs AD?  Please no wars about that ;-)<br>
 +
(02:53:32) '''''CarlosRuiz''''': I would bet for a mixed environment (more work, but the best of both worlds), having possibility to have AD total flexibility - and when an implementation is stable it can move to metadata for speed up the thing<br>
 +
(02:53:32) '''''CarlosRuiz''''': But, if not possible, I prefer flexibility over speed (unless the speed penalty is prohibitive)<br>
 +
(02:54:02) '''''viola''''': hengsin but this is always configurable and thus no prob - though you want diffenrent bundles (classloaders for different web apps right?<br>
 +
(02:54:24) '''''trifon''''': here open question i think is: can we have all meatadata which we have now in AD into OSGi?<br>
 +
(02:54:34) '''''trifon''''': i would say this generaly this is possible, right?<br>
 +
(02:54:37) '''''hengsin''''': yes, some share, some exclusive, that's the idea<br>
 +
(02:54:52) '''''hengsin''''': trifon, yes, we have already done that for callout<br>
 +
(02:55:00) '''''trifon''''': hengsin: i know.<br>
 +
(02:55:20) '''''trifon''''': ok then open question is what metadata from AD would be good to be moved to ISGI?<br>
 +
(02:55:28) '''''hengsin''''': carlos: the option here is either we duplicate that or we can have ad entry that point to osgi extensions<br>
 +
(02:55:29) '''''trifon''''': OSG.<br>
 +
(02:55:48) '''''viola''''': the only argument for metadata in OSGi is simpler development and deployment<br>
 +
(02:55:52) '''''hengsin''''': Jorg, right ?<br>
 +
(02:56:14) '''''trifon''''': second argument is that all metadata is stored on one place.<br>
 +
(02:56:19) '''''viola''''': hengsin yes<br>
 +
(02:56:30) '''''trifon''''': and you can simpley remove osgi module then metadata is gone too.<br>
 +
(02:56:58) '''''viola''''': trifon to be honest<br>
 +
(02:57:07) '''''viola''''': i simply think that move is much too big<br>
 +
(02:57:13) '''''CarlosRuiz''''': hmmm - I guess I was talking about something different then<br>
 +
(02:57:51) '''''hengsin''''': Jorg: what's your idea ?<br>
 +
(02:58:09) '''''viola''''': at the moment i would leave all meta data in AD<br>
 +
(02:58:16) '''''hengsin''''': I saw you have try both in approach 1 and 2 ...<br>
 +
(02:58:25) '''''viola''''': and provide the plugin developer with tool<br>
 +
(02:58:27) '''''CarlosRuiz''''': do you mean?<br>
 +
(02:58:27) '''''CarlosRuiz''''': we can define a callout in AD_Column at this moment<br>
 +
(02:58:27) '''''CarlosRuiz''''': but with OSGi we can define the callout in metadata of the plugin - and not in AD_Column<br>
 +
(02:58:27) '''''CarlosRuiz''''': right?<br>
 +
(02:58:46) '''''viola''''': carlos right<br>
 +
(02:59:09) '''''viola''''': but as hengsin said: Then you cannot see that in the AD<br>
 +
(02:59:25) '''''hengsin''''': Jorg, isn't it the combination of both at the moment ? i.e it first get from OSGi, then get from AD_Column ?<br>
 +
(02:59:40) '''''trifon''''': CarlosRuiz: at this moment OSGi is also creating records into AD. so you have the metadata in two places: OSGi bundle and AD><br>
 +
(02:59:41) '''''viola''''': hengsin at the moment for callout yes<br>
 +
(03:00:29) '''''CarlosRuiz''''': sounds interesting - because we have a big problem with callout that can be solved that way<br>
 +
(03:00:29) '''''CarlosRuiz''''': we're thinking to add a new table AD_Column_Callout where each record is a callout<br>
 +
(03:00:29) '''''CarlosRuiz''''': but with OSGi we could solve it in metadata<br>
 +
(03:00:33) '''''viola''''': trifon: That finally should not be the idea - you agree?<br>
 +
(03:00:56) '''''trifon''''': viola: yes. agree. Metadata must be at one place.<br>
 +
(03:01:12) '''''hengsin''''': ok, so 1) to do it like how callout works now in the osgi branch 2) drop AD 3) have osgi:xxx entries in AD<br>
 +
(03:01:22) '''''hengsin''''': Jorg, one of the three, right ?<br>
 +
(03:01:35) '''''viola''''': ahm 2 sound a bit funny<br>
 +
(03:02:12) '''''viola''''': we only speak about the points where AD and code has to be connected - right?<br>
 +
(03:02:20) '''''viola''''': callout, process, validator, ...<br>
 +
(03:02:28) '''''hengsin''''': Jorg, yes<br>
 +
(03:03:01) '''''viola''''': yes then 1 or and drop the corresponding AD column or 3<br>
 +
(03:03:48) '''''hengsin''''': Jorg: since you have try 1 & 3, what do you proposed here ?<br>
 +
(03:03:53) '''''viola''''': if metadata should be at one place: 3<br>
 +
(03:04:17) '''''viola''''': i think this is the solution and we provide tools for developers to simply and safely<br>
 +
(03:04:24) '''''viola''''': add these AD entries<br>
 +
(03:04:40) '''''viola''''': (as auto 2pack packout eg)<br>
 +
(03:04:53) '''''viola''''': trifon?<br>
 +
(03:05:53) '''''interopen''''': Hi all, i also see better to keep metadata in one place, option 3<br>
 +
(03:06:11) '''''trifon''''': viola: i'm a bit confused.<br>
 +
(03:06:21) '''''hengsin''''': I like 1, it make osgi module development much simpler :)<br>
 +
(03:06:26) '''''trifon''''': if we keep metadata at one place why we need to create enitrees in AD?<br>
 +
(03:06:49) '''''viola''''': the idea would be: At module installation<br>
 +
(03:07:10) '''''viola''''': the module creates these entries with special markers "osgi://MyCallout"<br>
 +
(03:07:26) '''''viola''''': at runtime, they are directed back to the module<br>
 +
(03:07:36) '''''hengsin''''': and with the dictionary service support, it means peopla can chose either one or the best suited.<br>
 +
(03:08:48) '''''viola''''': i guess we run out of time<br>
 +
(03:09:07) '''''viola''''': perhaps all should think over it and return to the point next week?<br>
 +
(03:09:29) '''''CarlosRuiz''''': guys - I sent you an e-mail asking for comments about mercurial - please if you can take a read and comment<br>
 +
(03:09:38) '''''hengsin''''': Jorg, yes, I think I would definitely prefer having both 1 and 3<br>
 +
(03:10:05) '''''viola''''': aaarg ;-) I feared that ;-)<br>
 +
(03:10:12) '''''hengsin''''': carlos, yes, agree with the move but don't like the 3 month time frame, for me, is ASAP :)<br>
 +
(03:10:53) '''''hengsin''''': anyway, it is time for qa now<br>
 +
(03:11:07) '''''viola''''': agree also, but would prefer at least 3 weeks<br>
 +
(03:11:53) '''''trifon''''': what is this email about?<br>
 +
(03:11:59) '''''CarlosRuiz''''': please send comments with copy to Tony<br>
 +
(03:12:05) '''''viola''''': ok then bye and thanks all - also trifon and interopen!<br>
 +
(03:12:20) '''''CarlosRuiz''''': bye - thanks<br>
 +
(03:12:33) '''''interopen''''': bye Jorg, so time for QA?<br>
 +
(03:12:51) '''''CarlosRuiz''''': trifon -> last message here<br>
 +
(03:12:51) '''''CarlosRuiz''''': https://sourceforge.net/mailarchive/forum.php?forum_name=adempiere-p-m-c<br>
 +
(03:12:52) '''''interopen''''': very interesting the Architectural topic today<br>
 +
(03:13:18) ''viola has left the channel.''<br>
 +
 +
 +
[[Category:Meetings]]

Latest revision as of 12:41, 22 March 2010

Date: 2010-03-17
Time: 7AM GMT
Venue: irc #adempiere-team
Support Spreadsheet: Adempiere PMC Architecture
Chat times in GMT-5

Agenda

  • Wish #8/#9
    • What are the concrete requirements to Dictionary Audit?
    • Who wants to sketch a solution?
  • OSGi discussion
    • Deployment: Retain old deployment, move to new? (Tomcat? - Webstart JNLP generation? - Windows installer?)
    • OSGi metadata vs AD? (pointers to code in AD or pointers to AD in code or both?)
    • About branch handling: Introducing plugins is about code reorganisation, which is hard to do in a branch - how to deal with that?
  • Continue Review Wishlist
    • only priority high, per topic, starting at #11:
      • author shortly explains topic
      • others agree on priority
      • discussion on first tasks for the topic, put them on the task list
  • Opinions about unplugging unmaintained or underdeveloped extensions from core (CM, HTML UI, Posterita)
  • Other items?

Summary

  • #8/#9: Dictionary audit
    • Big subproject
    • Needs to but prototyped
    • Dictionary entries: Core UNION Module entries
    • Model classes: Proxied in OSGi
  • OSGi open questions:
    • EJBs? Cann they called by OSGi plugins? Can they use OSGi plugins?
    • Web store and admin?
    • All in the same OSGi container?
    • Metadata: AD vs. Manifest: In AD is mandatory, optionally also in Manifest
  • Mercurial:
    • No objections, only timeframe a bit long?

Chat

(02:01:18) CarlosRuiz: starting now Architectural
(02:01:26) nwessel: cu
(02:01:54) viola: OK, agenda as usual here: http://www.adempiere.com/index.php/PMC_Architecture_Meeting_20100317
(02:02:28) viola: Carlos: Sorry again for removing the calendar entries last week - trying to learn ical... :-(
(02:02:50) CarlosRuiz: no problem
(02:02:50) hengsin: hi Jorg
(02:02:55) CarlosRuiz: fortunately it was not google  :-)
(02:03:01) viola: hehe
(02:03:37) viola: so... last time we ended with #8/#9: dictionary audit
(02:04:14) CarlosRuiz: about #8 - do you want to discuss it or just to clarify the point?
(02:04:48) viola: hmm - i think point is clear
(02:04:54) viola: solution not ;-)
(02:06:18) trifon: what means dictionary audit?
(02:06:20) CarlosRuiz: maybe we can maintain 2pack or backward compatibility
(02:06:20) CarlosRuiz: and put hengsin modifications in trunk as 3pack  :-)
(02:06:24) hengsin: one significant requirements is here to managed the modifications by extension and customization
(02:06:29) trifon: ability to see who, when changed records?
(02:07:06) viola: trifon yes - and uninstall
(02:07:28) trifon: ok. OSGI provide this infrastructure, right?
(02:07:37) viola: not really
(02:07:41) trifon: OSGI has dependency between modules.
(02:07:44) hengsin: at the moment, official dictionary entries can be overriden by customizaton and migration script can silently remove your customization too.
(02:07:44) trifon: ups, why?
(02:08:04) viola: OSGi provides code organsiation, plugin install and such
(02:08:14) viola: and automatic dictionary upgrade via 2pack
(02:08:25) viola: but no audit nor uninstall
(02:08:35) trifon: viola: yes. right. OSGi is the infrastructure.
(02:08:38) trifon: i see.
(02:08:57) viola: if we could upgrade 2pack to 3pack that handles that
(02:09:05) viola: OSGi could make use of that
(02:09:08) trifon: but eclipse has uninstall. i supose they do it with p2 their
(02:09:26) viola: yes you can unstanll the code, the plugin
(02:09:33) viola: but what about the dictionary changes ?
(02:09:54) viola: We can decide in OSGi that a plugin goes away
(02:10:11) viola: but we have to rollback the changes it made to the dictionary
(02:10:37) viola: I would feel better if we could factor that out of OSGi as 2/3pack
(02:10:50) hengsin: I guess we can either rely on the change log to audit that or we can mandate that customization/extensions cannot update other "entity type" entries.
(02:11:16) trifon: hengsin: this limits usability.
(02:11:48) viola: 2pack already has a backup log
(02:11:48) trifon: i mean then your customization can't edit ademepire core entries.
(02:12:16) hengsin: trifon: we can provide an extend mechanism, for e.g, ad_column_ext ...
(02:12:17) viola: hengsin: can we implement a rollback based on this?
(02:12:32) hengsin: Jorg: yes, it is partially implemented
(02:12:58) viola: if we have ad_column_ext which a column call "module"
(02:13:13) hengsin: the rollback is also partially implemented in adempiere for ad_changelog.
(02:13:14) viola: what if there are two entries for two modules for the same column?
(02:13:30) viola: i.e. how to handle conflicts?
(02:13:51) viola: (this is #9)
(02:14:03) hengsin: Jorg: they will be using different entity type. so it could be either the last one win or we could block the installation
(02:14:10) trifon: it getting more complicated.
(02:14:29) hengsin: trifon: it is now, just that we pretend it is not.
(02:14:55) viola: hengsin: diffferent entitiy type means? - which entry is used for UI generation?
(02:15:03) viola: i think blocking is correct
(02:15:31) hengsin: Jorg: it should be ad_column union ad_column_ext ...
(02:15:32) trifon: have to go now. will be back soon.
(02:15:38) trifon has left the channel (quit: Quit: ChatZilla 0.9.86 [Firefox 3.5.8/20100214235958]).
(02:16:06) viola: hmm say module 1 changes column length to 15, module 2 to 10 - ...?
(02:16:42) CarlosRuiz: that's an easy conflict - keep the longest
(02:16:42) CarlosRuiz: the problem is when they overwrite reference, or callout
(02:16:55) viola: carlos ok
(02:16:57) hengsin: Jorg: if last one win, it will be 10, if we do blocking, then module 2 can't be install as it cause dictionary conflict
(02:17:33) viola: ok - then i understand
(02:17:34) hengsin: and as carlos mention, there can be additional rules here, like extend is not a problem, etc ...
(02:18:03) viola: ok thats for conflict - back to uninstall
(02:18:22) viola: this is solved by your union
(02:18:38) viola: ... duplicated entries: last one wins - correct?
(02:18:50) viola: then module only has to remove its entry
(02:18:55) hengsin: yes, jorg, if we use union and each module use different entitytype then uninstall is straigth forward
(02:19:04) viola: i see
(02:19:22) viola: and this for each dictionary entitiy
(02:19:37) viola: ... translation included
(02:20:08) hengsin: yes jorg, thats basically how xml type configuration work, each module keep their own meta data
(02:20:35) CarlosRuiz: we're still in #9 - I think that's a big elephant - we need to split it in minor pieces to make it digestible
(02:20:35) CarlosRuiz: sounds like a subproject
(02:21:16) hengsin: yes and we will need to prototype any idea that we think is worth pursuing
(02:21:52) viola: and now comes the question: Who is doing that?
(02:21:55) hengsin: actually, there is another conflict that we need to resolve - the model class
(02:22:33) viola: yepp
(02:22:44) viola: model class are an issue in OSGi too
(02:23:03) hengsin: I'm thinking that customization/extension should not override core model class but we provide a tool to generate interface and dynamic proxy adapter
(02:23:12) hengsin: and they can used that when it is needed.
(02:23:15) viola: two plugins, different - non-conflicting - additional attributes - which model class
(02:23:29) CarlosRuiz: or, extensions must use the generic setters / getters
(02:23:56) viola: i hate dyn proxies (currently struggling with them in my project)
(02:23:58) hengsin: Carlos: yes, that works but 1. difficult to enfore, 2. not developer friendly
(02:24:17) viola: therefore i like carlos proposal though i see hengsins points too
(02:24:36) viola: so: Each plugin defines its own class extending core class
(02:24:52) hengsin: since model class is just a wrapper for the generic getter / setter, we can have tools that generate interface for a module and they can used that with the help of dynamic proxy
(02:24:56) viola: but then they always have to be loaded again from db
(02:25:03) hengsin: no Jorg, just interface and dynamic proxy
(02:25:08) CarlosRuiz: agree with 2 - 1 is easy to enforce - not allow overwriting a core class on extension
(02:25:40) hengsin: Jorg, don't have to you can use dynamic proxy to adapt an model class
(02:25:49) hengsin: to the interface you want
(02:26:09) viola: hengsin yes
(02:26:27) viola: i just fear the proxy introduces probs
(02:26:48) hengsin: Jorg: performance issue ?
(02:26:53) viola: i can say for example that drools - whenever we want to intruduce rules engines - cannot handle them
(02:26:57) hengsin: like PermGen outofmemory :
(02:27:42) viola: no hengsin - in 1.6 proxies do free permgen after use (as far as i know)
(02:27:51) hengsin: anyway, if your agree that this is a good idea, I can try to prototype this ...
(02:28:10) viola: ok - for this i'll volunteer
(02:28:25) viola: oh sorry didn't read correctly
(02:28:32) viola: certainly you can!
(02:29:33) viola: so we have a result: In OSGi model classes will be proxied and hengsin tries that
(02:30:01) viola: in 2pack (and AD generally) we need module-specific changes (no volunteer until now)
(02:30:21) viola: this addresses #8 and #9 i think?
(02:30:57) hengsin: carlos, anything to add ?
(02:31:51) CarlosRuiz: sorry I'm behind with architectural group - solving a crisis in functional at this moment (bugs, etc(
(02:31:51) CarlosRuiz: so, I'm really happy with you two, and I try to not interfere as I'm not being too much helpful
(02:32:21) viola: hengsin: added a task for you - leaving expected date open ;-)
(02:32:33) hengsin: ok, no problem
(02:32:47) hengsin: lets move on to the OSGi work
(02:33:05) viola: ok i have three questions here
(02:33:18) viola: 1. Deployment: Retain old deployment, move to new?
(02:33:32) hengsin: for the osgi deployment, does it means we need no application server since servlet engine is already part of the osgi stack ?
(02:33:59) viola: no, i currrntly simply throw i all into a plain tomcat
(02:34:08) viola: works (despite ejb)
(02:34:20) hengsin: hmm .. isn't jetty since is there ?
(02:34:34) viola: right
(02:34:38) hengsin: sorry, i means isn't jetty servlet engine is bundle with equinox ?
(02:34:59) hengsin: so why do we still need tomcat then ?
(02:35:09) viola: u are talking about that "servlet container inside OSGi" here
(02:35:21) viola: i didn't want that
(02:35:33) viola: because we then would be tied into jetty and equinox
(02:35:36) hengsin: hmm ... what's the problem with that ?
(02:35:55) viola: instead i used the "OSGi inside servlet container" thing
(02:36:00) viola: with the servlet bridge
(02:36:03) viola: works
(02:36:17) viola: and is able to work in any servlet/j2ee container
(02:36:39) hengsin: I just wondering is the other way round looks much simpler deployment wise.
(02:36:51) viola: simpler maybe
(02:37:17) viola: but if you alyready have a deployment environment - its a big move
(02:37:37) viola: not simple
(02:37:50) viola: you have a war and throw it into tomcat
(02:38:07) viola: or jetty or jboss
(02:38:43) hengsin: ok, I guess you means it is more flexible this way and more compatible with what people have been doing
(02:38:52) viola: right!
(02:39:09) hengsin: alright, if we follow this line, it means we would create a separate ear file for the deployment
(02:39:20) hengsin: I means for the ejb deployment
(02:39:45) hengsin: and do away with the current jboss bundle practise ?
(02:39:45) viola: yes
(02:40:06) CarlosRuiz: one question from my ignorance - with the move to OSGi - will Adempiere still run standalone like today? I mean it can be run without a server
(02:40:25) viola: yepp - maybe for the jun 14 release we should try a parallel deployment
(02:40:45) hengsin: carlos, yes just like eclipse can run without application server
(02:41:00) hengsin: I means eclipse is osgi based
(02:41:02) CarlosRuiz: great
(02:41:42) hengsin: Jorg, that mean we will need to rework the installation tool to cater for external application server - 1 for web and 1 for ejb
(02:41:59) hengsin: although the 2 could be the same but they doesn't have to
(02:42:02) viola: why?
(02:42:08) viola: ah ok
(02:42:11) viola: exactly
(02:42:36) viola: the installation tool in first step simply should build a new web and webstart archive
(02:42:46) viola: and put it beside the "old" ear
(02:43:12) hengsin: it is more than that, we still have webstore and the admin apps
(02:43:15) CarlosRuiz: #29 -> replace ejb ?
(02:43:26) hengsin: I think the admin apps could be broken by this move too
(02:43:51) viola: i have to look into that
(02:43:58) CarlosRuiz: and as webapps we have posterita and webservices
(02:44:00) trifon [~chatzilla@pD95F0BD9.dip0.t-ipconnect.de] entered the channel.
(02:44:01) hengsin: carlos, I think that's optional follow Jorg's proposed approach. at least it is not significant
(02:44:38) viola: i also would try to postpone the ejb thing
(02:44:49) CarlosRuiz: ok
(02:44:58) viola: simply try out whether they are reachable from an OSGi install
(02:45:16) hengsin: Jorg: that shouldn't be an issue
(02:45:43) viola: so we have an answer to 1: Stay with JBoss and deploy a new WAR
(02:46:08) viola: (only i would try to change the dev environment because tomcat is so much handier than JBoss...)
(02:46:30) viola: Question 2: OSGi metadata vs AD?
(02:46:38) viola: Please no wars about that ;-)
(02:46:49) CarlosRuiz: what is jboss requirement from adempiere?
(02:46:50) hengsin: hmm .. Jorg, forgot one thing here - wouldn't it be an issue as we don't have the equivalent of servlet-bridge for ejb ?
(02:46:59) CarlosRuiz: I mean - what do we need from jboss that tomcat doesn't have?
(02:47:03) trifon: viola: by OSGi metadata is meant MANIFEST.MF, right?
(02:47:09) trifon: all the data stored inside?
(02:47:19) viola: wait - back to question 1 - sorry
(02:47:43) viola: hengsin: dont think so - let me try it out ok?
(02:47:53) viola: carlos: EJB support
(02:48:27) hengsin: ok, we need to find that out - if that's an issue then we must move to web services.
(02:48:37) viola: yepp
(02:49:16) hengsin: trifon: yes, manifest.mf and plugin.xml
(02:49:18) viola: but at least remote interfacing should work
(02:49:26) viola: so now to question 2
(02:49:46) CarlosRuiz: and ejbs in adempiere are just for db connection discovery and accounting posting (almost deprecated)
(02:49:48) hengsin: jorg: yes but if it can't use the osgi module then it is a no go
(02:50:22) viola: hengsin didn't get that?
(02:50:59) viola: u mean if EJBs cannot use OSGi?
(02:51:11) hengsin: for e.g, ejb will call the accounting processor and that might need to lookup posting rules extension from osgi module
(02:51:19) viola: I see
(02:51:44) viola: OK I'll have this in my mind when testing it
(02:52:35) hengsin: yes and the osgi instance area should be shared by all web module too ( zk, posterita, webservice and webstore )
(02:53:32) CarlosRuiz: > Question 2: OSGi metadata vs AD? Please no wars about that ;-)
(02:53:32) CarlosRuiz: I would bet for a mixed environment (more work, but the best of both worlds), having possibility to have AD total flexibility - and when an implementation is stable it can move to metadata for speed up the thing
(02:53:32) CarlosRuiz: But, if not possible, I prefer flexibility over speed (unless the speed penalty is prohibitive)
(02:54:02) viola: hengsin but this is always configurable and thus no prob - though you want diffenrent bundles (classloaders for different web apps right?
(02:54:24) trifon: here open question i think is: can we have all meatadata which we have now in AD into OSGi?
(02:54:34) trifon: i would say this generaly this is possible, right?
(02:54:37) hengsin: yes, some share, some exclusive, that's the idea
(02:54:52) hengsin: trifon, yes, we have already done that for callout
(02:55:00) trifon: hengsin: i know.
(02:55:20) trifon: ok then open question is what metadata from AD would be good to be moved to ISGI?
(02:55:28) hengsin: carlos: the option here is either we duplicate that or we can have ad entry that point to osgi extensions
(02:55:29) trifon: OSG.
(02:55:48) viola: the only argument for metadata in OSGi is simpler development and deployment
(02:55:52) hengsin: Jorg, right ?
(02:56:14) trifon: second argument is that all metadata is stored on one place.
(02:56:19) viola: hengsin yes
(02:56:30) trifon: and you can simpley remove osgi module then metadata is gone too.
(02:56:58) viola: trifon to be honest
(02:57:07) viola: i simply think that move is much too big
(02:57:13) CarlosRuiz: hmmm - I guess I was talking about something different then
(02:57:51) hengsin: Jorg: what's your idea ?
(02:58:09) viola: at the moment i would leave all meta data in AD
(02:58:16) hengsin: I saw you have try both in approach 1 and 2 ...
(02:58:25) viola: and provide the plugin developer with tool
(02:58:27) CarlosRuiz: do you mean?
(02:58:27) CarlosRuiz: we can define a callout in AD_Column at this moment
(02:58:27) CarlosRuiz: but with OSGi we can define the callout in metadata of the plugin - and not in AD_Column
(02:58:27) CarlosRuiz: right?
(02:58:46) viola: carlos right
(02:59:09) viola: but as hengsin said: Then you cannot see that in the AD
(02:59:25) hengsin: Jorg, isn't it the combination of both at the moment ? i.e it first get from OSGi, then get from AD_Column ?
(02:59:40) trifon: CarlosRuiz: at this moment OSGi is also creating records into AD. so you have the metadata in two places: OSGi bundle and AD>
(02:59:41) viola: hengsin at the moment for callout yes
(03:00:29) CarlosRuiz: sounds interesting - because we have a big problem with callout that can be solved that way
(03:00:29) CarlosRuiz: we're thinking to add a new table AD_Column_Callout where each record is a callout
(03:00:29) CarlosRuiz: but with OSGi we could solve it in metadata
(03:00:33) viola: trifon: That finally should not be the idea - you agree?
(03:00:56) trifon: viola: yes. agree. Metadata must be at one place.
(03:01:12) hengsin: ok, so 1) to do it like how callout works now in the osgi branch 2) drop AD 3) have osgi:xxx entries in AD
(03:01:22) hengsin: Jorg, one of the three, right ?
(03:01:35) viola: ahm 2 sound a bit funny
(03:02:12) viola: we only speak about the points where AD and code has to be connected - right?
(03:02:20) viola: callout, process, validator, ...
(03:02:28) hengsin: Jorg, yes
(03:03:01) viola: yes then 1 or and drop the corresponding AD column or 3
(03:03:48) hengsin: Jorg: since you have try 1 & 3, what do you proposed here ?
(03:03:53) viola: if metadata should be at one place: 3
(03:04:17) viola: i think this is the solution and we provide tools for developers to simply and safely
(03:04:24) viola: add these AD entries
(03:04:40) viola: (as auto 2pack packout eg)
(03:04:53) viola: trifon?
(03:05:53) interopen: Hi all, i also see better to keep metadata in one place, option 3
(03:06:11) trifon: viola: i'm a bit confused.
(03:06:21) hengsin: I like 1, it make osgi module development much simpler :)
(03:06:26) trifon: if we keep metadata at one place why we need to create enitrees in AD?
(03:06:49) viola: the idea would be: At module installation
(03:07:10) viola: the module creates these entries with special markers "osgi://MyCallout"
(03:07:26) viola: at runtime, they are directed back to the module
(03:07:36) hengsin: and with the dictionary service support, it means peopla can chose either one or the best suited.
(03:08:48) viola: i guess we run out of time
(03:09:07) viola: perhaps all should think over it and return to the point next week?
(03:09:29) CarlosRuiz: guys - I sent you an e-mail asking for comments about mercurial - please if you can take a read and comment
(03:09:38) hengsin: Jorg, yes, I think I would definitely prefer having both 1 and 3
(03:10:05) viola: aaarg ;-) I feared that ;-)
(03:10:12) hengsin: carlos, yes, agree with the move but don't like the 3 month time frame, for me, is ASAP :)
(03:10:53) hengsin: anyway, it is time for qa now
(03:11:07) viola: agree also, but would prefer at least 3 weeks
(03:11:53) trifon: what is this email about?
(03:11:59) CarlosRuiz: please send comments with copy to Tony
(03:12:05) viola: ok then bye and thanks all - also trifon and interopen!
(03:12:20) CarlosRuiz: bye - thanks
(03:12:33) interopen: bye Jorg, so time for QA?
(03:12:51) CarlosRuiz: trifon -> last message here
(03:12:51) CarlosRuiz: https://sourceforge.net/mailarchive/forum.php?forum_name=adempiere-p-m-c
(03:12:52) interopen: very interesting the Architectural topic today
(03:13:18) viola has left the channel.