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.
>