PDA

View Full Version : NPE when weaving in glassfish



drdozer
Jan 6th, 2011, 04:02 PM
Hi,

I'm trying to deploy my application in glassfish. It's using spring to configure JPA. When the war is sent to the glassfish instance, I get a NPE and glassfish shuts down. My spring config is:



<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<tx:annotation-driven/>
<context:annotation-config/>
<aop:aspectj-autoproxy/>
<!--<context:load-time-weaver aspectj-weaving="on"/>-->
<context:load-time-weaver/>

<aop:config proxy-target-class="true"/>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="dataSource" ref="dataSource"/>
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerD ataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost/twentyeight"/>
<property name="username" value="fred"/>
<property name="password" value="fredspwd"/>
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityMa nagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="persistenceUnitName" value="fredscoolapp"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVen dorAdapter">
<property name="generateDdl" value="true"/>
<property name="showSql" value="true"/>
</bean>
</property>
</bean>

<bean id="fredDao" class="foo.fredDao"/>

</beans>


The persistence.xml is:



persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">

<persistence-unit name="fredscoolapp" transaction-type="RESOURCE_LOCAL"> <!-- fixme: this may need changing -->
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
</properties>
</persistence-unit>
</persistence>


I'm using spring 3.0.1-RELEASE with hibernate 3.5.0-Beta-2, aspectj 1.5.4, glassfish 3.0.1.

The output in the glassfish logs is very verbose. However, the final exception seems to be the underlying cause. It's raising a NPE when attempting to load-time weave when initialising the EntityManagerFactory.

Have I made a noob mistake here? A nearly-identical persistence.xml and springconfig.xml work just fine when using JPA from the command-line, so it's something to do with how classes get weaved within glassfish.

Thanks,

Matthew



