Hi Tom 
     
    The following code works for me: 
    I can get the program to work without PersistenceProvider. 
     
        DatabaseLogin login = new DatabaseLogin(); 
            ... 
            serverSession = new ServerSession(login); 
         
           
        serverSession.setProperty(PersistenceUnitProperties.TARGET_DATABASE,
        ...); 
           
        serverSession.setProperty(PersistenceUnitProperties.LOGGING_LEVEL,
        SessionLog.FINEST_LABEL); 
           
        serverSession.setProperty(PersistenceUnitProperties.LOGGING_LOGGER,
        CustomLogger.class.getName()); 
            serverSession.setProperty(PersistenceUnitProperties.WEAVING,
        "true"); 
           
        serverSession.setProperty(PersistenceUnitProperties.WEAVING_FETCHGROUPS,
        "true"); 
           
        serverSession.setProperty(PersistenceUnitProperties.TARGET_SERVER,
        TargetServer.None); 
           
        serverSession.setProperty(PersistenceUnitProperties.CLASSLOADER,
        CustomLogger.class.getClassLoader()); 
         
            serverSession.login(); 
         
            emf = JpaHelper.createEntityManagerFactory(serverSession); 
            dynamicHelper = new JPADynamicHelper(emf); 
     
    I do see the logs on the standard output during initialization. 
    But after login, I do not see any logs being done by my
    CustomLogger. 
     
    Any idea how to fix this? 
     
    Thanks 
    Rohit 
     
    On 5/31/2011 8:21 PM, Tom Ware wrote:
    Hi
      Rohit,
       
       
        The implementation of createEntityManagerFactory in the
      javax.persistence.Persistence class simply calls
      createEntityManagerFactory on each PersistenceProvider the
      resolver finds until one can provide a factory, so avoiding that
      call is a matter of calling createEntityManagerFactory() on
      EclipseLink's implementation.
       
       
        I am not sure what your requirements are related to multiple
      entity manager factories.   If you don't mind having the same
      backing-session, you should be able to do this by simply calling
      the createEntityManagerFactory method multiple times.  If you want
      different backing sessions, the "eclipselink.session-name"
      property can be specified with a different name each time you call
      that method.
       
       
        If you do not want a persistence.xml, you can use our JpaHelper
      class to create an EntityManagerFactory based on a session you
      have previously created. The key is that you need a session. (I am
      not really clear what your requirements are in this regard)
       
       
        EclipseLink also supports providing an alternate persistence.xml
      location and filename.  You can provide this using the
      "eclipselink.persistencexml" property passed in as part of the map
      argument to createEntityManagerFactory.
       
       
      -Tom
       
       
      Rohit Banga wrote:
       
        Hi Tom
         
         
        I tried running my code with the default PersistenceProvider
        implementation. But my usecase requires multiple
        EntityManagerFactory's to be instantiated. If in the
        PersistenceProviderResolverHolder I specify
         
        new PersistenceProvider() in place of new
        MyPersistenceProvider() then I cannot specify the name of the
        PersistenceUnit which is not able to located the specific
        Persistence Unit.
         
         
            emf =
        Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME,
         
                properties);
         
            dynamicHelper = new JPADynamicHelper(emf);
         
            serverSession = (ServerSession)
        JpaHelper.getServerSession(emf);
         
         
        Can I somehow do away with the PersistenceProviderResolverHolder
        while still using the default PersistenceProvider? I want to
        avoid using a persistence.xml but if that is the recommended way
        I will use that.
         
         
        Thanks
         
        Rohit
         
         
        On 5/31/2011 7:06 PM, Tom Ware wrote:
         
        Hi Rohit,
           
           
            I think you are only the 2nd person we have heard from on
          this group that was considering implementing their own
          provider.  As a result, we have not put alot of effort into
          providing that kind of example.
           
           
            There is quite alot of work done in our PersistenceProvider
          code.  If possible, it would likely be considerably easier to
          leverage that code.  What do you need to customize?
           
           
          -Tom
           
           
          Rohit Banga wrote:
           
            Hi Tom
             
             
            Thanks for pointing out the insufficiency of the code.
             
            Since I am not doing any customizations should I consider
            using org.eclipse.persistence.jpa.PersistenceProvider. Will
            that be a reasonable substitute?
             
            Are there any examples / documentation available for
            creating Custom Persistence Providers. Most of the
            documentation I could find is about persistence.xml.
             
             
            Thanks
             
            Rohit
             
             
            On 5/31/2011 6:40 PM, Tom Ware wrote:
             
            Hi Rohit,
               
               
                To be honest, I am surprised such a sparse
              implementation of PersistenceProvider with such a sparsely
              populated instance of SEPersistenceUnitInfo works.  If you
              are implementing your own persistence provider you will
              definitely have to do more work with things like the
              classloader than the typical user.  As an initial step, it
              is probably a good idea to take a look at every property
              of PersistenceUnitInfo and make sure you set it correctly.
               
               
              -Tom
               
               
              Rohit Banga wrote:
               
                Hi Tom
                 
                 
                Class.forName() does not throw the same exception.
                 
                 
                I figured out another way to ensure that the Class
                Loader is picked up correctly.
                 
                 
                      SEPersistenceUnitInfo puInfo = new
                SEPersistenceUnitInfo();
                 
                     
                puInfo.setClassLoader(MyLogger.class.getClassLoader());
                 
                 
                 
                EntityManagerSetupImpl.predeploy() contains the
                following line to merge the properties:
                 
                 
                            Map predeployProperties =
                mergeMaps(extendedProperties,
                persistenceUnitInfo.getProperties());
                 
                 
                 
                The properties member variable of SEPersistenceUnitInfo
                and the actual member variables like classLoader are not
                in sync with each other.
                 
                Though the setClassLoader method registers the class
                loader a call to setProperties() on the
                SEPersistenceUnitInfo does not populate the classLoader
                member variable.
                 
                As a result the realClassLoader field in
                EntityManagerSetupImpl.predeploy() is null.
                 
                 
                     
                puInfo.setClassLoader(MyLogger.class.getClassLoader());
                 
                 
                I am not sure whether my implementation of
                PersistenceProvider is correct or not. Can you please
                see if I am missing something else in
                MyPersistenceProvider code I sent earlier?
                 
                 
                Thanks
                 
                Rohit
                 
                 
                On 5/30/2011 9:19 PM, Tom Ware wrote:
                 
                My best guess about your logger
                  is that the string you are passing in isn't formatted
                  correctly (likely due to the fact that it is an inner
                  class).  To debug:
                   
                   
                  - try using a non-inner class to see if you're getting
                  the right loader
                   
                  - Ensure you can do a Class.forName() using that
                  string to see if the string is correct
                   
                   
                  -Tom
                   
                   
                  Rohit Banga wrote:
                   
                    Hi Tom
                     
                     
                    Yes that was a slip in my test code. Sorry about
                    that. So the properties are inherited by default.
                     
                     
                    Other than that instead of using SessionCustomizer I
                    am planning to use "eclipselink.logging.logger" to
                    configure my CustomLogger. But I am getting Class
                    not found exceptions. The CustomLogger is a public
                    static class nested inside the main class. Any ideas
                    what could be causing this? I don't know what to
                    specify in the class loader property. I tried
                    setting it  to
                    System.getProperty("|java.system.class.loader|").
                    does not work.
                     
                     
                    On 5/30/2011 8:47 PM, Tom Ware wrote:
                     
                    Hi Rohit,
                       
                       
                        The only call I see to setLogLevel in your
                      example is on line 73.  It sets the log level on
                      the clientSession.  Am I missing something?
                       
                       
                        A clientSession will have the same logger as the
                      server session that created it, so any logging
                      settings should be the same between the sessions.
                       
                       
                        SessionCustomizers don't really make sense on
                      ClientSession since the things you are likely to
                      set in them are all handled by the server session.
                       
                       
                        Is there some other setting that is causing you
                      problems?
                       
                       
                      -Tom
                       
                       
                      Rohit Banga wrote:
                       
                        Hi All
                         
                         
                        I have a small question. I have attached a
                        sample program to make it easy to see the
                        problem.
                         
                         
                        I have set the LogLevel property on the
                        ServerSesssion. However if I do not explicitly
                        set the LogLevel property on the clientSession,
                        the logs for the query execution are not
                        available on the console. I want a way such that
                        any property specified on the server session,
                        say SessionCustomizer, Log Level etc. is also
                        available on the client session automatically.
                        Can anyone please tell me how to do that using
                        the sample code provided?
                         
                         
                        --  
                        Thanks and Regards
                         
                        Rohit Banga
                         
                        Member Technical Staff
                         
                        Oracle Server Technologies
                         
                         
                         
                        ------------------------------------------------------------------------
                         
                         
                        _______________________________________________
                         
                        eclipselink-users mailing list
                         
                        eclipselink-users@xxxxxxxxxxx
                         
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
                         
                       
                      _______________________________________________
                       
                      eclipselink-users mailing list
                       
                      eclipselink-users@xxxxxxxxxxx
                       
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
                       
                     
                     
                    --  
                    Thanks and Regards
                     
                    Rohit Banga
                     
                    Member Technical Staff
                     
                    Oracle Server Technologies
                     
                   
                 
                 
                --  
                Thanks and Regards
                 
                Rohit Banga
                 
                Member Technical Staff
                 
                Oracle Server Technologies
                 
               
             
             
            --  
            Thanks and Regards
             
            Rohit Banga
             
            Member Technical Staff
             
            Oracle Server Technologies
             
           
         
         
        --  
        Thanks and Regards
         
        Rohit Banga
         
        Member Technical Staff
         
        Oracle Server Technologies
         
       
     
     
    --  
      Thanks and Regards
       
      Rohit Banga
       
      Member Technical Staff
       
      Oracle Server Technologies
       
     
  
 |