This is an automated email from the ASF dual-hosted git repository.

gonzalad pushed a commit to branch 3.1.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/3.1.x-fixes by this push:
     new 2ccbe0d  CXF-7586: Remove @PersistenceContext
2ccbe0d is described below

commit 2ccbe0d54e8d602556dcd422b20a12da1eeef6b5
Author: gonzalad <[email protected]>
AuthorDate: Tue Dec 12 23:19:54 2017 +0100

    CXF-7586: Remove @PersistenceContext
    
    Remove PersistenceContext anotation
    from JPACMTCodeDataProvider as it
    impeds application startup on JBoss EAP 6.x
    when the application declares multiple
    persistence units in its persistence.xml.
---
 .../oauth2/grants/code/JPACMTCodeDataProvider.java | 61 +++++++++++++++++++---
 .../oauth2/grants/code/JPACMTCodeDataProvider.xml  |  6 ++-
 .../oidc/idp/JPAOidcUserSubjectCMTTest.xml         |  5 ++
 3 files changed, 64 insertions(+), 8 deletions(-)

diff --git 
a/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/grants/code/JPACMTCodeDataProvider.java
 
b/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/grants/code/JPACMTCodeDataProvider.java
index 4939c21..e41a5fc 100644
--- 
a/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/grants/code/JPACMTCodeDataProvider.java
+++ 
b/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/grants/code/JPACMTCodeDataProvider.java
@@ -24,19 +24,66 @@ import java.util.Map;
 import javax.persistence.EntityManager;
 import javax.persistence.EntityTransaction;
 import javax.persistence.LockModeType;
-import javax.persistence.PersistenceContext;
 
 import org.apache.cxf.rs.security.oauth2.common.ServerAccessToken;
 import org.apache.cxf.rs.security.oauth2.tokens.refresh.RefreshToken;
 