[#|2011-01-06T21:52:38.833+0000|SEVERE|glassfish3.0.1|org.asp ectj.weaver.loadtime.Aj|_ThreadID=24;_ThreadName=T hread-1;|org/objectweb/asm/AnnotationWriter
java.lang.NullPointerException
at org.aspectj.weaver.tools.WeavingAdaptor.weaveClass (WeavingAdaptor.java:244)
at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java: 78)
at org.aspectj.weaver.loadtime.ClassPreProcessorAgent Adapter.transform(ClassPreProcessorAgentAdapter.ja va:52)
at org.springframework.context.weaving.AspectJWeaving Enabler$AspectJClassBypassingClassFileTransformer. transform(AspectJWeavingEnabler.java:97)
at org.glassfish.web.loader.WebappClassLoader$3.prepr ocess(WebappClassLoader.java:2685)
at org.glassfish.web.loader.WebappClassLoader.findCla ss(WebappClassLoader.java:916)
at org.glassfish.web.loader.WebappClassLoader.loadCla ss(WebappClassLoader.java:1430)
at java.lang.Class.getDeclaredFields0(Native Method)
at java.lang.Class.privateGetDeclaredFields(Class.jav a:2291)
at java.lang.Class.getDeclaredFields(Class.java:1743)
at org.glassfish.web.loader.WebappClassLoader.clearRe ferences(WebappClassLoader.java:1837)
at org.glassfish.web.loader.WebappClassLoader.stop(We bappClassLoader.java:1680)
at org.glassfish.web.loader.WebappClassLoader.preDest roy(WebappClassLoader.java:1649)
at org.glassfish.deployment.common.DeploymentContextI mpl.preDestroy(DeploymentContextImpl.java:129)
at com.sun.enterprise.v3.server.ApplicationLifecycle$ 1.actOn(ApplicationLifecycle.java:216)
at com.sun.enterprise.v3.server.ApplicationLifecycle. deploy(ApplicationLifecycle.java:342)
at com.sun.enterprise.v3.server.ApplicationLifecycle. deploy(ApplicationLifecycle.java:183)
at org.glassfish.deployment.admin.DeployCommand.execu te(DeployCommand.java:272)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.ex ecute(CommandRunnerImpl.java:305)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCo mmand(CommandRunnerImpl.java:320)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCo mmand(CommandRunnerImpl.java:1176)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.acce ss$900(CommandRunnerImpl.java:83)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$Exec utionContext.execute(CommandRunnerImpl.java:1235)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$Exec utionContext.execute(CommandRunnerImpl.java:1224)
at com.sun.enterprise.v3.admin.AdminAdapter.doCommand (AdminAdapter.java:365)
at com.sun.enterprise.v3.admin.AdminAdapter.service(A dminAdapter.java:204)
at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service( GrizzlyAdapter.java:166)
at com.sun.enterprise.v3.server.HK2Dispatcher.dispath (HK2Dispatcher.java:100)
at com.sun.enterprise.v3.services.impl.ContainerMappe r.service(ContainerMapper.java:245)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(P rocessorTask.java:791)
at com.sun.grizzly.http.ProcessorTask.doProcess(Proce ssorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(Process orTask.java:954)
at com.sun.grizzly.http.DefaultProtocolFilter.execute (DefaultProtocolFilter.java:170)
at com.sun.grizzly.DefaultProtocolChain.executeProtoc olFilter(DefaultProtocolChain.java:135)
at com.sun.grizzly.DefaultProtocolChain.execute(Defau ltProtocolChain.java:102)
at com.sun.grizzly.DefaultProtocolChain.execute(Defau ltProtocolChain.java:88)
at com.sun.grizzly.http.HttpProtocolChain.execute(Htt pProtocolChain.java:76)
at com.sun.grizzly.ProtocolChainContextTask.doCall(Pr otocolChainContextTask.java:53)
at com.sun.grizzly.SelectionKeyContextTask.call(Selec tionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:6 9)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doW ork(AbstractThreadPool.java:330)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run (AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:662)

dr_pompeii
Jan 6th, 2011, 08:04 PM
[#|2011-01-06T21:52:38.833+0000|SEVERE|glassfish3.0.1|
org.aspectj.weaver.loadtime.Aj|_ThreadID=24;_Threa dName=
Thread-1;|org/objectweb/asm/AnnotationWriter

Which jar and version you are using about asm?

drdozer
Jan 7th, 2011, 03:07 AM
I've got asm 3.1, cglib 2.2 and aspectjweaver 1.5.4. The asm jar comes in as a maven dependency on one of the explicit dependencies I have. Here's my lib directory from the war:



annotations-10.0.jar
ant-1.7.0.jar
ant-launcher-1.7.0.jar
antlr-2.7.6.jar
aopalliance-1.0.jar
asm-3.1.jar
aspectjweaver-1.5.4.jar
bsh-2.0b4.jar
cglib-2.2.jar
commons-collections-3.1.jar
commons-fileupload-1.2.1.jar
commons-logging-1.1.1.jar
com.springsource.com.mysql.jdbc-5.1.6.jar
com.springsource.org.apache.commons.logging-1.1.1.jar
dom4j-1.6.1.jar
groovy-all-1.5.6.jar
hibernate-annotations-3.5.0-Beta-2.jar
hibernate-commons-annotations-3.2.0.Beta1.jar
hibernate-core-3.5.0-Beta-2.jar
hibernate-entitymanager-3.5.0-Beta-2.jar
hsqldb-1.8.0.2.jar
javassist-3.9.0.GA.jar
jline-0.9.94.jar
jpa-api-2.0-cr-1.jar
jruby-1.1.2.jar
js-1.7R1.jar
jta-1.1.jar
jtds-1.2.4.jar
jython-2.2.1.jar
portlet-api-2.0.jar
scala-library-2.8.1.jar
servlet-api-2.4.jar
slf4j-api-1.5.8.jar
slf4j-nop-1.4.3.jar
spring-aop-3.0.1.RELEASE.jar
spring-asm-3.0.1.RELEASE.jar
spring-beans-3.0.1.RELEASE.jar
spring-context-3.0.1.RELEASE.jar
spring-core-3.0.1.RELEASE.jar
spring-expression-3.0.1.RELEASE.jar
spring-instrument-3.0.1.RELEASE.jar
spring-jdbc-3.0.1.RELEASE.jar
spring-orm-3.0.1.RELEASE.jar
spring-tx-3.0.1.RELEASE.jar
spring-web-3.0.1.RELEASE.jar
xml-apis-1.0.b2.jar
zcommon-5.0.5.jar
zcommons-el-1.1.0.jar
zk-5.0.5.jar
zul-5.0.5.jar
zweb-5.0.5.jar

dr_pompeii
Jan 9th, 2011, 08:31 AM
Hello drdozer

I see


asm-3.1.jar
spring-asm-3.0.1.RELEASE.jar


1) try removing the asm-3.1.jar and see what happen
2) If from (1) the jar is mandatory, well sharing my experience, I recall had some problems with asm, was a problem of versions, you perhaps should be looking for other version for asm-#.#.jar

Let me know your advance

drdozer
Jan 10th, 2011, 09:06 AM
Hi,

I have bumped the versions of hibernate, spring and the aspectj weaver. The application now gives an error telling me that it is having trouble with some named queries. I have no idea what I altered to get rid of the NPE - perhaps the newer jars had slightly better error checking. Of course, it still isn't actually telling me what is wrong with the queries, but I guess trial and error will get me there.

Thanks for your help.

Matthew