JiraJdbcPropertySet is read only

XMLWordPrintable

    • Type: Bug
    • Resolution: Fixed
    • Priority: Highest
    • 2.1.1
    • Affects Version/s: 2.1
    • Component/s: None
    • Environment:

      Gentoo Linux Kernel 2.6
      Jetty 5.1.8
      BEA JRockit 1.4.2_08

      When external user management is delegated to Jira, simple operations such as showing or hiding children or comments of a page trigger the following exception:

      com.opensymphony.module.propertyset.PropertyException: JiraJdbcPropertySet is read only

      I have external user management turned ON, (I even tried to turn it off and back on), no change, I wiped the entire Confluence install and started from scratch, generating a brand new example site, nothing seems to work.

      It appears that even if external user management is enabled, Confluence tries to persist certain properties back to the OSUser database, thus failing miserably when management is delegated to Jira.

      I finally decompiled the "WEB-INF/classes/com/atlassian/confluence/user/providers/jira/JiraJdbcPropertySet.class file, changed two methods and recompiled it, and now it seems to be working fine: those are the changes I made:

      public void remove(String key) throws PropertyException

      { /* Commenting out the following will prevent Confluence crashes */ //throw new PropertyException("JiraJdbcPropertySet is read only"); }

      protected void setImpl(int type, String key, Object value) throws PropertyException { /* Commenting out the following will prevent Confluence crashes */ //throw new PropertyException("JiraJdbcPropertySet is read only"); }

      For your viewing pleasure, here is the full exception stack trace:

      [2005/12/21 17:03:06.781] ERROR [XWorkTransactionInterceptor] Invoking rollback for transaction on action '/pages/viewpage.action (ViewPageAction.execute())' due to throwable: com.opensymphony.module.propertyset.PropertyException: JiraJdbcPropertySet is read only
      com.opensymphony.module.propertyset.PropertyException: JiraJdbcPropertySet is read only
      at com.atlassian.confluence.user.providers.jira.JiraJdbcPropertySet.setImpl(ILjava/lang/String;Ljava/lang/Object;)V(JiraJdbcPropertySet.java:216)
      at com.opensymphony.module.propertyset.AbstractPropertySet.set(ILjava/lang/String;Ljava/lang/Object;)V(AbstractPropertySet.java:570)
      at com.opensymphony.module.propertyset.AbstractPropertySet.setString(Ljava/lang/String;Ljava/lang/String;)V(AbstractPropertySet.java:368)
      at com.atlassian.confluence.user.providers.jira.ConditionalPropertySet.setImpl(ILjava/lang/String;Ljava/lang/Object;)V(ConditionalPropertySet.java:67)
      at com.opensymphony.module.propertyset.AbstractPropertySet.set(ILjava/lang/String;Ljava/lang/Object;)V(AbstractPropertySet.java:570)
      at com.opensymphony.module.propertyset.AbstractPropertySet.setString(Ljava/lang/String;Ljava/lang/String;)V(AbstractPropertySet.java:368)
      at bucket.propertyset.CachingPropertySet.setString(Ljava/lang/String;Ljava/lang/String;)V(CachingPropertySet.java:353)
      at com.opensymphony.user.User.setEmail(Ljava/lang/String;)V(User.java:62)
      at com.atlassian.user.impl.osuser.OSUUserManager.saveUser(Lcom/atlassian/user/User;)V(OSUUserManager.java:160)
      at jrockit.reflect.NativeMethodInvoker.invoke0(Ljava/lang/Object;ILjava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown Source)
      at jrockit.reflect.NativeMethodInvoker.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown Source)
      at jrockit.reflect.VirtualNativeMethodInvoker.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown Source)
      at java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;I)Ljava/lang/Object;(Unknown Source)
      at org.springframework.aop.framework.AopProxyUtils.invokeJoinpointUsingReflection(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;(AopProxyUtils.java:61)
      at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint()Ljava/lang/Object;(ReflectiveMethodInvocation.java:149)
      at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()Ljava/lang/Object;(ReflectiveMethodInvocation.java:116)
      at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(Lorg/aopalliance/intercept/MethodInvocation;)Ljava/lang/Object;(TransactionInterceptor.java:56)
      at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()Ljava/lang/Object;(ReflectiveMethodInvocation.java:138)
      at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;(JdkDynamicAopProxy.java:152)
      at $Proxy14.saveUser(Lcom/atlassian/user/User;)V(Unknown Source)
      at bucket.user.DefaultUserAccessor.saveUser(Lcom/atlassian/user/User;)V(DefaultUserAccessor.java:230)
      at jrockit.reflect.NativeMethodInvoker.invoke0(Ljava/lang/Object;ILjava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown Source)
      at jrockit.reflect.NativeMethodInvoker.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown Source)
      at jrockit.reflect.VirtualNativeMethodInvoker.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown Source)
      at java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;I)Ljava/lang/Object;(Unknown Source)
      at org.springframework.aop.framework.AopProxyUtils.invokeJoinpointUsingReflection(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;(AopProxyUtils.java:61)
      at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint()Ljava/lang/Object;(ReflectiveMethodInvocation.java:149)
      at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()Ljava/lang/Object;(ReflectiveMethodInvocation.java:116)
      at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(Lorg/aopalliance/intercept/MethodInvocation;)Ljava/lang/Object;(TransactionInterceptor.java:56)
      at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()Ljava/lang/Object;(ReflectiveMethodInvocation.java:138)
      at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;(JdkDynamicAopProxy.java:152)
      at $Proxy16.saveUser(Lcom/atlassian/user/User;)V(Unknown Source)
      [2005/12/21 17:03:06.790] ERROR [ServletDispatcher] Could not execute action
      com.opensymphony.module.propertyset.PropertyException: JiraJdbcPropertySet is read only
      at com.atlassian.confluence.user.providers.jira.JiraJdbcPropertySet.setImpl(ILjava/lang/String;Ljava/lang/Object;)V(JiraJdbcPropertySet.java:216)
      at com.opensymphony.module.propertyset.AbstractPropertySet.set(ILjava/lang/String;Ljava/lang/Object;)V(AbstractPropertySet.java:570)
      at com.opensymphony.module.propertyset.AbstractPropertySet.setString(Ljava/lang/String;Ljava/lang/String;)V(AbstractPropertySet.java:368)
      at com.atlassian.confluence.user.providers.jira.ConditionalPropertySet.setImpl(ILjava/lang/String;Ljava/lang/Object;)V(ConditionalPropertySet.java:67)
      at com.opensymphony.module.propertyset.AbstractPropertySet.set(ILjava/lang/String;Ljava/lang/Object;)V(AbstractPropertySet.java:570)
      at com.opensymphony.module.propertyset.AbstractPropertySet.setString(Ljava/lang/String;Ljava/lang/String;)V(AbstractPropertySet.java:368)
      at bucket.propertyset.CachingPropertySet.setString(Ljava/lang/String;Ljava/lang/String;)V(CachingPropertySet.java:353)
      at com.opensymphony.user.User.setEmail(Ljava/lang/String;)V(User.java:62)
      at com.atlassian.user.impl.osuser.OSUUserManager.saveUser(Lcom/atlassian/user/User;)V(OSUUserManager.java:160)
      at jrockit.reflect.NativeMethodInvoker.invoke0(Ljava/lang/Object;ILjava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown Source)
      at jrockit.reflect.NativeMethodInvoker.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown Source)
      at jrockit.reflect.VirtualNativeMethodInvoker.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown Source)
      at java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;I)Ljava/lang/Object;(Unknown Source)
      at org.springframework.aop.framework.AopProxyUtils.invokeJoinpointUsingReflection(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;(AopProxyUtils.java:61)
      at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint()Ljava/lang/Object;(ReflectiveMethodInvocation.java:149)
      at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()Ljava/lang/Object;(ReflectiveMethodInvocation.java:116)
      at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(Lorg/aopalliance/intercept/MethodInvocation;)Ljava/lang/Object;(TransactionInterceptor.java:56)
      at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()Ljava/lang/Object;(ReflectiveMethodInvocation.java:138)
      at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;(JdkDynamicAopProxy.java:152)
      at $Proxy14.saveUser(Lcom/atlassian/user/User;)V(Unknown Source)
      at bucket.user.DefaultUserAccessor.saveUser(Lcom/atlassian/user/User;)V(DefaultUserAccessor.java:230)
      at jrockit.reflect.NativeMethodInvoker.invoke0(Ljava/lang/Object;ILjava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown Source)
      at jrockit.reflect.NativeMethodInvoker.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown Source)
      at jrockit.reflect.VirtualNativeMethodInvoker.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown Source)
      at java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;I)Ljava/lang/Object;(Unknown Source)
      at org.springframework.aop.framework.AopProxyUtils.invokeJoinpointUsingReflection(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;(AopProxyUtils.java:61)
      at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint()Ljava/lang/Object;(ReflectiveMethodInvocation.java:149)
      at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()Ljava/lang/Object;(ReflectiveMethodInvocation.java:116)
      at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(Lorg/aopalliance/intercept/MethodInvocation;)Ljava/lang/Object;(TransactionInterceptor.java:56)
      at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()Ljava/lang/Object;(ReflectiveMethodInvocation.java:138)
      at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;(JdkDynamicAopProxy.java:152)
      at $Proxy16.saveUser(Lcom/atlassian/user/User;)V(Unknown Source)

              Assignee:
              Unassigned
              Reporter:
              Deleted Account (Inactive)
              Votes:
              1 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated:
                Resolved: