thanks david: I won't discuss this further here.
========================= BJ Freeman http://bjfreeman.elance.com Strategic Power Office with Supplier Automation <http://www.businessesnetwork.com/automation/viewforum.php?f=93> Specialtymarket.com <http://www.specialtymarket.com/> Systems Integrator-- Glad to Assist Chat Y! messenger: bjfr33man Linkedin <http://www.linkedin.com/profile?viewProfile=&key=1237480&locale=en_US&trk=tab_pro> David E Jones sent the following on 4/16/2010 10:07 PM: > BJ: The point with multi-tenant stuff is that the tenant doesn't have access > to load data using something like "ant run-install ..." or anything else on > the command line. You could have hundreds of people active in other tenant > instances so you don't want to stop and start the server to do anything like > this, and hopefully you can avoid having an admin work with the tenant to get > custom data loaded. You want things to be self-service, and that is the point > of making it database driven (with a UI so the user can get stuff into the > relevant portions of the database). > > -David > > > On Apr 16, 2010, at 5:09 PM, BJ Freeman wrote: > >> somehow I did not get marcs reply to so this is to both. >> you say put the data in a db. is this manual or loadable by the reader. >> that is the crux,right now of my focus. >> I imagine at some point the default will have choices using the config >> that hans or I have done. >> >> some way of creating the installs. >> but for now like most systems , till that is implemented we still have >> to load the tenant data. >> which brings me back to the mechanism to do that >> it is not some much if it is intial-seed, seed, or ext. >> it is how to load the tenant from a command line. >> I have not brought up how to load while one instance is running. >> I am depeding on clustering and be able to use one of the clusters to >> shut down and load. So that is similar to your suggestion of using a >> seperate server. This includes a lock on the tenant so the database is >> not being used during the update. >> this of course would not be done by the tenant. but the SAS provider. >> the other things you bring up are beyond the simple focus of the >> mechanism of loading data, currently, but good to keep in mind. >> >> >> ========================= >> BJ Freeman >> http://bjfreeman.elance.com >> Strategic Power Office with Supplier Automation >> <http://www.businessesnetwork.com/automation/viewforum.php?f=93> >> Specialtymarket.com <http://www.specialtymarket.com/> >> >> Systems Integrator-- Glad to Assist >> >> Chat Y! messenger: bjfr33man >> Linkedin >> <http://www.linkedin.com/profile?viewProfile=&key=1237480&locale=en_US&trk=tab_pro> >> >> >> David E Jones sent the following on 4/16/2010 2:21 PM: >>> Thanks Marc, this is a good way of looking at it. If you have files know >>> about tenants then you're really opening a pandora's box and it's much >>> better to have all of the per-tenant settings sourced through the database. >>> >>> I guess we could have a table in the tenant database that goes along with >>> the Tenant entity's table that has information about additional data to >>> load. >>> >>> However, given the general use patterns for multi-tenant stuff wouldn't you >>> want to load the same basic data for each tenant and then let the tenant do >>> the rest, including loading any data files they might want (probably >>> through an upload or referring to another server)? >>> >>> -David >>> >>> >>> On Apr 16, 2010, at 4:15 PM, Marc Morin wrote: >>> >>>> we've deployed a multi-tenant ofbiz system (our own multi-tenant >>>> implementation). Our case is simpler, since it is truly a single >>>> application with multiple customers, each in their own database >>>> (delegator). >>>> >>>> When faced with wanting to read different files for different tenants, >>>> we've generally, moved to storing the per-tenant information in their >>>> database instance. This keeps management of the per-tenant information >>>> separate for the more static "code". >>>> >>>> This has meant, re-factoring the code/screens/forms, etc... putting them >>>> in "content" vs files. >>>> >>>> As for your example of having "seed" data being tenant aware, this appears >>>> to expose a new more complex problem of managing the life cycle of the >>>> tenant (creating, seeding, terminating, evicting...) that needs to be done >>>> to truly make use of any multi-tenant capabilities. >>>> >>>> We're taking the approach of creating "data packages" and allowing tenants >>>> to "subscribe" to them. This then formalizes the management of the "seed" >>>> data, it's life cycle, and ultimately, it's storage. >>>> >>>> Now, if you wanted to have a multi-tenant ofbiz, where each tenant has >>>> 100% flexibility on configuring their entities, services, screens, eca, >>>> .... then I think you'll need to provision a separate app server for >>>> each... >>>> >>>> >>>> >>>> ----- "BJ Freeman" <[email protected]> wrote: >>>> >>>>> rephrase this. >>>>> for SAS purposes there will be many files each tenant that are unique >>>>> to >>>>> that tenant and to be loaded only into that Tenants DB >>>>> this requires entry into the ofbiz-component.xml. >>>>> >>>>> A change in the way the readers select files based on delegator is >>>>> what >>>>> I am suggesting: >>>>> >>>>> so the command line that has readers=seed,ext delegator=Tenant1 >>>>> would look for files in the ofbiz-component.xml >>>>> >>>>> <entity-resource type="data" reader-name="seed-initial" >>>>> loader="main" delegator="Tentant1" >>>>> "location="data/tenant1seedinitialData.xml"/> >>>>> >>>>> so added parm of delegator would further define the data selection. >>>>> if a line did not include the delegator then default would be used. >>>>> The above suggestion seems to follow the model setup for Multitenancy >>>>> support. >>>>> >>>>> >>>>> ======================== >>>>> >>>>> BJ Freeman >>>>> http://bjfreeman.elance.com >>>>> Strategic Power Office with Supplier Automation >>>>> <http://www.businessesnetwork.com/automation/viewforum.php?f=93> >>>>> Specialtymarket.com <http://www.specialtymarket.com/> >>>>> >>>>> Systems Integrator-- Glad to Assist >>>>> >>>>> Chat Y! messenger: bjfr33man >>>>> Linkedin >>>>> <http://www.linkedin.com/profile?viewProfile=&key=1237480&locale=en_US&trk=tab_pro> >>>>> >>>>> >>>>> BJ Freeman sent the following on 4/15/2010 8:43 PM: >>>>>> I am still going through the code trying to figure out how ext for >>>>>> different tenants can be loaded, that is unique to that tenant. >>>>>> one example is loading the productstore with the defaults and the >>>>> theme >>>>>> that has been created for that tenant. >>>>>> or how to configure the emails of a productstore for that tenant. >>>>>> so these get loaded in on that tenants db. >>>>>> >>>>>> ========================= >>>>>> BJ Freeman >>>>>> http://bjfreeman.elance.com >>>>>> Strategic Power Office with Supplier Automation >>>>> <http://www.businessesnetwork.com/automation/viewforum.php?f=93> >>>>>> Specialtymarket.com <http://www.specialtymarket.com/> >>>>>> >>>>>> Systems Integrator-- Glad to Assist >>>>>> >>>>>> Chat Y! messenger: bjfr33man >>>>>> Linkedin >>>>>> >>>>> <http://www.linkedin.com/profile?viewProfile=&key=1237480&locale=en_US&trk=tab_pro> >>>>>> Adrian Crum sent the following on 4/15/2010 6:00 AM: >>>>>>> That would be very helpful! >>>>>>> >>>>>>> -Adrian >>>>>>> >>>>>>> --- On Thu, 4/15/10, Scott Gray <[email protected]> >>>>> wrote: >>>>>>>> From: Scott Gray <[email protected]> >>>>>>>> Subject: Re: Multitenancy support >>>>>>>> To: [email protected] >>>>>>>> Date: Thursday, April 15, 2010, 3:06 AM >>>>>>>> If we want non-demo instructions then >>>>>>>> we'd need to describe how to create some "ext" data with the >>>>>>>> tenant info and then change the first install command to do >>>>>>>> a readers=seed,ext. >>>>>>>> >>>>>>>> Regards >>>>>>>> Scott >>>>>>>> >>>>>>>> On 15/04/2010, at 3:22 AM, Adrian Crum wrote: >>>>>>>> >>>>>>>>> That Wiki page is a work in progress - so there is >>>>>>>> some information missing. It would be best if you followed >>>>>>>> the instructions for loading the multi-tenancy demo data, >>>>>>>> look at how things are set up, and then create your >>>>>>>> multi-tenant seed data based on the demo data. >>>>>>>>> The bottom line is, it isn't working because you >>>>>>>> haven't set up your tenants in the seed data. >>>>>>>>> -Adrian >>>>>>>>> >>>>>>>>> Mickael BRIDE wrote: >>>>>>>>>> Hello, >>>>>>>>>> I followed the documentation on the page >>>>> https://cwiki.apache.org/confluence/display/OFBIZ/Multitenancy+support >>>>>>>> to try to get multitenancy in my ofbiz installation. >>>>>>>>>> But when running the commant : >>>>>>>>>> java -Xmx512m -XX:MaxPermSize=128m -jar ofbiz.jar >>>>>>>> -install >>>>>>>>>> -readers=seed -delegator=default#DEMO1 >>>>>>>>>> I have the error in the end of this mail. >>>>>>>>>> The same command line run fine with "default" >>>>>>>> instead of "default#DEMO1". It seems that entries in >>>>>>>> TenantDemoData.xml are not loaded....? >>>>>>>>>> I am on the trunk latest version of ofbiz (updated >>>>>>>> 2 hours ago) >>>>>>>>>> I am using the default files and conf. >>>>>>>>>> Any idea of the problem? >>>>>>>>>> Thanks in advance >>>>>>>>>> Mickael >>>>>>>>>> 2010-04-14 16:00:38,256 (main) >>>>>>>> [DelegatorFactoryImpl.java:35 :ERROR] >>>>>>>>>> ---- exception report >>>>>>>>>> >>>>>>>> ---------------------------------------------------------- >>>>>>>>>> Error creating delegator >>>>>>>>>> Exception: >>>>>>>> org.ofbiz.entity.GenericEntityException >>>>>>>>>> Message: No Tenant record found for delegator >>>>>>>> [default#DEMO1] with >>>>>>>>>> tenantId [DEMO1] >>>>>>>>>> ---- stack trace >>>>>>>>>> >>>>>>>> --------------------------------------------------------------- >>>>>>>>>> org.ofbiz.entity.GenericEntityException: No Tenant >>>>>>>> record found for >>>>>>>>>> delegator [default#DEMO1] with tenantId [DEMO1] >>>>>>>>>> >>>>> org.ofbiz.entity.GenericDelegator.<init>(GenericDelegator.java:233) >>>>> org.ofbiz.entity.DelegatorFactoryImpl.getInstance(DelegatorFactoryImpl.java:33) >>>>> org.ofbiz.entity.DelegatorFactoryImpl.getInstance(DelegatorFactoryImpl.java:25) >>>>> org.ofbiz.base.util.UtilObject.getObjectFromFactory(UtilObject.java:202) >>>>> org.ofbiz.entity.DelegatorFactory.getDelegator(DelegatorFactory.java:47) >>>>> org.ofbiz.entityext.data.EntityDataLoadContainer.start(EntityDataLoadContainer.java:230) >>>>> org.ofbiz.base.container.ContainerLoader.start(ContainerLoader.java:100) >>>>>>>> org.ofbiz.base.start.Start.startStartLoaders(Start.java:272) >>>>>>>> org.ofbiz.base.start.Start.startServer(Start.java:322) >>>>>>>>>> org.ofbiz.base.start.Start.start(Start.java:326) >>>>>>>>>> org.ofbiz.base.start.Start.main(Start.java:411) >>>>>>>>>> >>>>> -------------------------------------------------------------------------------- >>>>>>>> 2010-04-14 16:00:38,259 (main) >>>>>>>> [ DelegatorFactory.java:49 :ERROR] >>>>>>>>>> ---- exception report >>>>>>>>>> >>>>>>>> ---------------------------------------------------------- >>>>>>>>>> Exception: java.lang.ClassNotFoundException >>>>>>>>>> Message: java.lang.Class >>>>>>>>>> ---- stack trace >>>>>>>>>> >>>>>>>> --------------------------------------------------------------- >>>>>>>>>> java.lang.ClassNotFoundException: java.lang.Class >>>>>>>>>> >>>>> org.ofbiz.base.util.UtilObject.getObjectFromFactory(UtilObject.java:207) >>>>> org.ofbiz.entity.DelegatorFactory.getDelegator(DelegatorFactory.java:47) >>>>> org.ofbiz.entityext.data.EntityDataLoadContainer.start(EntityDataLoadContainer.java:230) >>>>> org.ofbiz.base.container.ContainerLoader.start(ContainerLoader.java:100) >>>>>>>> org.ofbiz.base.start.Start.startStartLoaders(Start.java:272) >>>>>>>> org.ofbiz.base.start.Start.startServer(Start.java:322) >>>>>>>>>> org.ofbiz.base.start.Start.start(Start.java:326) >>>>>>>>>> org.ofbiz.base.start.Start.main(Start.java:411) >>>>>>>>>> >>>>> -------------------------------------------------------------------------------- >>>>>>>> Exception in thread "main" java.lang.NullPointerException >>>>>>>>>> at >>>>>>>>>> >>>>> java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:895) >>>>> >>>>>>>> at >>>>>>>> >>>>> org.ofbiz.entity.DelegatorFactory.getDelegator(DelegatorFactory.java:52) >>>>>>>>>> at >>>>>>>>>> >>>>> org.ofbiz.entityext.data.EntityDataLoadContainer.start(EntityDataLoadContainer.java:230) >>>>> >>>>>>>> at >>>>>>>> >>>>> org.ofbiz.base.container.ContainerLoader.start(ContainerLoader.java:100) >>>>>>>>>> at >>>>>>>> org.ofbiz.base.start.Start.startStartLoaders(Start.java:272) >>>>>>>>>> at >>>>>>>> org.ofbiz.base.start.Start.startServer(Start.java:322) >>>>>>>>>> at >>>>>>>> org.ofbiz.base.start.Start.start(Start.java:326) >>>>>>>>>> at >>>>>>>> org.ofbiz.base.start.Start.main(Start.java:411) >>>>>>>> .base.container.ContainerLoader.start(ContainerLoader.java:100) >>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>> >> > >
