[
https://issues.apache.org/jira/browse/TOMEE-509?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13485925#comment-13485925
]
Romain Manni-Bucau commented on TOMEE-509:
------------------------------------------
side note about the original error: about your exception: such an entity
manager (of a stateful) only exist if the stateful exist, if you produce the em
(without scope??) the stateful hasn't to exist (and that's the case you had) so
the real em doesn't exist too. That's why you got this error which is normal.
Finally about "there is no restriction": in specification you should have a
look to the opposite: "is it explicitely allowed". Not forbidden doesn't mean
allowed (that's a pain but that's already better this way than without any spec
;)).
> Injected extended EntityManager is not registered (cannot be used for DB
> operations)
> ------------------------------------------------------------------------------------
>
> Key: TOMEE-509
> URL: https://issues.apache.org/jira/browse/TOMEE-509
> Project: TomEE
> Issue Type: Bug
> Affects Versions: 1.5.0, 1.5.1
> Environment: Windows 7 x64; jdk1.7.0_09 32 bit;
> apache-tomee-1.5.1-20121026.064316-51-webprofile.zip
> Reporter: Donatas Ciuksys
> Priority: Critical
>
> 1. Create class EntityManagerProducer:
> @SessionScoped
> @Stateful
> public class EntityManagerProducer implements Serializable {
>
> @PersistenceContext(type=PersistenceContextType.EXTENDED)
> private EntityManager em;
>
> @Produces
> public EntityManager getEntityManager() {
> return em;
> }
> }
> 2. Create injection client:
> @Named
> public class A {
>
> @Inject
> private EntityManager em;
> public String getDelegateClassName() {
> return em.getDelegate().getClass().getCanonicalName();
> }
>
> }
> 3. Create JSF page and try to call getDelegateClassName():
> <h:body>
> EntityManager is open: #{a.delegateClassName}
> </h:body>
> 4. Deploy (successful) and run the application - observe error message
> (printed in browser):
> An Error Occurred:
> InternalError: an entity manager should already be registered for this
> extended persistence unit
> viewId=/index.xhtml
> location=D:\dev\proj\templates\InjectionDemo\build\web\index.xhtml
> phaseId=RENDER_RESPONSE(6)
> Caused by:
> java.lang.IllegalStateException - InternalError: an entity manager should
> already be registered for this extended persistence unit
> at
> org.apache.openejb.persistence.JtaEntityManagerRegistry.getEntityManager(JtaEntityManagerRegistry.java:99)
> - Stack Trace
> java.lang.IllegalStateException: InternalError: an entity manager should
> already be registered for this extended persistence unit
> at
> org.apache.openejb.persistence.JtaEntityManagerRegistry.getEntityManager(JtaEntityManagerRegistry.java:99)
> at
> org.apache.openejb.persistence.JtaEntityManager.getEntityManager(JtaEntityManager.java:80)
> at
> org.apache.openejb.persistence.JtaEntityManager.getDelegate(JtaEntityManager.java:114)
> at
> org.apache.openejb.persistence.JtaEntityManager.getDelegate(JtaEntityManager.java:53)
> at beans.A.getDelegateClassName(A.java:19)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> ...
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira