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










Reply via email to