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]>'].