Lob Tests
Updated on January 6, 2010 by sherry.shen@sun.com

Usage: 
appserver-sqe/pe/ejb/ejb30/issue/9539
do "ant all_se" for JavaSE tests
do "ant all"  for JavaEE tests

Initial tests are w.r.t to
https://glassfish.dev.java.net/issues/show_bug.cgi?id=9539
When a serializable field mapped to LOB column is used, and
the serializable field is changed, the state of the entity is not merged
at the end of transaction

@Entity
public class Image implements Serializable {
    private int id;
    private Long  imageAttribute;
    private SerializableNonEntity customAttribute1;

    @Lob
    public SerializableNonEntity getCustomAttribute1() {
        return customAttribute1;
    }

public class SerializableNonEntity implements Serializable {
    Long someValue;

1) To reproduce the issue on v3 b70 promoted.

     [java] [EL Fine]: 2010-01-06
              --UPDATE CMP3_IMAGE SET IMAGEATTRIBUTE = ? WHERE (ID = ?)
              Note: show wrong update
      ....
     [java] after merge, val=1
              Note:  expected val=2.
                        show problem that val is not merged to database with
                        using emf.getCache().evictAll(); after merge.
                        without clearCache, show incorrect val=2 from the 2nd level cache.
     ....
    [java] -    JPA1-Issue9539-J2DB-SE:test1: FAIL     -

2) verify the fix on v3 b72b promoted.
     [java] [EL Fine]: 2010-01-06 --UPDATE CMP3_IMAGE
             SET IMAGEATTRIBUTE = ?, CUSTOMATTRIBUTE1 = ? WHERE (ID = ?)
     .....
     [java] after merge, val=2
     .....
     [java] -    JPA1-Issue9539-J2DB-SE:test1: PASS     -


Reference:
1) JavaEE 6
http://java.sun.com/javaee/6/docs/api/javax/persistence/Lob.html
Lob specifies that a persistent property or field should be persisted as a large object to a database-supported large object type.  Portable applications should use the Lob annotation when mapping to a database Lob type.

2) Test case in
https://glassfish.dev.java.net/issues/show_bug.cgi?id=9539
https://bugs.eclipse.org/bugs/show_bug.cgi?id=295317

3) Dev Unit Tests in
trunk/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa/lob
trunk/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/models/jpa/lob

