| Hi, 
 I would like to reopen a discussion about server platform auto
    detection. We continue to receive complains from our customers about
    breaking the backwards compatibility.
 
 I briefly repeat what the problem is for people included in CC.
    After adding server platform auto detection in early Jan 2015 the
    default behavior of EclipseLink is changed. If in persistence.xml a
    target platform and transaction type are not defined in some cases
    "Cannot use an EntityTransaction while using JTA" exception is
    thrown. It happens because WLS platform gets auto detected and
    transaction type is switched to JTA. Which is not the desired
    behaviour in some cases. See the table below:
 
 Previous Version           
      New Version
 
 Server Platform:         NoServerPlatform           
      Weblogic_XX_Platform
 Transaction type:        ResourceLocal              
       JTA
 
 It often happens when Spring is used. Spring manages transactions
    itself and requires "local resource" transaction mode.
 
 As Rick mentioned, the spec says that if the transaction-type isn't
    specified in an EE container it defaults to JTA. It also mentions
    that if a persistence unit is using RESOURCE_LOCAL that a
    non-jta-datasource will be provided. This is correct, but the spec
    doesn't say that server platform has to be detected automatically.
    It just says that if a JEE platform is set in persistence.xml then
    use JTA transaction type by default.
 
 There are some workarounds:
 
 1. Specify NoServerPlatform in persistence.xml: <property
    name="eclipselink.target-server" value="None"/>. It will switch
    EL to the same behaviour as it was before the server platform
    detection change.
 
 2. Specify <persistence-unit name="xxx"
    transaction-type="RESOURCE_LOCAL"> in persistence.xml. In this
    case server platform will be WLS but resource local transactions are
    used. I am not sure that it will work though.
 
 3. In theory, configuring Spring to use platform specific JTA
    transaction manager should also fix the problem.
 
 All workarounds require some changes in customer's applications. I
    think it would be unacceptable to customers whose applications are
    broken after introducing the new version of EL.
 
 
 I see the following solutions to this
      problem:
 1. Rollback server platform auto detection code. I suppose that
      breaking backwards compatibility is a good reason for that.
 
 2. Disable server platform auto detection for WLS only. It will
      fix it for WLS only.
 
 3. Add a boolean system property eclipselink.server.autodetection
      which switches EL server platform auto detection. By default the
      value is false. It will make this feature 'experimental'. It will
      be up to customers enable it or not.
 
 Please review the solutions above or offer your solution. We need
      to decide how to deal with this problem before EL 2.6.0. release.
 
 Thanks!
 
 Best regards,
 Dmitry Kornilov
 
 
 On 30.1.2015 18:41, Dmitry Kornilov wrote:
 
 
      
      In this particular case yes.
 
 On 30.1.2015 18:35, Rick Curtis
        wrote:
 
        Dmitry -
           
 > setting server platform
              to None is a right solution in this case. I don't entirely
                follow.... are you saying that the platform detection
                code is doing the right thing and the application needs
                to configure the target-server to None?   
 Thanks, Rick 
 
 
 _______________________________________________
eclipselink-dev mailing list
eclipselink-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/eclipselink-dev 
 |