entityManagerFactory resolves to null
jjfraney Sep 5, 2007 9:26 AMI'm using seam 1.2.1GA inside resin 3.0.24. I'm not using EJB. I am using JPA.
Here is segment of log output with the top of the stack trace to the error I am facing:
[08:09:18.736] FINE org.jboss.seam.core.Events Processing event:org.jboss.seam.postCreate.em [08:20:06.868] FINE org.jboss.seam.jsf.SeamVariableResolver resolving name: broadcastEntityManagerFactory [08:20:06.915] FINE org.jboss.seam.contexts.Contexts found in application context: broadcastEntityManagerFactory [08:20:06.915] FINE org.jboss.seam.jsf.SeamVariableResolver Seam component resolved, but unwrap method returned null [08:20:06.925] FINE org.apache.myfaces.el.PropertyResolverImpl Exception while retrieving property; base : com.gc.web.pages.MapSubAccountsHelper1_$$_javassist_0, property : hello [08:20:06.925]java.lang.NullPointerException [08:20:06.925] at org.jboss.seam.core.ManagedPersistenceContext.initEntityManager(ManagedPersistenceContext.java:77) [08:20:06.925] at org.jboss.seam.core.ManagedPersistenceContext.getEntityManager(ManagedPersistenceContext.java:105) [08:20:06.925] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [08:20:06.925] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [08:20:06.925] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [08:20:06.925] at java.lang.reflect.Method.invoke(Method.java:597) [08:20:06.925] at org.jboss.seam.util.Reflections.invoke(Reflections.java:20) [08:20:06.925] at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:123) [08:20:06.925] at org.jboss.seam.Component.callComponentMethod(Component.java:1834)
I am using eclipse to single step through the seam code. I use 'evaluate java expression' feature.
org.jboss.seam.coreExpressions.getValue is the lowest my
public Object getValue() { if ( isFacesContext() ) { return getFacesValueBinding().getValue( FacesContext.getCurrentInstance() ); } else { return getValueExpression().getValue(EL_CONTEXT); } }
Here are eclipse' evaluations of some of the expressions:
getFacesValueBinding().getValue( FacesContext.getCurrentInstance() ) null
getFacesValueBinding() (org.apache.myfaces.el.ValueBindingImpl) #{broadcastEntityManagerFactory}
OK, so I go abit further in my debug session. I get down to:
SeamVariableResolver.resolveVariable(FacesContext, String) line: 57 LastVariableResolverInChain.resolveVariable(FacesContext, String) line: 42 ValueBindingImpl$ELVariableResolver.resolveVariable(String) line: 574 NamedValue.evaluate(VariableResolver, FunctionMapper, Logger) line: 124 ValueBindingImpl.getValue(FacesContext) line: 383 Expressions$1.getValue() line: 69 ManagedPersistenceContext.getEntityManagerFactoryFromJndiOrValueBinding() line: 169
The call to Component.forName() returns non-null:
component Component (id=9135) beanClass Class<T> (org.jboss.seam.core.EntityManagerFactory) (id=2554) ...
The logic for this case is for the resolver to return null?
57 if( component == null) 58 { ... 70 } 71 else 72 { 72 log.debug("Seam component resolved, but unwrap method returned null"); 73 return null; 74 }
Here is my components.xml (seam 1.2.1)
<core:entity-manager-factory name="broadcastEntityManagerFactory" persistence-unit-name="broadcast" /> <core:managed-persistence-context name="em" auto-create="true" entity-manager-factory="#{broadcastEntityManagerFactory}"/>
Here is log output showing the seam groks the components.xml file:
[08:08:09.036] INFO org.jboss.seam.init.Initialization Installing components... [08:08:09.069] INFO org.jboss.seam.Component Component: broadcastEntityManagerFactory, scope: APPLICATION, type: JAVA_BEAN, class: org.jboss.seam.core.EntityManagerFactory Sep 5, 2007 8:08:09 AM org.jboss.seam.Component <init> INFO: Component: broadcastEntityManagerFactory, scope: APPLICATION, type: JAVA_BEAN, class: org.jboss.seam.core.EntityManagerFactory [08:08:09.070] INFO org.jboss.seam.Component Component: broadcastEntityManagerFactory, scope: APPLICATION, type: JAVA_BEAN, class: org.jboss.seam.core.EntityManagerFactory [08:08:09.077] FINE org.jboss.seam.Component broadcastEntityManagerFactory.persistenceUnitName=broadcast [08:08:09.079] FINE org.jboss.seam.Component seam component not found: org.jboss.seam.core.events [08:08:09.080] FINE org.jboss.seam.Component seam component not found: org.jboss.seam.core.events [08:08:09.082] INFO org.jboss.seam.Component Component: em, scope: CONVERSATION, type: JAVA_BEAN, class: org.jboss.seam.core.ManagedPersistenceContext Sep 5, 2007 8:08:09 AM org.jboss.seam.Component <init> INFO: Component: em, scope: CONVERSATION, type: JAVA_BEAN, class: org.jboss.seam.core.ManagedPersistenceContext [08:08:09.082] INFO org.jboss.seam.Component Component: em, scope: CONVERSATION, type: JAVA_BEAN, class: org.jboss.seam.core.ManagedPersistenceContext [08:08:09.291] FINE org.jboss.seam.Component em.entityManagerFactory=#{broadcastEntityManagerFactory} [08:08:09.294] FINE org.jboss.seam.Component seam component not found: org.jboss.seam.core.events [08:08:09.294] FINE org.jboss.seam.Component seam component not found: org.jboss.seam.core.events
And, of course I have a persistence unit named 'broadcast', which I would post but I don't think it is relevant.
Any comment or recommendations?
Thanks,
John