Test Issue:
1) On v3 b70,  I can't reproduce the problem with JavaEE tests.
From either em.flush() or commit by CMT, I saw correct update.
[#|2010-01-06T16:39:36.778-0800|FINE|glassfish|org.eclipse.persistence.session.file:
/space/test1/v3/glassfish/domains/domain1/applications/ejb30-issue2392App/lib/
ejb30-issue2392-ent.jar-issue.sql|_ThreadID=27;_ThreadName=Thread-1;ClassName=null;
MethodName=null;|UPDATE CMP3_IMAGE
SET IMAGEATTRIBUTE = ?, CUSTOMATTRIBUTE1 = ? WHERE (ID = ?)
        bind => [21, [B@1f6efd2, 5001]|#]

Comments by Mitesh:
IIRC, the issue only occurs when weaving is turned off. Try turning off weaving in your JavaEE case or execute in JavaSE without running the agent.

In JavaSE tests, I can reproduce the problem on v3 b70 with using agent,
e.g. build.xml has
<jvmarg value="-javaagent:${env.S1AS_HOME}/modules/org.eclipse.persistence.core.jar"/> 
In JavaEE tests, I still failed to reproduce the issue with using
 <property name="eclipselink.weaving" value="false"/>
in descriptor/persistence.xml_ee

1) On v3 b74b, se tests work with ant1.6.5, but has error with ant1.7.1
     [java] INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
     [java] [EL Info]: 2010-01-06 15:26:59.451--ServerSession(10168913)--Thread(Thread[main,5,main])--EclipseLink, version: Eclipse Persistence Services - 2.0.0.v20091127-r5931
     [java] Jan 6, 2010 3:26:59 PM oracle.jdbc.driver.OracleDriver registerMBeans
     [java] SEVERE: Error while registering Oracle JDBC Diagnosability MBean.
     [java] java.security.AccessControlException: access denied (javax.management.MBeanTrustPermission register)
     [java]     at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
     [java]     at java.lang.SecurityManager.checkPermission(SecurityManager.java:568)
     [java]     at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.checkMBeanTrustPermission(DefaultMBeanServerInterceptor.java:1824)
     [java]     at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:310)
     [java]     at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:482)
     [java]     at oracle.jdbc.driver.OracleDriver.registerMBeans(OracleDriver.java:345)
     [java]     at oracle.jdbc.driver.OracleDriver$1.run(OracleDriver.java:197)
     [java]     at java.security.AccessController.doPrivileged(Native Method)
     [java]     at oracle.jdbc.driver.OracleDriver.<clinit>(OracleDriver.java:193)
     [java]     at java.lang.Class.forName0(Native Method)
     [java]     at java.lang.Class.forName(Class.java:247)
     [java]     at sun.misc.Service$LazyIterator.next(Service.java:271)
     [java]     at java.sql.DriverService.run(DriverManager.java:664)
     [java]     at java.security.AccessController.doPrivileged(Native Method)
     [java]     at java.sql.DriverManager.loadInitialDrivers(DriverManager.java:506)
     [java]     at java.sql.DriverManager.initialize(DriverManager.java:612)
     [java]     at java.sql.DriverManager.registerDriver(DriverManager.java:281)
     [java]     at org.apache.derby.jdbc.ClientDriver.<clinit>(Unknown Source)
     [java]     at java.lang.Class.forName0(Native Method)
     [java]     at java.lang.Class.forName(Class.java:247)
     [java]     at org.eclipse.persistence.internal.security.PrivilegedAccessHelper.getClassForName(PrivilegedAccessHelper.java:88)
     [java]     at org.eclipse.persistence.sessions.DefaultConnector.loadDriverClass(DefaultConnector.java:253)
     [java]     at org.eclipse.persistence.sessions.DefaultConnector.connect(DefaultConnector.java:85)
     [java]     at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
     [java]     at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:584)
     [java]     at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:228)
     [java]     at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:368)
     [java]     at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:151)
     [java]     at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:207)
     [java]     at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:195)
     [java]     at ejb30.issue.TestClient.test1(TestClient.java:26)
     [java]     at ejb30.issue.TestClient.main(TestClient.java:81)
     [java]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     [java]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
     [java]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
     [java]     at java.lang.reflect.Method.invoke(Method.java:597)
     [java]     at org.apache.tools.ant.taskdefs.ExecuteJava.run(ExecuteJava.java:217)
     [java]     at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:152)
     [java]     at org.apache.tools.ant.taskdefs.Java.run(Java.java:764)
     [java]     at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:218)
     [java]     at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:132)
     [java]     at org.apache.tools.ant.taskdefs.Java.execute(Java.java:105)
     [java]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
     [java]     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
     [java]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
     [java]     at java.lang.reflect.Method.invoke(Method.java:597)
     [java]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
     [java]     at org.apache.tools.ant.Task.perform(Task.java:348)
     [java]     at org.apache.tools.ant.Target.execute(Target.java:357)
     [java]     at org.apache.tools.ant.Target.performTasks(Target.java:385)
     [java]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
     [java]     at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
     [java]     at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
     [java]     at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
     [java]     at org.apache.tools.ant.Main.runBuild(Main.java:758)
     [java]     at org.apache.tools.ant.Main.startAnt(Main.java:217)
     [java]     at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
     [java]     at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
     [java] [EL Fine]: 2010-01-06 15:27:00.296--Thread(Thread[main,5,main])--Detected Vendor platform: org.eclipse.persistence.platform.database.JavaDBPlatform
     [java] [EL Config]: 2010-01-06 15:27:00.382--ServerSession(10168913)--Connection(18686054)--Thread(Thread[main,5,main])--connecting(DatabaseLogin(