You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by cu...@apache.org on 2012/07/03 20:21:26 UTC
svn commit: r1356860 - in /openjpa/trunk/openjpa-tools: ./
openjpa-fetch-statistics/ openjpa-fetch-statistics/src/
openjpa-fetch-statistics/src/main/ openjpa-fetch-statistics/src/main/java/
openjpa-fetch-statistics/src/main/java/org/ openjpa-fetch-stat...
Author: curtisr7
Date: Tue Jul 3 18:21:24 2012
New Revision: 1356860
URL: http://svn.apache.org/viewvc?rev=1356860&view=rev
Log:
OPENJPA-2220: Commit fetch statistic tool. Patch contributed by Helen Xu.
Added:
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/ (with props)
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/pom.xml (with props)
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/java/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/java/org/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/java/org/apache/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/java/org/apache/openjpa/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/java/org/apache/openjpa/enhance/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/java/org/apache/openjpa/enhance/stats/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/java/org/apache/openjpa/enhance/stats/FetchStatisticsAuxEnhancer.java (with props)
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/java/org/apache/openjpa/enhance/stats/FetchStatsCollector.java (with props)
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/META-INF/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/META-INF/services/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/META-INF/services/org.apache.openjpa.enhance.PCEnhancer$AuxiliaryEnhancer (with props)
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/README-WEBSPHERE.txt (with props)
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/README.txt (with props)
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/org/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/org/apache/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/org/apache/openjpa/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/org/apache/openjpa/enhance/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/org/apache/openjpa/enhance/stats/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/org/apache/openjpa/enhance/stats/localizer.properties (with props)
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/AEntity.java (with props)
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/BEntity.java (with props)
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/ChildEntity.java (with props)
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/EEntity.java (with props)
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/TestFetchStatistics.java (with props)
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/resources/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/resources/META-INF/
openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/resources/META-INF/persistence.xml (with props)
Modified:
openjpa/trunk/openjpa-tools/pom.xml
Propchange: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Tue Jul 3 18:21:24 2012
@@ -0,0 +1 @@
+.*
Added: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/pom.xml
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/pom.xml?rev=1356860&view=auto
==============================================================================
--- openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/pom.xml (added)
+++ openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/pom.xml Tue Jul 3 18:21:24 2012
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
+ license agreements. See the NOTICE file distributed with this work for additional
+ information regarding copyright ownership. The ASF licenses this file to
+ you under the Apache License, Version 2.0 (the "License"); you may not use
+ this file except in compliance with the License. You may obtain a copy of
+ the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
+ by applicable law or agreed to in writing, software distributed under the
+ License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ OF ANY KIND, either express or implied. See the License for the specific
+ language governing permissions and limitations under the License. -->
+<!-- Maven release plugin requires the project tag to be on a single line. -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.openjpa</groupId>
+ <artifactId>openjpa-tools</artifactId>
+ <version>2.3.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>openjpa-fetch-statistics</artifactId>
+ <packaging>jar</packaging>
+
+ <name>OpenJPA Fetching Statistic Tool</name>
+ <description>
+ OpenJPA tool to capture the fetching statistic data for the persistent fields .
+ </description>
+ <inceptionYear>2012</inceptionYear>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-jpa_2.0_spec</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-jta_1.1_spec</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.openjpa</groupId>
+ <artifactId>openjpa-kernel</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.openjpa</groupId>
+ <artifactId>openjpa-lib</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.openjpa</groupId>
+ <artifactId>openjpa-persistence-jdbc</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ <version>3.8.1</version>
+ </dependency>
+ </dependencies>
+
+ <licenses>
+ <license>
+ <name>Apache License 2.0</name>
+ <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <argLine>${surefire.jvm.args}</argLine>
+ <excludes>
+ <!-- exclude the unit test since the fetch statistic enhancer cannot
+ be load during maven build -->
+ <exclude>org/apache/openjpa/enhance/stats/TestFetchStatistics.java</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>default-jar</id>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ <phase>package</phase>
+ <configuration>
+ <excludes>
+ <exclude>README-*.txt</exclude>
+ </excludes>
+ </configuration>
+ </execution>
+ <!-- Create another WAS specific jar -->
+ <execution>
+ <id>was</id>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ <phase>package</phase>
+ <configuration>
+ <finalName>${artifactId}-${version}-websphere</finalName>
+ <archive>
+ <manifest>
+ <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+ </manifest>
+ <manifestEntries>
+ <Fragment-Host>com.ibm.ws.jpa; bundle-version=8.0.0</Fragment-Host>
+ <Export-Package>org.apache.openjpa.enhance.stats</Export-Package>
+ <Bundle-SymbolicName>org.apache.openjpa.enhance.stats; singleton:=true</Bundle-SymbolicName>
+ <Bundle-Name>FetchStatisticsAuxEnhancer</Bundle-Name>
+ </manifestEntries>
+ </archive>
+ <excludes>
+ <exclude>README.txt</exclude>
+ </excludes>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
Propchange: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Added: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/java/org/apache/openjpa/enhance/stats/FetchStatisticsAuxEnhancer.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/java/org/apache/openjpa/enhance/stats/FetchStatisticsAuxEnhancer.java?rev=1356860&view=auto
==============================================================================
--- openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/java/org/apache/openjpa/enhance/stats/FetchStatisticsAuxEnhancer.java (added)
+++ openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/java/org/apache/openjpa/enhance/stats/FetchStatisticsAuxEnhancer.java Tue Jul 3 18:21:24 2012
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.enhance.stats;
+
+import java.util.Locale;
+
+import org.apache.commons.lang.WordUtils;
+import org.apache.openjpa.conf.OpenJPAConfiguration;
+import org.apache.openjpa.enhance.PCEnhancer.AuxiliaryEnhancer;
+import org.apache.openjpa.lib.log.Log;
+import org.apache.openjpa.meta.AccessCode;
+import org.apache.openjpa.meta.ClassMetaData;
+import org.apache.openjpa.meta.FieldMetaData;
+
+import serp.bytecode.BCClass;
+import serp.bytecode.BCMethod;
+import serp.bytecode.Code;
+
+/**
+ * FetchStatisticsAuxEnhancer adds the call back function to each persistent fields in the persistent entity which
+ * will invoke the hit method from FetchStatsCollector whenever the field is fetched at runtime.
+ */
+public class FetchStatisticsAuxEnhancer implements AuxiliaryEnhancer {
+
+ private final String IGNORE_METHODS_REGEX = "(pc(.)*GenericContext)?(pc(.)*StateManager)?"
+ + "(pc(.)*DetachedState)?(pc(.)*EnhancementContractVersion)?(pc(.)*ManagedFieldCount)?(pc(.)*GetVersion)?";
+
+ public void run(BCClass bcc, ClassMetaData cmd) {
+ addEnhancement(bcc, cmd);
+ };
+
+ public boolean skipEnhance(BCMethod arg0) {
+ return false;
+ };
+
+ private void addEnhancement(BCClass bcc, ClassMetaData cmd) {
+ Log log = cmd.getRepository().getConfiguration().getLog(OpenJPAConfiguration.LOG_RUNTIME);
+ FetchStatsCollector.setlogger(log);
+ for (BCMethod meth : bcc.getMethods()) {
+ String methodName = meth.getName();
+ FieldMetaData fmd = getFieldName(methodName, cmd);
+ if (fmd != null && needsTracking(fmd, methodName, cmd)) {
+ String fqn = bcc.getName() + "." + fmd.getName();
+ FetchStatsCollector.registerField(fqn);
+ FetchStatsCollector.registerEntity(cmd);
+
+ Code code = meth.getCode(false);
+ code.constant().setValue(fqn);
+ code.invokestatic().setMethod(FetchStatsCollector.class, "hit", void.class,
+ new Class[] { String.class });
+ }
+ }
+ }
+
+ private boolean needsTracking(FieldMetaData fmd, String methName, ClassMetaData cmd) {
+ // Skim out primary key(s), versions, and LAZY fields
+ if (fmd.isPrimaryKey() || fmd.isVersion() || !fmd.isInDefaultFetchGroup())
+ return false;
+
+ if (AccessCode.isField(fmd) && methName.toLowerCase(Locale.ENGLISH).startsWith("pcget")) {
+ return true;
+ } else if (AccessCode.isProperty(fmd) && methName.toLowerCase(Locale.ENGLISH).startsWith("get")
+ || methName.toLowerCase(Locale.ENGLISH).startsWith("pcis")) {
+ return true;
+ }
+ return false;
+ }
+
+ private FieldMetaData getFieldName(String methName, ClassMetaData cmd) {
+ FieldMetaData res = null;
+ String fieldName = null;
+ if (methName.matches(IGNORE_METHODS_REGEX)) {
+ return res;
+ } else if (methName.startsWith("pcGet")) {
+ // field access
+ fieldName = methName.substring(5);
+ } else if (methName.toLowerCase(Locale.ENGLISH).startsWith("get")) {
+ // property access
+ fieldName = WordUtils.uncapitalize(methName.substring(3));
+ } else if (methName.startsWith("pcis")) {
+ fieldName = methName.substring(4).toLowerCase(Locale.ENGLISH);
+ }
+
+ for (FieldMetaData fmd : cmd.getDeclaredFields()) {
+ String fmdName = fmd.getName();
+ if (fmdName.equals(fieldName)) {
+ return fmd;
+ }
+ }
+ return null;
+ }
+}
Propchange: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/java/org/apache/openjpa/enhance/stats/FetchStatisticsAuxEnhancer.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/java/org/apache/openjpa/enhance/stats/FetchStatsCollector.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/java/org/apache/openjpa/enhance/stats/FetchStatsCollector.java?rev=1356860&view=auto
==============================================================================
--- openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/java/org/apache/openjpa/enhance/stats/FetchStatsCollector.java (added)
+++ openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/java/org/apache/openjpa/enhance/stats/FetchStatsCollector.java Tue Jul 3 18:21:24 2012
@@ -0,0 +1,149 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.enhance.stats;
+
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.Map;
+import java.util.Set;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.TreeSet;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.openjpa.lib.log.Log;
+import org.apache.openjpa.lib.util.Localizer;
+import org.apache.openjpa.meta.ClassMetaData;
+
+/**
+ * FetchStatsCollector aggregates fetch statistics and outputs the data periodically (10 minutes).
+ */
+public final class FetchStatsCollector {
+ // Fully qualified persistent field name -> number of access
+ private static ConcurrentHashMap<String, AtomicInteger> _used = new ConcurrentHashMap<String, AtomicInteger>();
+ private static Set<String> _entities = new TreeSet<String>();
+
+ private static Log _log;
+ private static final Localizer _loc = Localizer.forPackage(FetchStatsCollector.class);
+ // default to 10 min
+ private final static int DEFAULT_INTERVAL = 10 * 60 * 1000;
+ private static Timer timer;
+
+ public static void setlogger(Log log) {
+ if (FetchStatsCollector._log == null) {
+ FetchStatsCollector._log = log;
+ FetchStatsCollector._log.info(_loc.get("start-monitoring"));
+ }
+ }
+
+ static {
+ Runtime.getRuntime().addShutdownHook(new Shutdown());
+ AccessController.doPrivileged(new PrivilegedAction<Object>() {
+ public Object run() {
+ TimerTask statsOutputTask = new TimerTask() {
+ public void run() {
+ dump();
+ }
+ };
+ timer = new Timer();
+ timer.schedule(statsOutputTask, DEFAULT_INTERVAL, DEFAULT_INTERVAL);
+ return null;
+ }
+ });
+ }
+
+ public static void registerEntity(ClassMetaData cmd) {
+ _entities.add(cmd.getDescribedTypeString());
+ }
+
+ public static AtomicInteger registerField(String field) {
+ return _used.putIfAbsent(field, new AtomicInteger(Integer.valueOf(0)));
+ }
+
+ public static void hit(String field) {
+ AtomicInteger value = _used.get(field);
+ if (value != null) {
+ value.incrementAndGet();
+ }
+ }
+
+ static class Shutdown extends Thread {
+ @Override
+ public void run() {
+ timer.cancel();
+ dump();
+ }
+ }
+
+ public static Set<String> getStatistics() {
+ // TreeSet for a sorted set.
+ Set<String> noAccess = new TreeSet<String>();
+ for (Map.Entry<String, AtomicInteger> entry : _used.entrySet()) {
+ if (entry.getValue().intValue() == 0) {
+ noAccess.add(entry.getKey());
+ }
+ }
+
+ return noAccess;
+ }
+
+ public static void dump() {
+ Set<String> zeroAccessFieldSet = getStatistics();
+
+ StringBuilder message = new StringBuilder();
+ message.append(_loc.get("fields-never-fetched",
+ new Object[] { _entities, new Integer(zeroAccessFieldSet.size()) }).getMessage());
+
+ for (String field : zeroAccessFieldSet) {
+ message.append("\n\t" + field);
+
+ }
+ _log.info(message);
+ }
+
+ public static void clear() {
+ for (Map.Entry<String, AtomicInteger> entry : _used.entrySet()) {
+ entry.setValue(new AtomicInteger(0));
+ }
+ }
+
+ static class Container {
+ String _name;
+ Integer _value;
+
+ public Container(String name, int value) {
+ _name = name;
+ _value = value;
+ }
+
+ String getName() {
+ return _name;
+ }
+
+ public Integer getValue() {
+ return _value;
+ }
+
+ @Override
+ public String toString() {
+ return _name;
+ }
+ }
+}
Propchange: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/java/org/apache/openjpa/enhance/stats/FetchStatsCollector.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/META-INF/services/org.apache.openjpa.enhance.PCEnhancer$AuxiliaryEnhancer
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/META-INF/services/org.apache.openjpa.enhance.PCEnhancer%24AuxiliaryEnhancer?rev=1356860&view=auto
==============================================================================
--- openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/META-INF/services/org.apache.openjpa.enhance.PCEnhancer$AuxiliaryEnhancer (added)
+++ openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/META-INF/services/org.apache.openjpa.enhance.PCEnhancer$AuxiliaryEnhancer Tue Jul 3 18:21:24 2012
@@ -0,0 +1,17 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+org.apache.openjpa.enhance.stats.FetchStatisticsAuxEnhancer
Propchange: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/META-INF/services/org.apache.openjpa.enhance.PCEnhancer$AuxiliaryEnhancer
------------------------------------------------------------------------------
svn:eol-style = native
Added: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/README-WEBSPHERE.txt
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/README-WEBSPHERE.txt?rev=1356860&view=auto
==============================================================================
--- openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/README-WEBSPHERE.txt (added)
+++ openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/README-WEBSPHERE.txt Tue Jul 3 18:21:24 2012
@@ -0,0 +1,29 @@
+Apache OpenJPA - README.txt
+Licensed under Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0
+--------------------------------------------------------------------------------
+
+Open JPA Fetch Statistics Tool monitors persistent field access and determines which fields are never used. This tool
+can be used to help tune an application.
+
+Note: Open JPA Fetching Statistics Tool works with the runtime enhancement.
+
+Usage instructions:
+
+1.] Configuration
+ * Add openjpa-fetch-statistics-[VERSION]-websphere.jar into the [WAS_HOME]\plugins directory.
+ * Run [WAS_HOME]\bin\osgiCfgInit.sh(bat) to clear the osgi cache.
+
+2.] Statistics Collecting and Monitoring
+ * When this tool is configured, it will be active for all persistence units in the JVM. Statistics will be dumped via the
+ openjpa.Runtime channel with the INFO level every 10 minutes, or when the JVM terminates. Any field that is logged
+ has not been accessed by an application.
+
+3.] Configuration removal
+ * Stop all WebSphere processes using the [WAS_HOME]\plugins installation.
+ * Remove the openjpa-fetch-statistics-[VERSION]-websphere.jar jar from the [WAS_HOME]\plugins directory.
+ * Run [WAS_HOME]\bin\osgiCfgInit.sh(bat) to clear the osgi cache.
+
+Performance Consideration
+
+There will be a large performance impact when running this tooling. It is not supported, nor recommended for production
+use. This tool should not be used on a production machine.
Propchange: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/README-WEBSPHERE.txt
------------------------------------------------------------------------------
svn:eol-style = native
Added: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/README.txt
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/README.txt?rev=1356860&view=auto
==============================================================================
--- openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/README.txt (added)
+++ openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/README.txt Tue Jul 3 18:21:24 2012
@@ -0,0 +1,64 @@
+Apache OpenJPA - README.txt
+Licensed under Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0
+--------------------------------------------------------------------------------
+
+Open JPA Fetching Statistics Tool monitors the persistent fields
+fetching and finds out the fields which are never accessed. Based on the
+statistic data, user can set the field access type to LAZY to improve the
+performance by eliminating the data loading and processing time.
+
+Note: Open JPA Fetching Statistics Tool works with the runtime enhancement.
+
+Usage instructions:
+
+1 Classpath Configuration
+
+ Append the path of openjpa-fetch-statistics-version-SNAPSHOT.jar file
+ to the classpath of the application before starting the application.
+
+2 Statistics Collecting and Monitoring
+
+ Start the application with openjpa-fetch-statistics-<version>-SNAPSHOT.jar
+ in the classpath. The tool will start collecting the statistics of the
+ persistent field fetching and output the list of the persistent fields
+ which have never been fetched to the log file every ten minutes.It will
+ output the last list when the JVM is shutdown.
+
+3 Termination
+ Shut down the JVM to stop the fetching statistics collecting.
+ Roll back the classpath configuration.
+ Start the application without the fetching statistics jar in the classpath
+
+Performance Consideration
+
+There will be performance impact when the fetching statistics collection is on.
+The recommendation is to use it in the testing environment.
+
+Apache OpenJPA - README.txt
+Licensed under Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0
+--------------------------------------------------------------------------------
+
+Open JPA Fetch Statistics Tool monitors persistent field access and determines which fields are never used. This tool
+can be used to help tune an application.
+
+Note: Open JPA Fetching Statistics Tool works with the runtime enhancement.
+
+Usage instructions:
+
+1.] Configuration
+ * Append the path of openjpa-fetch-statistics-version-SNAPSHOT.jar file to the classpath prior to lanuching the JVM.
+
+2.] Statistics Collecting and Monitoring
+ * When this tool is configured, it will be active for all persistence units in the JVM. Statistics will be dumped via the
+ openjpa.Runtime channel with the INFO level every 10 minutes, or when the JVM terminates. Any field that is logged
+ has not been accessed by an application.
+
+3.] Configuration removal
+ * Stop the JVM.
+ * Remove openjpa-fetch-statistics-version-SNAPSHOT.jar from the classpath.
+
+Performance Consideration
+
+There will be a large performance impact when running this tooling. It is not supported, nor recommended for production
+use. This tool should not be used on a production machine.
+
Propchange: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/README.txt
------------------------------------------------------------------------------
svn:eol-style = native
Added: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/org/apache/openjpa/enhance/stats/localizer.properties
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/org/apache/openjpa/enhance/stats/localizer.properties?rev=1356860&view=auto
==============================================================================
--- openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/org/apache/openjpa/enhance/stats/localizer.properties (added)
+++ openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/org/apache/openjpa/enhance/stats/localizer.properties Tue Jul 3 18:21:24 2012
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+fields-never-fetched: Successfully collected fetch statistics from Entities {0}. The following fields are \
+ FetchType.EAGER and were never fetched [ total {1} ] :
+start-monitoring: The FetchStatisticsAuxEnhancer has been loaded and is tracking persistent field usage.
Propchange: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/main/resources/org/apache/openjpa/enhance/stats/localizer.properties
------------------------------------------------------------------------------
svn:eol-style = native
Added: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/AEntity.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/AEntity.java?rev=1356860&view=auto
==============================================================================
--- openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/AEntity.java (added)
+++ openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/AEntity.java Tue Jul 3 18:21:24 2012
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.enhance.stats;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+@Entity
+public class AEntity {
+
+ @Id
+ private int id;
+ private String name;
+ private String desc;
+ private boolean checked;
+ private EEntity extraInfo;
+
+ @ManyToOne
+ private BEntity referredBEntity;
+
+
+ public AEntity(int id, String name, String desc, BEntity bEntity) {
+ super();
+ this.id = id;
+ this.name = name;
+ this.desc = desc;
+ referredBEntity = bEntity;
+ extraInfo = new EEntity("extra " + desc, "E" + id);
+ }
+
+ public String getFullInfo(){
+ return name + desc;
+ }
+
+
+ public boolean isChecked(){
+ return checked;
+ }
+
+ public String getReferredBEntityName(){
+ return referredBEntity.getName();
+ }
+
+ public String getExtraInfo(){
+ return extraInfo.getExtraDesc();
+ }
+
+}
Propchange: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/AEntity.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/BEntity.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/BEntity.java?rev=1356860&view=auto
==============================================================================
--- openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/BEntity.java (added)
+++ openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/BEntity.java Tue Jul 3 18:21:24 2012
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.openjpa.enhance.stats;
+
+import javax.persistence.Access;
+import javax.persistence.AccessType;
+import javax.persistence.Basic;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+@Entity
+@Inheritance(strategy=InheritanceType.JOINED)
+@Access(AccessType.PROPERTY)
+public class BEntity {
+
+ private int id;
+ private String name;
+ private boolean bool;
+
+ @Id
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+
+ @Access(AccessType.FIELD)
+ private String desc;
+
+ public String getName() {
+ return name;
+ }
+
+ public String getCustomDesc(){
+ return desc;
+ }
+
+ public BEntity(int id, String name, String desc) {
+ super();
+ setId(id);
+ setName(name);
+ setDesc(desc);
+ }
+
+ public BEntity() {
+ super();
+ }
+
+ public void setBool(boolean b){
+ bool = b;
+ }
+
+ @Basic
+ public boolean isBool(){
+ return bool;
+ }
+}
Propchange: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/BEntity.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/ChildEntity.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/ChildEntity.java?rev=1356860&view=auto
==============================================================================
--- openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/ChildEntity.java (added)
+++ openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/ChildEntity.java Tue Jul 3 18:21:24 2012
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.openjpa.enhance.stats;
+
+import javax.persistence.Entity;
+import javax.persistence.PrimaryKeyJoinColumn;
+
+@Entity
+@PrimaryKeyJoinColumn(name = "CHILDID", referencedColumnName = "ID")
+public class ChildEntity extends BEntity {
+
+ private int childId;
+ private String childName;
+ private String childDesc;
+
+ public int getChildId() {
+ return childId;
+ }
+
+ public void setChildId(int childId) {
+ this.childId = childId;
+ }
+
+ public void setChildDesc(String childDesc) {
+ this.childDesc = childDesc;
+ }
+
+ public String getChildDesc() {
+ return childDesc;
+ }
+
+ public String getChildName() {
+ return childName;
+ }
+
+ public void setChildName(String childName) {
+ this.childName = childName;
+ }
+
+ public ChildEntity(int id, String name, String desc, String childName) {
+ super(id, name, desc);
+ setChildName(childName);
+ setChildDesc("test");
+ setChildId(id);
+ }
+}
Propchange: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/ChildEntity.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/EEntity.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/EEntity.java?rev=1356860&view=auto
==============================================================================
--- openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/EEntity.java (added)
+++ openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/EEntity.java Tue Jul 3 18:21:24 2012
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.openjpa.enhance.stats;
+
+import javax.persistence.Embeddable;
+
+
+@Embeddable
+public class EEntity {
+ String extraDesc;
+ public String getExtraDesc() {
+ return extraDesc;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ String code;
+
+ public EEntity (String desc, String code) {
+ this.extraDesc = desc;
+ this.code = code;
+ }
+
+
+}
Propchange: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/EEntity.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/TestFetchStatistics.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/TestFetchStatistics.java?rev=1356860&view=auto
==============================================================================
--- openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/TestFetchStatistics.java (added)
+++ openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/TestFetchStatistics.java Tue Jul 3 18:21:24 2012
@@ -0,0 +1,173 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.openjpa.enhance.stats;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Set;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+import org.apache.openjpa.enhance.PCEnhancer;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for Open JPA Fetch Statistic.
+ */
+public class TestFetchStatistics extends TestCase {
+
+ /**
+ * Create the test case
+ *
+ * @param testName
+ * name of the test case
+ */
+ public TestFetchStatistics(String testName) {
+ super(testName);
+ }
+
+ /**
+ * @return the suite of tests being tested
+ */
+ public static Test suite() {
+ return new TestSuite(TestFetchStatistics.class);
+ }
+
+ public void setUp() {
+ EntityManagerFactory emf = Persistence.createEntityManagerFactory("fetchStatisticPU");
+ emf.createEntityManager().close();
+ FetchStatsCollector.clear();
+ }
+
+ public void tearDown() {
+ }
+
+ public void testFieldAccess() {
+ FetchStatsCollector.clear();
+
+ AEntity aEntity = new AEntity(1, "t", "d", null);
+
+
+ Set<String> res = FetchStatsCollector.getStatistics();
+ assertTrue(res.contains("org.apache.openjpa.enhance.stats.AEntity.name"));
+ assertTrue(res.contains("org.apache.openjpa.enhance.stats.AEntity.desc"));
+
+ assertEquals("td", aEntity.getFullInfo());
+ res = FetchStatsCollector.getStatistics();
+ assertFalse(res.contains("org.apache.openjpa.enhance.stats.AEntity.name"));
+ assertFalse(res.contains("org.apache.openjpa.enhance.stats.AEntity.desc"));
+
+ }
+
+ public void testEmbeddedEntityFieldAccess() {
+ AEntity aEntity = new AEntity(1, "t1", "d1", null);
+
+ assertEquals("extra d1", aEntity.getExtraInfo());
+
+ Set<String> res = FetchStatsCollector.getStatistics();
+
+ assertFalse(res.contains("org.apache.openjpa.enhance.stats.AEntity.extraInfo"));
+ }
+
+ public void testPropertyFieldMixedAccess() {
+ FetchStatsCollector.clear();
+
+ BEntity b = new BEntity(2, "t2", "d2");
+
+ Set<String> res = FetchStatsCollector.getStatistics();
+
+ assertTrue(res.toString(), res.contains("org.apache.openjpa.enhance.stats.BEntity.name"));
+ assertTrue(res.toString(), res.contains("org.apache.openjpa.enhance.stats.BEntity.bool"));
+
+ b.getName();
+ b.isBool();
+
+ res = FetchStatsCollector.getStatistics();
+
+ assertFalse(res.contains("org.apache.openjpa.enhance.stats.BEntity.name"));
+ assertFalse(res.contains("org.apache.openjpa.enhance.stats.BEntity.bool"));
+
+ }
+
+ public void testMixedAccess() {
+ BEntity e = new BEntity(1, "t1", "d1");
+
+
+ Set<String> res = FetchStatsCollector.getStatistics();
+
+ assertTrue(res.contains("org.apache.openjpa.enhance.stats.BEntity.name"));
+ assertTrue(res.contains("org.apache.openjpa.enhance.stats.BEntity.desc"));
+
+ e.getName();
+ e.getCustomDesc();
+
+ res = FetchStatsCollector.getStatistics();
+
+ assertFalse(res.contains("org.apache.openjpa.enhance.stats.BEntity.name"));
+ assertFalse(res.contains("org.apache.openjpa.enhance.stats.BEntity.desc"));
+
+ }
+
+ public void testFieldAccessThroughRelationship() {
+ BEntity bf1 = new BEntity(1, "t1", "d1");
+ AEntity af3 = new AEntity(3, "t3", "d3", bf1);
+
+ assertEquals("t1", af3.getReferredBEntityName());
+ af3.isChecked();
+
+ Set<String> res = FetchStatsCollector.getStatistics();
+
+ assertFalse(res.contains("org.apache.openjpa.enhance.stats.AEntity.checked"));
+ }
+
+ public void testPropertyAccessThroughInheritance() {
+ FetchStatsCollector.clear();
+
+ ChildEntity cEntity = new ChildEntity(1, "t1", "d1", "cn1");
+
+ Set<String> res = FetchStatsCollector.getStatistics();
+
+ assertTrue(res.contains("org.apache.openjpa.enhance.stats.ChildEntity.childName"));
+ assertTrue(res.contains("org.apache.openjpa.enhance.stats.BEntity.name"));
+ assertTrue(res.contains("org.apache.openjpa.enhance.stats.BEntity.desc"));
+
+ // touch fields
+ cEntity.getChildName();
+ cEntity.getName();
+ cEntity.getCustomDesc();
+
+
+ res = FetchStatsCollector.getStatistics();
+
+ assertFalse(res.contains("org.apache.openjpa.enhance.stats.ChildEntity.childName"));
+ assertFalse(res.contains("org.apache.openjpa.enhance.stats.BEntity.name"));
+ assertFalse(res.contains("org.apache.openjpa.enhance.stats.BEntity.desc"));
+ }
+
+ // used for manual test of the output interval
+ public void _testOutputInterval() throws InterruptedException {
+ Thread.currentThread().sleep(60 * 60 * 1000);
+ }
+}
Propchange: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/java/org/apache/openjpa/enhance/stats/TestFetchStatistics.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/resources/META-INF/persistence.xml
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/resources/META-INF/persistence.xml?rev=1356860&view=auto
==============================================================================
--- openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/resources/META-INF/persistence.xml (added)
+++ openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/resources/META-INF/persistence.xml Tue Jul 3 18:21:24 2012
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
+ license agreements. See the NOTICE file distributed with this work for additional
+ information regarding copyright ownership. The ASF licenses this file to
+ you under the Apache License, Version 2.0 (the "License"); you may not use
+ this file except in compliance with the License. You may obtain a copy of
+ the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
+ by applicable law or agreed to in writing, software distributed under the
+ License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ OF ANY KIND, either express or implied. See the License for the specific
+ language governing permissions and limitations under the License. -->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
+
+ <persistence-unit name="fetchStatisticPU" transaction-type="RESOURCE_LOCAL">
+ <description>PU for openjpa fetch statistic testing</description>
+ <provider>org.apache.openjpa.persistence.PersistenceProviderImpl
+ </provider>
+ <class>org.apache.openjpa.enhance.stats.AEntity</class>
+ <class>org.apache.openjpa.enhance.stats.BEntity</class>
+ <class>org.apache.openjpa.enhance.stats.ChildEntity</class>
+ <class>org.apache.openjpa.enhance.stats.EEntity</class>
+ </persistence-unit>
+
+</persistence>
Propchange: openjpa/trunk/openjpa-tools/openjpa-fetch-statistics/src/test/resources/META-INF/persistence.xml
------------------------------------------------------------------------------
svn:eol-style = native
Modified: openjpa/trunk/openjpa-tools/pom.xml
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-tools/pom.xml?rev=1356860&r1=1356859&r2=1356860&view=diff
==============================================================================
--- openjpa/trunk/openjpa-tools/pom.xml (original)
+++ openjpa/trunk/openjpa-tools/pom.xml Tue Jul 3 18:21:24 2012
@@ -42,6 +42,8 @@
<modules>
<module>openjpa-maven-plugin</module>
+ <module>openjpa-fetch-statistics</module>
+
</modules>
<profiles>