-
1. Re: Can EntityConverter handle different EntityManagers?
wiberto Oct 10, 2007 9:34 PM (in response to wiberto)I tried doing this in the xhtml itself:
<s:convertEntity entityManager="#{anotherEntityManager}" />
and it still wanted to go look for entityManager. Actually it gives that error if the variable name is not the same as the component name. If it I get this error:Caused by: java.lang.IllegalArgumentException: Cannot convert org.jboss.seam.persistence.EntityManagerProxy@41d260 of type class org.jboss.seam.persistence.EntityManagerProxy to interface org.jboss.seam.core.Expressions$ValueExpression at org.jboss.el.lang.ELSupport.coerceToType(ELSupport.java:358) at org.jboss.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:188) at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71) at com.sun.facelets.tag.TagAttribute.getObject(TagAttribute.java:233) ... 78 more
Any ideas? -
2. Re: Can EntityConverter handle different EntityManagers?
swd847 Oct 10, 2007 9:49 PM (in response to wiberto)Try
<s:convertEntity entityManager="anotherEntityManager" />
don't know if it will work or not. -
3. Re: Can EntityConverter handle different EntityManagers?
wiberto Oct 10, 2007 9:59 PM (in response to wiberto)that's what I tried. Our posts probably got crossed. If I tried without being an evaluation it gave me an error. It has to be #{anotherEntityManager}
But what I'm finding is the the EnvtityConverterStore is looking for a component called entityManager.
I'm going to try removing the parameter from the JSF to see if that is still the case.
This is getting weird. -
4. Re: Can EntityConverter handle different EntityManagers?
wiberto Oct 10, 2007 10:07 PM (in response to wiberto)If I don't have a component called "entityManager" I get a n NPE:
java.lang.NullPointerException at org.jboss.seam.ui.converter.EntityConverterStore.getEntityManager(EntityConverterStore.java:81) at org.jboss.seam.ui.converter.EntityConverterStore.put(EntityConverterStore.java:60) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.jboss.seam.util.Reflections.invoke(Reflections.java:21) at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:31) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56) at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:31) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.transaction.TransactionInterceptor$1.work(TransactionInterceptor.java:38) at org.jboss.seam.util.Work.workInTransaction(Work.java:39) at org.jboss.seam.transaction.TransactionInterceptor.aroundInvoke(TransactionInterceptor.java:32) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:42) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:106) at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:155) at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:91) at org.jboss.seam.ui.converter.EntityConverterStore_$$_javassist_1.put(EntityConverterStore_$$_javassist_1.java) at org.jboss.seam.ui.converter.EntityConverter.getAsString(EntityConverter.java:67) at org.jboss.seam.ui.converter.PrioritizableConverter.getAsString(PrioritizableConverter.java:67) at org.jboss.seam.ui.converter.ConverterChain.getAsString(ConverterChain.java:123) at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getFormattedValue(HtmlBasicRenderer.java:469) at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOption(MenuRenderer.java:502)
Here's my piece of the components.xml with the real names I'm using:<persistence:managed-persistence-context name="numinsEntityManager" auto-create="true" persistence-unit-jndi-name="java:/numinsPersistenceUnit" /> <component name="org.jboss.seam.ui.entityConverter"> <property name="entityManager">#{numinsEntityManager}</property> </component>
-
5. Re: Can EntityConverter handle different EntityManagers?
wiberto Oct 10, 2007 10:19 PM (in response to wiberto)I kept diging and I think I found why it always tries to use entityManager.
this is from MutableEntityController: @Override protected String getPersistenceContextName() { return "entityManager"; }
-
6. Re: Can EntityConverter handle different EntityManagers?
wiberto Oct 11, 2007 1:06 AM (in response to wiberto)I know "entityManager" is the default value, but I never see the entityManager attribute in EntityConverter being injected. So it always goes up to the default and creates the entityManager.
So for some reason my component entry to set the entityManager is not being used. -
7. Re: Can EntityConverter handle different EntityManagers?
matt.drees Oct 11, 2007 1:30 AM (in response to wiberto)I have no idea if this will work or not, but try this:
<s:convertEntity entityManager="#{expressions.createValueExpression('#{anotherEntityManager}')}" />
(I think that parses...) -
8. Re: Can EntityConverter handle different EntityManagers?
wiberto Oct 11, 2007 3:00 AM (in response to wiberto)This one did the trick!! Thanks!!!
Still curious as to why the component tag in the components.xml wasn't working right. It was kind of being ignored.
One thing I still need to figure out is how to use the s:convertEntity with two different entityManagers in the same page. I think somewhere it only saves one. I will need to do some debugging on it to figure it out (and I'm fallign asleep!!!)
Thanks for the replies. Once I figure it out I'll make a blog entry or something so we can link it from the wiki. -
9. Re: Can EntityConverter handle different EntityManagers?
pmuir Oct 11, 2007 7:37 AM (in response to wiberto)Try
components.xml<component name="myEntityConverter" class="org.jboss.seam.ui.converter.EntityConverter"> <property name="entityManager">#{myEntityManager}>/property> </component>
facelet<h:selectOneMenu ...> <f:converter converterId="myEntityConverter" />
Of course you could wrap the converter up in a custom tag if you wanted to.