+/**
+ * Same as {@link JPACodeDataProvider} (stores Clients and tokens in a rdbms 
using
+ * JPA APIs).
+ *
+ * The transaction demarcation is handled by the container (be it Spring
+ * or Java EE).
+ *
+ * Sample usage with Spring XML:
+ <pre>
+ {@code
+     <bean id="oauthProvider" 
class="org.apache.cxf.rs.security.oauth2.grants.code.JPACMTCodeDataProvider"
+        init-method="init" destroy-method="close">
+
+         <property name="entityManager" ref="entityManager"/>
+         <!-- List of accepted scopes -->
+         <property name="supportedScopes" ref="supportedScopes"/>
+         <!-- List of required scopes -->
+         <!-- commented because bug in Resource Owner Flow
+         <property name="requiredScopes" ref="coreScopes"/>
+         -->
+         <!--
+         List of scopes that the consent/authorization form should make
+         selected by default. For example, asking a user to do an extra click
+         to approve an "oidc" scope is a redundant operation because this scope
+         is required anyway.
+         -->
+         <property name="defaultScopes" ref="coreScopes"/>
+         <property name="invisibleToClientScopes" 
ref="invisibleToClientScopes"/>
+     </bean>
+
+     <bean name="entityManager" 
class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
+         <property name="entityManagerFactory" ref="entityManagerFactory"/>
+     </bean>
+     ...
+ }
+ </pre>
+
+ * You can also extend this class and inject your own entityManager:
+ {@code
+    public class MyJPACodeDataProvider extends JPACMTCodeDataProvider {
+
+        @PersistenceContext
+        @Override
+        public void setEntityManager(EntityManager entityManager) {
+            super.setEntityManager(entityManager);
+        }
+ }
+ }
+ */
 public class JPACMTCodeDataProvider extends JPACodeDataProvider {
 
     private static final int DEFAULT_PESSIMISTIC_LOCK_TIMEOUT = 10000;
-    
+
     private int pessimisticLockTimeout = DEFAULT_PESSIMISTIC_LOCK_TIMEOUT;
     private boolean useJpaLockForExistingRefreshToken = true;
-    
-    @PersistenceContext
+
     private EntityManager entityManager;
 
     /**
@@ -72,7 +119,7 @@ public class JPACMTCodeDataProvider extends 
JPACodeDataProvider {
     @Override
     protected void closeIfNeeded(EntityManager em) {
     }
-    
+
     @Override
     protected RefreshToken updateExistingRefreshToken(RefreshToken rt, 
ServerAccessToken at) {
         if (useJpaLockForExistingRefreshToken) {
@@ -83,7 +130,7 @@ public class JPACMTCodeDataProvider extends 
JPACodeDataProvider {
             return super.updateExistingRefreshToken(rt, at);
         }
     }
-    
+
     protected void lockRefreshTokenForUpdate(final RefreshToken refreshToken) {
         try {
             execute(new EntityManagerOperation<Void>() {
@@ -105,7 +152,7 @@ public class JPACMTCodeDataProvider extends 
JPACodeDataProvider {
             // entity is not managed yet. ignore
         }
     }
-    
+
     public void setPessimisticLockTimeout(int pessimisticLockTimeout) {
         this.pessimisticLockTimeout = pessimisticLockTimeout;
     }
diff --git 
a/rt/rs/security/oauth-parent/oauth2/src/test/resources/org/apache/cxf/rs/security/oauth2/grants/code/JPACMTCodeDataProvider.xml
 
b/rt/rs/security/oauth-parent/oauth2/src/test/resources/org/apache/cxf/rs/security/oauth2/grants/code/JPACMTCodeDataProvider.xml
index c80434a..27cdca3 100644
--- 
a/rt/rs/security/oauth-parent/oauth2/src/test/resources/org/apache/cxf/rs/security/oauth2/grants/code/JPACMTCodeDataProvider.xml
+++ 
b/rt/rs/security/oauth-parent/oauth2/src/test/resources/org/apache/cxf/rs/security/oauth2/grants/code/JPACMTCodeDataProvider.xml
@@ -38,9 +38,9 @@ under the License.
     <bean id="oauthProvider"
           
class="org.apache.cxf.rs.security.oauth2.grants.code.JPACMTCodeDataProvider"
           init-method="init" destroy-method="close">
+        <property name="entityManager" ref="entityManager"/>
     </bean>
 
-
     <bean id="transactionManager" 
class="org.springframework.orm.jpa.JpaTransactionManager">
         <property name="entityManagerFactory" ref="entityManagerFactory"/>
     </bean>
@@ -58,6 +58,10 @@ under the License.
         </tx:attributes>
     </tx:advice>
 
+    <bean name="entityManager" 
class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
+        <property name="entityManagerFactory" ref="entityManagerFactory"/>
+    </bean>
+
     <beans profile="hibernate">
         <bean id="entityManagerFactory"
               
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
diff --git 
a/rt/rs/security/sso/oidc/src/test/resources/org/apache/cxf/rs/security/oidc/idp/JPAOidcUserSubjectCMTTest.xml
 
b/rt/rs/security/sso/oidc/src/test/resources/org/apache/cxf/rs/security/oidc/idp/JPAOidcUserSubjectCMTTest.xml
index c80434a..fa0eaa8 100644
--- 
a/rt/rs/security/sso/oidc/src/test/resources/org/apache/cxf/rs/security/oidc/idp/JPAOidcUserSubjectCMTTest.xml
+++ 
b/rt/rs/security/sso/oidc/src/test/resources/org/apache/cxf/rs/security/oidc/idp/JPAOidcUserSubjectCMTTest.xml
@@ -38,6 +38,7 @@ under the License.
     <bean id="oauthProvider"
           
class="org.apache.cxf.rs.security.oauth2.grants.code.JPACMTCodeDataProvider"
           init-method="init" destroy-method="close">
+        <property name="entityManager" ref="entityManager"/>
     </bean>
 
 
@@ -58,6 +59,10 @@ under the License.
         </tx:attributes>
     </tx:advice>
 
+    <bean name="entityManager" 
class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
+        <property name="entityManagerFactory" ref="entityManagerFactory"/>
+    </bean>
+    
     <beans profile="hibernate">
         <bean id="entityManagerFactory"
               
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">

-- 
To stop receiving notification emails like this one, please contact
['"[email protected]" <[email protected]>'].

Reply via email to