You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomee.apache.org by "chrisc@rmt.com.au" <ch...@rmt.com.au> on 2015/11/10 01:49:58 UTC

NullPointer from PersistenceUnitInfoImpl when running in Java 8

I am getting a NullPointerException from
PersistenceUnitInfoImpl$PersistenceClassFileTransformer.transform() when
running in Java 8.

I have a command line application using openejb-core-4.7.2 and running in
Java 8, so when starting the app it runs using the javaagent
openejb-javaagent.jar.

This app uses JPA, but also has some legacy code that gets jdbc connections
using a BasicDataSource. 
Now whenever it gets a jdbc connection the javaagent seems to be doing some
manipulations of the byte code and a NullPointerException is thrown from
org.apache.openejb.persistence.PersistenceUnitInfoImpl from the method
PersistenceClassFileTransformer.transform at the line that reads 'String
replace = className.replace('/', '.');'. So className appears to be null.

This is the method where the exception comes from
public byte[] transform(ClassLoader classLoader, String className, Class<?>
classBeingRedefined, ProtectionDomain protectionDomain, byte[]
classfileBuffer) throws IllegalClassFormatException {
            String replace = className.replace('/', '.');
            return
PersistenceUnitInfoImpl.isServerClass(replace)?classfileBuffer:this.classTransformer.transform(classLoader,
replace, classBeingRedefined, protectionDomain, classfileBuffer);
        }

When running this same app in Java 7 no exceptions are thrown.

This is the stack trace:

java.lang.NullPointerException
	at
org.apache.openejb.persistence.PersistenceUnitInfoImpl$PersistenceClassFileTransformer.transform(PersistenceUnitInfoImpl.java:358)
	at
org.apache.openejb.persistence.PersistenceBootstrap$Transformer.transform(PersistenceBootstrap.java:429)
	at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
	at
sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428)
	at sun.misc.Unsafe.defineAnonymousClass(Native Method)
	at
java.lang.invoke.InvokerBytecodeGenerator.loadAndInitializeInvokerClass(InvokerBytecodeGenerator.java:284)
	at
java.lang.invoke.InvokerBytecodeGenerator.loadMethod(InvokerBytecodeGenerator.java:276)
	at
java.lang.invoke.InvokerBytecodeGenerator.generateCustomizedCode(InvokerBytecodeGenerator.java:618)
	at java.lang.invoke.LambdaForm.compileToBytecode(LambdaForm.java:654)
	at
java.lang.invoke.DirectMethodHandle.makePreparedLambdaForm(DirectMethodHandle.java:247)
	at
java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:187)
	at
java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:176)
	at java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:83)
	at java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:103)
	at java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:108)
	at java.lang.invoke.LambdaForm$NamedFunction.resolve(LambdaForm.java:1078)
	at
java.lang.invoke.DirectMethodHandle$Lazy.<clinit>(DirectMethodHandle.java:688)
	at
java.lang.invoke.DirectMethodHandle.makePreparedLambdaForm(DirectMethodHandle.java:231)
	at
java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:187)
	at
java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:176)
	at java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:83)
	at
java.lang.invoke.MethodHandles$Lookup.getDirectMethodCommon(MethodHandles.java:1656)
	at
java.lang.invoke.MethodHandles$Lookup.getDirectMethod(MethodHandles.java:1601)
	at java.lang.invoke.MethodHandles$Lookup.findStatic(MethodHandles.java:778)
	at
java.lang.invoke.BoundMethodHandle$Factory.makeCbmhCtor(BoundMethodHandle.java:817)
	at
java.lang.invoke.BoundMethodHandle$Factory.makeCtors(BoundMethodHandle.java:772)
	at
java.lang.invoke.BoundMethodHandle$SpeciesData.initForBootstrap(BoundMethodHandle.java:358)
	at
java.lang.invoke.BoundMethodHandle$SpeciesData.<clinit>(BoundMethodHandle.java:447)
	at java.lang.invoke.BoundMethodHandle.<clinit>(BoundMethodHandle.java:829)
	at java.lang.invoke.LambdaForm.createIdentityForms(LambdaForm.java:1778)
	at java.lang.invoke.LambdaForm.<clinit>(LambdaForm.java:1833)
	at
java.lang.invoke.DirectMethodHandle.makePreparedLambdaForm(DirectMethodHandle.java:222)
	at
java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:187)
	at
java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:176)
	at java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:83)
	at
java.lang.invoke.MethodHandles$Lookup.getDirectMethodCommon(MethodHandles.java:1656)
	at
java.lang.invoke.MethodHandles$Lookup.getDirectMethodNoSecurityManager(MethodHandles.java:1613)
	at
java.lang.invoke.MethodHandles$Lookup.getDirectMethodForConstant(MethodHandles.java:1798)
	at
java.lang.invoke.MethodHandles$Lookup.linkMethodHandleConstant(MethodHandles.java:1747)
	at
java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(MethodHandleNatives.java:477)
	at
sun.security.util.AbstractAlgorithmConstraints.loadAlgorithmsMap(AbstractAlgorithmConstraints.java:50)
	at
