Yes It could work... with ManagedService. But ManagedEMF should be changed in non static class and should implement ManagedService interface. Right?
Il 05/apr/2015 10:44, "Christian Schneider" <ch...@die-schneider.net> ha scritto: > forgot to send to list too > > > -------- Weitergeleitete Nachricht -------- > Betreff: Re: Prototype for a new aries jpa impl > Datum: Sun, 05 Apr 2015 10:42:30 +0200 > Von: Christian Schneider <ch...@die-schneider.net> > Antwort an: ch...@die-schneider.net > An: Giuseppe Gerla <giuseppe.ge...@gmail.com> > > > > I propose to use config admin with one config per punit instead of a plain > file. The reason is that you probably will want to deploy the config > together with your application. > This would be a lot more difficult if there is one config for all > persistence units and your deployment has to patch the config file. > > So I propose you use config admin with a ManagedService. The pid could > look like a ManagedServiceFactory but probably it would be better to use a > real MSF. > > So for each persistence unit you could publish a ManagedService with a pid > of org.apache.aries.jpa.<persistence-unit>.cfg. The EMF creation would > take place in the updated method of the ManagedService. When there is a > null config it would take the default properties if a config is given it > would take it. > > Would that work? > > Christian > > > Am 05.04.2015 um 09:37 schrieb Giuseppe Gerla: > >> Ok. >> I'm starting to implement.... using this scenario. Unit name is >> "propertiesUnit". In the configuration file I search for: >> >> propertiesUnit.<property-name> = <property-value> >> >> So we will have one file for all persistence units. >> I want create e private method in the ManagedEMF class to retrieve all >> properties and use to create the EMF. >> Wdyt? >> >> >> >> Regards >> Giuseppe >> >> 2015-04-05 8:46 GMT+02:00 Christian Schneider <ch...@die-schneider.net >> <mailto:ch...@die-schneider.net>>: >> >> Hi Guiseppe, >> >> would be great if you can tackle that. >> >> Christian >> >> >> Am 04.04.2015 um 14:23 schrieb Giuseppe Gerla: >> >> Hi Christian >> Great idea. >> I understood the problem and yesterday I was thinking about a >> possible >> solution like yours. >> I'm thinking to use config admin in the parser of >> persistence.xml so to be >> able to use parameter value in the properties, but your >> solution seems more >> complete. >> >> If you want I can help you to develop this functionality. >> >> >> Thanks >> Regards >> Giuseppe >> >> 2015-04-04 10:24 GMT+02:00 Christian Schneider >> <ch...@die-schneider.net <mailto:ch...@die-schneider.net>>: >> >> Hi Guiseppe, >> >> I see your point. The problem though is that the >> EntityManagerFactory is >> created when the persistence.xml is read. At that point the >> EntityManagerFactory service is created. >> So the aries jpa xml or @PersistenceContext properties can >> only influence >> the creation of the EntityManager. So for you case this >> would not work. >> >> My proposal to use config admin would work though. Imagine >> we have a >> ManagedServiceFactory that reacts on configs like >> etc/org.apache.aries.jpa-*.cfg. In the config you set the >> persistence >> unit name and the properties you want to override. These >> properties would >> be read when creating the EntityManagerFactory. So this >> would allow you to >> even override the persistenceProvider. >> >> Christian >> >> >> Am 03.04.2015 um 09:44 schrieb Giuseppe Gerla: >> >> Hi Christian >> I understand your point of view, but I not agree. >> JPA define API, so it is an abstraction. My >> application MUST be >> independent >> from the implementation. >> Think about this. I have a software based on >> postgreSQL that use OpenJPA. >> For some reason a new customer buy my software with >> the constraint that it >> has to use MySQL. In this case, using your approach I >> have to use OpenJPA >> with MySQL, but this combination is not performing. >> From my experience, >> the >> best JPA implementation for mysql is Eclipselink. >> Using my approach I have >> the chance to deploy my software on mysql using >> eclipse without change the >> code!!! >> Not only. Using my approach, without change the code, >> I can do several >> test >> in the real environment to select the best combination >> between DBMS and >> JPA >> implementation from performance point of view. >> However, I have to say that write jpa query (using >> criteria builder) >> independent from the JPA implementation and from DBMS >> is a bit complex. >> >> I think that my use case is not so common, but I have >> this need and using >> Spring ORM can satisfy it. >> This is because I open the ARIES-1295 issue and open a >> pull request to fix >> it. >> >> >> Regards >> Giuseppe >> >> >> 2015-04-03 1:03 GMT+02:00 Christian Schneider >> <ch...@die-schneider.net >> <mailto:ch...@die-schneider.net>>: >> >> Why should that make sense? Changing the persistence >> framework is much >> >> more than the schema generation and other properties. >> They all have slight differences when you create >> real applications. >> Exchanging the JPA impl on the fly is not feasible >> and I can not imagine >> a >> use case where it is necessary. >> >> Also the ddl generation is normally not working >> once you create bigger >> applications. The reason is that you want to >> manage the schema and >> provide >> a clearly defined migration of the schema when you >> deploy. I have seen >> people use liquibase for that case with good >> success. For my examples I >> of >> course use the schema generation but that is not >> how people do it in >> bigger >> projects. >> >> So my assumption is that you probably will not >> really need properties >> where you inject the EntityManager. What might >> make sense though is to >> for >> example provide a way to set properties on the >> persistence unit level >> using >> config admin. That should be easy to do and would >> even help with your use >> case .. even if I doubt it is realistic. >> >> Christian >> >> >> Am 02.04.2015 um 23:13 schrieb Giuseppe Gerla: >> >> Hi Christian >> >> thanks for explanation. I hope to make some >> tests during next week-end. >> >> About properties, I'd like to have a >> persistence.xml without reference >> to >> JPA implementation, only classes list. >> Implementation should be changed >> without re-compile the bundle. >> So for example if I have a property to define >> the schema creation in the >> persistence.xml like >> >> <property name="hibernate.hbm2ddl.auto" >> value="create-drop"/> >> >> and replace hibernate with eclipselink, I have >> to replace the >> persistence.xml with >> >> <property name="eclipselink.ddl-generation" >> value="drop-and-create-tables"/> >> >> and I have to deploy a new version of my bundle. >> Using blueprint and hot-configuration of Karaf >> it could be possible to >> change the property using a configuration file. >> >> Regards >> Giuseppe >> >> >> 2015-04-02 21:26 GMT+02:00 Christian Schneider >> <ch...@die-schneider.net >> <mailto:ch...@die-schneider.net> >> >> : >> >> Hi Giuseppe, >> >> the main thing missing is the more >> advanced transaction handling. >> Currently for blueprint the transaction >> starts at the outermost place >> where an EntityManager or EmSupplier is >> injected. >> So it is as if you would use a >> @Transactional with Required type on >> each >> such class. >> >> Apart from that you should already be able >> to write jpa applications >> with >> the current code. >> >> Currently only the persistence.xml is >> regarded for creating the >> EntityManagerFactory. While you can add >> properties to the >> @PersistenceContext annotation they are >> not used. >> Honestly I do not understand anyway how >> you would handle such >> properties. >> You could have different properties at >> every @PersistenceContext for >> the >> same unit name. As we are only creating >> the EntityManager at the >> outermost >> call the other properties can not be >> applied. Can you explain what use >> case >> you have in mind for the properties? >> >> Christian >> >> >> Am 02.04.2015 um 18:48 schrieb Giuseppe Gerla: >> >> Hi Christian >> >> I would be very interested to try the >> new prototype, but I have few >> time. >> So before I start, I would like to ask >> you: >> 1. you say that the current code is >> not yet complete. What is missing? >> What >> functionalities I will not test? >> 2. Is it possible or it will be >> possible to set some properties to the >> EMF? >> (something like jpa:map functionality. See >> https://issues.apache.org/ >> jira/browse/ARIES-1295 >> >> Thanks for your work >> Regards >> Giuseppe >> >> >> 2015-04-02 15:41 GMT+02:00 Christian >> Schneider < >> ch...@die-schneider.net >> <mailto:ch...@die-schneider.net> >> >> : >> >> I am experimenting for some time >> with a new way to implement jpa >> support. >> >> You can find the design on this website: >> >> http://liquid-reality.de/ >> display/liquid/New+design+for+aries+jpa >> >> The prototype code is at: >> https://github.com/cschneider/ >> jpa-experiments >> >> The goals for the new design are: >> - Simpler and more robust >> implementation using OSGi service >> dynamics. >> Tracking all dependencies and >> publishing / unpublishing >> EntityManagerFactory when any go away >> - Move some functionality to other >> projects like wrapping XA >> DataSources >> to pax-jdbc. >> - Support for other frameworks >> like declarative services using >> JPATemplate >> and closures >> >> The current code is not yet >> complete but already works for >> blueprint >> and >> DS. >> >> I would be happy about any feedback. >> >> Especially I would be interested >> if with the new approach Quiesce is >> still >> necessary. The code already makes >> sure that the EntityManagerFactory >> is >> nicely cleaned up. EntityManagers >> are only held for the duration of a >> request. So if blueprint Quiesce >> shuts down the requests then I think >> the >> jpa impls should not need to do >> additional work here. I tested to >> update >> all modules at runtime and all >> seems to work nicely. With the current >> aries >> jpa I can not update the >> persistence unit bundles. See >> https://issues.apache.org/ >> jira/browse/ARIES-1270 >> >> Christian >> >> -- >> Christian Schneider >> http://www.liquid-reality.de >> >> Open Source Architect >> http://www.talend.com >> >> >> >> >> >> >> >> > > >