Bug 909914
| Summary: | Wrong injection made by container | ||
|---|---|---|---|
| Product: | [JBoss] JBoss Enterprise Application Platform 6 | Reporter: | Luan Cestari <lcestari> |
| Component: | EJB, unspecified, Hibernate | Assignee: | Stuart Douglas <sdouglas> |
| Status: | CLOSED CURRENTRELEASE | QA Contact: | |
| Severity: | urgent | Docs Contact: | |
| Priority: | unspecified | ||
| Version: | 6.0.1 | CC: | bbaranow, brian.stansberry, myarboro, nraghava, zroubali |
| Target Milestone: | ER6 | ||
| Target Release: | EAP 6.1.0 | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | Bug Fix | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2013-07-23 18:37:32 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
| Attachments: | |||
|
Description
Luan Cestari
2013-02-11 13:07:31 UTC
Created attachment 696080 [details]
WAR containing the reproduced issue
Scott Marlow <scott.marlow> made a comment on jira AS7-6500 I deployed the standalone test attached to the bugzilla bug and in JPAAnnotationProcessor.doDeploy(), we get an unordered list of the annotations via: {code} List<AnnotationInstance> persistenceContexts = index.getAnnotations(PERSISTENCE_CONTEXT_ANNOTATION_NAME); persistenceContexts[0]=@javax.persistence.PersistenceContext(unitName = "secondary") on void org.jboss.as.quickstart.hibernate4.service.MemberRegistration.setEm(javax.persistence.EntityManager) persistenceContexts[1]=@javax.persistence.PersistenceContext(unitName = "secondary") on void org.jboss.as.quickstart.hibernate4.data.SecondaryMemberRepository.setEm(javax.persistence.EntityManager) persistenceContexts[2]=@javax.persistence.PersistenceContext(unitName = "primary") on void org.jboss.as.quickstart.hibernate4.data.MemberRepository.setEm(javax.persistence.EntityManager) persistenceContexts[3]=@javax.persistence.PersistenceContext(unitName = "primary") on void org.jboss.as.quickstart.hibernate4.data.BaseDAO.setEm(javax.persistence.EntityManager) {code} Scott Marlow <scott.marlow> made a comment on jira AS7-6500 I deployed the standalone test attached to the bugzilla bug and in JPAAnnotationProcessor.doDeploy(), we get an unordered list of the annotations via: {code} List<AnnotationInstance> persistenceContexts = index.getAnnotations(PERSISTENCE_CONTEXT_ANNOTATION_NAME); {code} {quote} persistenceContexts[0]=@javax.persistence.PersistenceContext(unitName = "secondary") on void org.jboss.as.quickstart.hibernate4.service.MemberRegistration.setEm(javax.persistence.EntityManager) persistenceContexts[1]=@javax.persistence.PersistenceContext(unitName = "secondary") on void org.jboss.as.quickstart.hibernate4.data.SecondaryMemberRepository.setEm(javax.persistence.EntityManager) persistenceContexts[2]=@javax.persistence.PersistenceContext(unitName = "primary") on void org.jboss.as.quickstart.hibernate4.data.MemberRepository.setEm(javax.persistence.EntityManager) persistenceContexts[3]=@javax.persistence.PersistenceContext(unitName = "primary") on void org.jboss.as.quickstart.hibernate4.data.BaseDAO.setEm(javax.persistence.EntityManager) {quote} Luan Cestari <lcestari> made a comment on jira AS7-6500 This means that it ins't Hibernate problem or are there others possibilities with Hibernate? Didn't you get the strange output deploying into EAP 6? If I'm not wrong, the ComponentDescription.mergeInjectionsForClass method inject the wrong EM. Scott Marlow <scott.marlow> made a comment on jira AS7-6500 What is the output that I am looking for? I am using the latest AS7 sources currently and have TRACE logging enabled. My deployment output and some application output is here http://fpaste.org/G1jr/ I'll step through the ComponentDescription.mergeInjectionsForClass() next. Luan Cestari <lcestari> made a comment on jira AS7-6500 I'm attaching my log. Line "18:21:36,608". You will see that the injection occurred twice and the second injection (the line mentioned) injects the wrong EM. Luan Cestari <lcestari> made a comment on jira AS7-6500 Attaching log in BZ Created attachment 696246 [details]
Log with the problem (the double and wrong injection) (those exceptions were printed to show who is calling the methods)
Scott Marlow <scott.marlow> made a comment on jira AS7-6500 Luan, I see similar output, thanks for pasting your log. Regarding your question about the Hibernate (persistence provider) component, no, Hibernate is not causing the incorrect injection to be made by the container. Regarding ComponentDescription.mergeInjectionsForClass, I think the question is whether that is the right place to fix this issue for all EE deployments. I don't think this is limited to JPA, so finding a central place to resolve could be nice (instead of inside each EE deployment processor). Stuart Douglas <stuart.w.douglas> made a comment on jira AS7-6500 This is a general EE compliance issue, it is not specific to persistence contexts. The correct way to solve it is to keep track of methods in ComponentDescription.mergeInjectionsForClass(), making sure that you take things like method visibility into account. Stuart Douglas <stuart.w.douglas> made a comment on jira AS7-6500 I already had a potential solution to this locally from when I looked into the support email yesterday. I have added a test case and it appears to work so I have submitted a PR. Stuart Douglas <stuart.w.douglas> updated the status of jira AS7-6500 to Resolved This should not be "NEW" issue. |