sun.security.util.AbstractAlgorithmConstraints.getAlgorithms(AbstractAlgorithmConstraints.java:79)
	at
sun.security.util.DisabledAlgorithmConstraints.<init>(DisabledAlgorithmConstraints.java:77)
	at
sun.security.ssl.SSLAlgorithmConstraints.<clinit>(SSLAlgorithmConstraints.java:50)
	at sun.security.ssl.ProtocolVersion.<clinit>(ProtocolVersion.java:114)
	at
sun.security.ssl.SSLContextImpl$AbstractSSLContext.<clinit>(SSLContextImpl.java:453)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:264)
	at java.security.Provider$Service.getImplClass(Provider.java:1634)
	at java.security.Provider$Service.newInstance(Provider.java:1592)
	at sun.security.jca.GetInstance.getInstance(GetInstance.java:236)
	at sun.security.jca.GetInstance.getInstance(GetInstance.java:164)
	at javax.net.ssl.SSLContext.getInstance(SSLContext.java:156)
	at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1590)
	at
com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1323)
	at
com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:991)
	at
com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827)
	at
com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
	at
org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
	at
org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
	at
org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
	at
org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
	at
org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
	at
org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)




--
View this message in context: http://tomee-openejb.979440.n4.nabble.com/NullPointer-from-PersistenceUnitInfoImpl-when-running-in-Java-8-tp4676755.html
Sent from the TomEE Dev mailing list archive at Nabble.com.

Re: NullPointer from PersistenceUnitInfoImpl when running in Java 8

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Andy is working getting 7.0.0.M1 out, nothing planned yet for 1.7.3 AFAIK.


Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
<http://www.tomitribe.com>

2015-11-09 16:59 GMT-08:00 chrisc@rmt.com.au <ch...@rmt.com.au>:

> thanks Romain.
>
> When is that scheduled to be released?
>
>
>
> --
> View this message in context:
> http://tomee-openejb.979440.n4.nabble.com/NullPointer-from-PersistenceUnitInfoImpl-when-running-in-Java-8-tp4676755p4676757.html
> Sent from the TomEE Dev mailing list archive at Nabble.com.
>

Re: NullPointer from PersistenceUnitInfoImpl when running in Java 8

Posted by "chrisc@rmt.com.au" <ch...@rmt.com.au>.
thanks Romain.

When is that scheduled to be released?



--
View this message in context: http://tomee-openejb.979440.n4.nabble.com/NullPointer-from-PersistenceUnitInfoImpl-when-running-in-Java-8-tp4676755p4676757.html
Sent from the TomEE Dev mailing list archive at Nabble.com.

Re: NullPointer from PersistenceUnitInfoImpl when running in Java 8

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Hi

good catch, has been fixed upstream:
https://github.com/apache/tomee/blob/master/container/openejb-core/src/main/java/org/apache/openejb/persistence/PersistenceUnitInfoImpl.java#L363


Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
<http://www.tomitribe.com>

2015-11-09 16:49 GMT-08:00 chrisc@rmt.com.au <ch...@rmt.com.au>:

> I am getting a NullPointerException from
> PersistenceUnitInfoImpl$PersistenceClassFileTransformer.transform() when
> running in Java 8.
>
> I have a command line application using openejb-core-4.7.2 and running in
> Java 8, so when starting the app it runs using the javaagent
> openejb-javaagent.jar.
>
> This app uses JPA, but also has some legacy code that gets jdbc connections
> using a BasicDataSource.
> Now whenever it gets a jdbc connection the javaagent seems to be doing some
> manipulations of the byte code and a NullPointerException is thrown from
> org.apache.openejb.persistence.PersistenceUnitInfoImpl from the method
> PersistenceClassFileTransformer.transform at the line that reads 'String
> replace = className.replace('/', '.');'. So className appears to be null.
>
> This is the method where the exception comes from
> public byte[] transform(ClassLoader classLoader, String className, Class<?>
> classBeingRedefined, ProtectionDomain protectionDomain, byte[]
> classfileBuffer) throws IllegalClassFormatException {
>             String replace = className.replace('/', '.');
>             return
>
> PersistenceUnitInfoImpl.isServerClass(replace)?classfileBuffer:this.classTransformer.transform(classLoader,
> replace, classBeingRedefined, protectionDomain, classfileBuffer);
>         }
>
> When running this same app in Java 7 no exceptions are thrown.
>
> This is the stack trace:
>
> java.lang.NullPointerException
>         at
>
> org.apache.openejb.persistence.PersistenceUnitInfoImpl$PersistenceClassFileTransformer.transform(PersistenceUnitInfoImpl.java:358)
>         at
>
> org.apache.openejb.persistence.PersistenceBootstrap$Transformer.transform(PersistenceBootstrap.java:429)
>         at
> sun.instrument.TransformerManager.transform(TransformerManager.java:188)
>         at
> sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428)
>         at sun.misc.Unsafe.defineAnonymousClass(Native Method)
>         at
>
> java.lang.invoke.InvokerBytecodeGenerator.loadAndInitializeInvokerClass(InvokerBytecodeGenerator.java:284)
>         at
>
> java.lang.invoke.InvokerBytecodeGenerator.loadMethod(InvokerBytecodeGenerator.java:276)
>         at
>
> java.lang.invoke.InvokerBytecodeGenerator.generateCustomizedCode(InvokerBytecodeGenerator.java:618)
>         at
> java.lang.invoke.LambdaForm.compileToBytecode(LambdaForm.java:654)
>         at
>
> java.lang.invoke.DirectMethodHandle.makePreparedLambdaForm(DirectMethodHandle.java:247)
>         at
>
> java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:187)
>         at
>
> java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:176)
>         at
> java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:83)
>         at
> java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:103)
>         at
> java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:108)
>         at
> java.lang.invoke.LambdaForm$NamedFunction.resolve(LambdaForm.java:1078)
>         at
>
> java.lang.invoke.DirectMethodHandle$Lazy.<clinit>(DirectMethodHandle.java:688)
>         at
>
> java.lang.invoke.DirectMethodHandle.makePreparedLambdaForm(DirectMethodHandle.java:231)
>         at
>
> java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:187)
>         at
>
> java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:176)
>         at
> java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:83)
>         at
>
> java.lang.invoke.MethodHandles$Lookup.getDirectMethodCommon(MethodHandles.java:1656)
>         at
>
> java.lang.invoke.MethodHandles$Lookup.getDirectMethod(MethodHandles.java:1601)
>         at
> java.lang.invoke.MethodHandles$Lookup.findStatic(MethodHandles.java:778)
>         at
>
> java.lang.invoke.BoundMethodHandle$Factory.makeCbmhCtor(BoundMethodHandle.java:817)
>         at
>
> java.lang.invoke.BoundMethodHandle$Factory.makeCtors(BoundMethodHandle.java:772)
>         at
>
> java.lang.invoke.BoundMethodHandle$SpeciesData.initForBootstrap(BoundMethodHandle.java:358)
>         at
>
> java.lang.invoke.BoundMethodHandle$SpeciesData.<clinit>(BoundMethodHandle.java:447)
>         at
> java.lang.invoke.BoundMethodHandle.<clinit>(BoundMethodHandle.java:829)
>         at
> java.lang.invoke.LambdaForm.createIdentityForms(LambdaForm.java:1778)
>         at java.lang.invoke.LambdaForm.<clinit>(LambdaForm.java:1833)
>         at
>
> java.lang.invoke.DirectMethodHandle.makePreparedLambdaForm(DirectMethodHandle.java:222)
>         at
>
> java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:187)
>         at
>
> java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:176)
>         at
> java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:83)
>         at
>
> java.lang.invoke.MethodHandles$Lookup.getDirectMethodCommon(MethodHandles.java:1656)
>         at
>
> java.lang.invoke.MethodHandles$Lookup.getDirectMethodNoSecurityManager(MethodHandles.java:1613)
>         at
>
> java.lang.invoke.MethodHandles$Lookup.getDirectMethodForConstant(MethodHandles.java:1798)
>         at
>
> java.lang.invoke.MethodHandles$Lookup.linkMethodHandleConstant(MethodHandles.java:1747)
>         at
>
> java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(MethodHandleNatives.java:477)
>         at
>
> sun.security.util.AbstractAlgorithmConstraints.loadAlgorithmsMap(AbstractAlgorithmConstraints.java:50)
>         at
>
> sun.security.util.AbstractAlgorithmConstraints.getAlgorithms(AbstractAlgorithmConstraints.java:79)
>         at
>
> sun.security.util.DisabledAlgorithmConstraints.<init>(DisabledAlgorithmConstraints.java:77)
>         at
>
> sun.security.ssl.SSLAlgorithmConstraints.<clinit>(SSLAlgorithmConstraints.java:50)
>         at
> sun.security.ssl.ProtocolVersion.<clinit>(ProtocolVersion.java:114)
>         at
>
> sun.security.ssl.SSLContextImpl$AbstractSSLContext.<clinit>(SSLContextImpl.java:453)
>         at java.lang.Class.forName0(Native Method)
>         at java.lang.Class.forName(Class.java:264)
>         at java.security.Provider$Service.getImplClass(Provider.java:1634)
>         at java.security.Provider$Service.newInstance(Provider.java:1592)
>         at sun.security.jca.GetInstance.getInstance(GetInstance.java:236)
>         at sun.security.jca.GetInstance.getInstance(GetInstance.java:164)
>         at javax.net.ssl.SSLContext.getInstance(SSLContext.java:156)
>         at
> com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1590)
>         at
>
> com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1323)
>         at
>
> com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:991)
>         at
>
> com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827)
>         at
>
> com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
>         at
>
> org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
>         at
>
> org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
>         at
>
> org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
>         at
>
> org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
>         at
>
> org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
>         at
>
> org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
>
>
>
>
> --
> View this message in context:
> http://tomee-openejb.979440.n4.nabble.com/NullPointer-from-PersistenceUnitInfoImpl-when-running-in-Java-8-tp4676755.html
> Sent from the TomEE Dev mailing list archive at Nabble.com.
>