Craig L Russell wrote:
Hi Martin,

Thanks for the pointer and explanation. Hopefully the last time this is an issue. :-)

I wouldn't hold my breath. It looks like it's down again...


1. The commits in question were done apparently Jan 17 at 0735 hours. Isn't this after the plugin was restarted?

Could be. My impression from SVN-181 is that this will be a recurring
problem with the latest plugin that will ultimately need a patch to
get fixed.


2. Is there any way to point JIRA at the svn log and give it a time range to index? I'd hate to think that there's all that missing history and no way to recover it.

I'm afraid I don't know nearly enough about how the plugin works to
even hazard a guess.

Martin


Craig

On Jan 18, 2008, at 12:44 PM, Martin Sebor wrote:

Craig L Russell wrote:
Can someone in infra take a look at why the JIRA is not getting updated with the svn commit data?

This issue should explain it:
 http://issues.apache.org/jira/browse/INFRA-1466

I've already reactivated the plugin once since Jeff's comment on
the 16th.

Martin

Thanks,
Craig
Begin forwarded message:
From: Kevin Sutter <[EMAIL PROTECTED]>
Date: January 18, 2008 7:13:13 AM PST
To: [EMAIL PROTECTED]
Subject: Re: svn commit: r612846 - in /openjpa: branches/1.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java
Reply-To: [email protected]

Hi,
Is there a problem with getting the SVN commits into the JIRA issues? I
thought I had noticed this problem a week or so ago, but then forgot to
follow up. I am now noticing it again with my latest commit. I committed these changes early yesterday morning and they are still not attached to the JIRA reports. I thought waiting 24 hours would be sufficient... Any ideas?

Kevin

On Jan 17, 2008 9:35 AM, <[EMAIL PROTECTED]> wrote:

Author: kwsutter
Date: Thu Jan 17 07:35:45 2008
New Revision: 612846

URL: http://svn.apache.org/viewvc?rev=612846&view=rev
Log:
OPENJPA-437.  Changed AbstractBrokerFactory.loadPersistentTypes to be
synchronized to get around the multi-threading issue during broker creation.

Also, migrated the change for OPENJPA-449 from trunk to the 1.0.x branch.

Modified:

openjpa/branches/1.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java

openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java

Modified:
openjpa/branches/1.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java
URL:
http://svn.apache.org/viewvc/openjpa/branches/1.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java?rev=612846&r1=612845&r2=612846&view=diff

==============================================================================
---
openjpa/branches/1.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java
(original)
+++
openjpa/branches/1.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java
Thu Jan 17 07:35:45 2008
@@ -133,6 +133,7 @@
   */
  protected AbstractBrokerFactory(OpenJPAConfiguration config) {
      _conf = config;
+ _pcClassLoaders = new ReferenceHashSet(ReferenceHashSet.WEAK);
  }

  /**
@@ -231,8 +232,13 @@
  /**
   * Load the configured persistent classes list. Performed
automatically
   * whenever a broker is created.
+     *
+ * This method is synchronized due to the possible creation of new
brokers
+     * (entity managers) by multiple threads (clients).  The two data
structures
+ * used by this method (_pcClassNames and _pcClassLoaders) are not
thread
+     * safe and this was an easy, efficient solution (OPENJPA-437).
   */
-    private void loadPersistentTypes(ClassLoader envLoader) {
+ private synchronized void loadPersistentTypes(ClassLoader envLoader)
{
      // no listed persistent types?
      if (_pcClassNames != null && _pcClassNames.isEmpty())
          return;
@@ -245,7 +251,7 @@
          Collection clss = _conf.getMetaDataRepositoryInstance().
              loadPersistentTypes(false, loader);
          if (clss.isEmpty())
-                _pcClassNames = Collections.EMPTY_SET;
+                _pcClassNames = Collections.EMPTY_LIST;
          else {
              _pcClassNames = new ArrayList(clss.size());
              for (Iterator itr = clss.iterator(); itr.hasNext();) {
@@ -254,7 +260,6 @@
                  if (needsSub(cls))
                      toRedefine.add(cls);
              }
-                _pcClassLoaders = new ReferenceHashSet(
ReferenceHashSet.WEAK);
              _pcClassLoaders.add(loader);
          }
      } else {

Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java?rev=612846&r1=612845&r2=612846&view=diff

==============================================================================
---
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java
(original)
+++
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java
Thu Jan 17 07:35:45 2008
@@ -256,8 +256,13 @@
  /**
   * Load the configured persistent classes list. Performed
automatically
   * whenever a broker is created.
+     *
+ * This method is synchronized due to the possible creation of new
brokers
+     * (entity managers) by multiple threads (clients).  The two data
structures
+ * used by this method (_pcClassNames and _pcClassLoaders) are not
thread
+     * safe and this was an easy, efficient solution (OPENJPA-437).
   */
-    private void loadPersistentTypes(ClassLoader envLoader) {
+ private synchronized void loadPersistentTypes(ClassLoader envLoader)
{
      // no listed persistent types?
      if (_pcClassNames != null && _pcClassNames.isEmpty())
          return;
@@ -270,7 +275,7 @@
          Collection clss = _conf.getMetaDataRepositoryInstance().
              loadPersistentTypes(false, loader);
          if (clss.isEmpty())
-                _pcClassNames = Collections.EMPTY_SET;
+                _pcClassNames = Collections.EMPTY_LIST;
          else {
              _pcClassNames = new ArrayList(clss.size());
              for (Iterator itr = clss.iterator(); itr.hasNext();) {



Craig Russell
Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
408 276-5638 mailto:[EMAIL PROTECTED]
P.S. A good JDO? O, Gasp!


Craig Russell
Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
408 276-5638 mailto:[EMAIL PROTECTED]
P.S. A good JDO? O, Gasp!


Reply via email to