Skip to Content.
Sympa Menu

perfsonar-dev - [pS-dev] [GEANT/SA2/ps-java-services] r6051 - in trunk: perfsonar-java-sql-ma perfsonar-java-sql-ma/sr c/main/java/org/perfsonar/service/measurementArchive/sqlTy pe perfsonar-java-sql-ma/src/main/resources/perfsonar/conf perfsonar_base/src/main/java/org/perfsonar/base/auxilia ry perfsonar_base/src/main/java/org/perfsonar/base/auxil iary/components perfsonar_base/src/main/java/org/perfson ar/base/auxiliary/components/jdbc

Subject: perfsonar development work

List archive

[pS-dev] [GEANT/SA2/ps-java-services] r6051 - in trunk: perfsonar-java-sql-ma perfsonar-java-sql-ma/sr c/main/java/org/perfsonar/service/measurementArchive/sqlTy pe perfsonar-java-sql-ma/src/main/resources/perfsonar/conf perfsonar_base/src/main/java/org/perfsonar/base/auxilia ry perfsonar_base/src/main/java/org/perfsonar/base/auxil iary/components perfsonar_base/src/main/java/org/perfson ar/base/auxiliary/components/jdbc


Chronological Thread 
  • From:
  • To:
  • Subject: [pS-dev] [GEANT/SA2/ps-java-services] r6051 - in trunk: perfsonar-java-sql-ma perfsonar-java-sql-ma/sr c/main/java/org/perfsonar/service/measurementArchive/sqlTy pe perfsonar-java-sql-ma/src/main/resources/perfsonar/conf perfsonar_base/src/main/java/org/perfsonar/base/auxilia ry perfsonar_base/src/main/java/org/perfsonar/base/auxil iary/components perfsonar_base/src/main/java/org/perfson ar/base/auxiliary/components/jdbc
  • Date: Tue, 4 Dec 2012 13:50:04 +0000 (GMT)

Author: nordunet.behrmann
Date: 2012-12-04 13:50:04 +0000 (Tue, 04 Dec 2012)
New Revision: 6051

Added:

trunk/perfsonar-java-sql-ma/src/main/java/org/perfsonar/service/measurementArchive/sqlType/BoneCPJdbcComponent.java

trunk/perfsonar_base/src/main/java/org/perfsonar/base/auxiliary/components/jdbc/

trunk/perfsonar_base/src/main/java/org/perfsonar/base/auxiliary/components/jdbc/JdbcComponent.java
Modified:
trunk/perfsonar-java-sql-ma/pom.xml

trunk/perfsonar-java-sql-ma/src/main/java/org/perfsonar/service/measurementArchive/sqlType/JdbcStorageManager.java

trunk/perfsonar-java-sql-ma/src/main/java/org/perfsonar/service/measurementArchive/sqlType/SQLTypeMAServiceEngine.java

trunk/perfsonar-java-sql-ma/src/main/resources/perfsonar/conf/components.properties

trunk/perfsonar_base/src/main/java/org/perfsonar/base/auxiliary/ComponentNames.java
Log:
perfsonar_base, perfsonar-java-sql-ma: Added component for DataSource
management

This patch elevates the BoneCP and data source management to a PerfSONAR Base
1
component. This ensures that BoneCP is shut down properly when reloading the
webapp.

Ideally we would let Tomcat manage the data source for us. We can consider to
refactor this code again at some point.

Modified: trunk/perfsonar-java-sql-ma/pom.xml
===================================================================
--- trunk/perfsonar-java-sql-ma/pom.xml 2012-12-04 13:50:01 UTC (rev 6050)
+++ trunk/perfsonar-java-sql-ma/pom.xml 2012-12-04 13:50:04 UTC (rev 6051)
@@ -213,7 +213,7 @@
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
- <version>5.1.9</version>
+ <version>5.1.21</version>
</dependency>
<dependency>
<groupId>postgresql</groupId>

Added:
trunk/perfsonar-java-sql-ma/src/main/java/org/perfsonar/service/measurementArchive/sqlType/BoneCPJdbcComponent.java
===================================================================
---
trunk/perfsonar-java-sql-ma/src/main/java/org/perfsonar/service/measurementArchive/sqlType/BoneCPJdbcComponent.java
(rev 0)
+++
trunk/perfsonar-java-sql-ma/src/main/java/org/perfsonar/service/measurementArchive/sqlType/BoneCPJdbcComponent.java
2012-12-04 13:50:04 UTC (rev 6051)
@@ -0,0 +1,71 @@
+package org.perfsonar.service.measurementArchive.sqlType;
+
+import com.jolbox.bonecp.BoneCPDataSource;
+import org.perfsonar.base.auxiliary.AuxiliaryComponentManager;
+import org.perfsonar.base.auxiliary.AuxiliaryThreadedComponent;
+import org.perfsonar.base.auxiliary.ComponentNames;
+import org.perfsonar.base.auxiliary.components.jdbc.JdbcComponent;
+import
org.perfsonar.base.auxiliary.components.configuration.ConfigurationComponent;
+import org.perfsonar.base.exceptions.PerfSONARException;
+
+import javax.sql.DataSource;
+
+import static com.google.common.base.Strings.nullToEmpty;
+
+public class BoneCPJdbcComponent implements AuxiliaryThreadedComponent,
JdbcComponent
+{
+ private static final String SERVICE_MA_JDBC_DRIVER =
"service.ma.jdbc.driver";
+ private static final String SERVICE_MA_JDBC_URL = "service.ma.jdbc.url";
+ private static final String SERVICE_MA_JDBC_USERNAME =
"service.ma.jdbc.username";
+ private static final String SERVICE_MA_JDBC_PASSWORD =
"service.ma.jdbc.password";
+
+ private String componentName;
+ private BoneCPDataSource dataSource;
+
+ @Override
+ public synchronized void initComponent() throws PerfSONARException
+ {
+ ConfigurationComponent config = (ConfigurationComponent)
AuxiliaryComponentManager.
+ getInstance().
+ getComponent(ComponentNames.CONFIG);
+
+ BoneCPDataSource ds = new BoneCPDataSource();
+
ds.setDriverClass(nullToEmpty(config.getProperty(SERVICE_MA_JDBC_DRIVER)));
+ ds.setJdbcUrl(nullToEmpty(config.getProperty(SERVICE_MA_JDBC_URL)));
+
ds.setUsername(nullToEmpty(config.getProperty(SERVICE_MA_JDBC_USERNAME)));
+
ds.setPassword(nullToEmpty(config.getProperty(SERVICE_MA_JDBC_PASSWORD)));
+
+ dataSource = ds;
+ }
+
+ @Override
+ public synchronized void stopThread()
+ {
+ if (dataSource != null) {
+ dataSource.close();
+ dataSource = null;
+ }
+ }
+
+ @Override
+ public synchronized String getComponentName()
+ {
+ return componentName;
+ }
+
+ @Override
+ public synchronized void setComponentName(String name)
+ {
+ componentName = name;
+ }
+
+ @Override
+ public synchronized DataSource getDataSource()
+ {
+ DataSource ds = dataSource;
+ if (ds == null) {
+ throw new IllegalStateException("Component has not been
initialized");
+ }
+ return ds;
+ }
+}

Modified:
trunk/perfsonar-java-sql-ma/src/main/java/org/perfsonar/service/measurementArchive/sqlType/JdbcStorageManager.java
===================================================================
---
trunk/perfsonar-java-sql-ma/src/main/java/org/perfsonar/service/measurementArchive/sqlType/JdbcStorageManager.java
2012-12-04 13:50:01 UTC (rev 6050)
+++
trunk/perfsonar-java-sql-ma/src/main/java/org/perfsonar/service/measurementArchive/sqlType/JdbcStorageManager.java
2012-12-04 13:50:04 UTC (rev 6051)
@@ -1,6 +1,5 @@
package org.perfsonar.service.measurementArchive.sqlType;

-import com.jolbox.bonecp.BoneCPDataSource;
import org.ggf.ns.nmwg.base.v2_0.Data;
import org.ggf.ns.nmwg.base.v2_0.Element;
import org.ggf.ns.nmwg.base.v2_0.Key;
@@ -8,7 +7,7 @@
import org.ggf.ns.nmwg.base.v2_0.Metadata;
import org.perfsonar.base.auxiliary.AuxiliaryComponentManager;
import org.perfsonar.base.auxiliary.ComponentNames;
-import
org.perfsonar.base.auxiliary.components.configuration.ConfigurationComponent;
+import org.perfsonar.base.auxiliary.components.jdbc.JdbcComponent;
import org.perfsonar.base.auxiliary.components.logger.LoggerComponent;
import org.perfsonar.base.exceptions.PerfSONARException;
import org.perfsonar.service.base.storage.NMWGStorageManager;
@@ -20,14 +19,13 @@
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionStatus;

+import javax.sql.DataSource;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.ServiceLoader;
import java.util.Vector;

-import static com.google.common.base.Strings.nullToEmpty;
-
/**
* NMWGStorageManager based on plain JDBC.
*
@@ -46,65 +44,26 @@
private static final String SERVICE_MA_JDBC_USERNAME =
"service.ma.jdbc.username";
private static final String SERVICE_MA_JDBC_PASSWORD =
"service.ma.jdbc.password";

- private static JdbcStorageManager instance;
+ private static final ServiceLoader<DaoProvider> PROVIDERS =
ServiceLoader.load(DaoProvider.class);

private final LoggerComponent logger;
- private final BoneCPDataSource dataSource;
+ private final DataSource dataSource;
private final FallibleTransactionTemplate tx;
private final Map<String, Dao> daos = new HashMap<String, Dao>();

- private final ServiceLoader<DaoProvider> providers =
ServiceLoader.load(DaoProvider.class);
-
- public static synchronized JdbcStorageManager getInstance() throws
PerfSONARException
+ public JdbcStorageManager() throws PerfSONARException
{
- if (instance == null) {
- instance = new JdbcStorageManager();
- }
- return instance;
- }
-
- private JdbcStorageManager() throws PerfSONARException
- {
logger = (LoggerComponent)
AuxiliaryComponentManager.
getInstance().
getComponent(ComponentNames.LOGGER);
-
- dataSource = createDataSource();
+ dataSource =
+ ((JdbcComponent) AuxiliaryComponentManager.
+ getInstance().
+ getComponent(ComponentNames.JDBC)).getDataSource();
tx = new FallibleTransactionTemplate(new
DataSourceTransactionManager(dataSource));
}

- private static BoneCPDataSource createDataSource() throws
PerfSONARException
- {
- ConfigurationComponent config = (ConfigurationComponent)
AuxiliaryComponentManager.
- getInstance().
- getComponent(ComponentNames.CONFIG);
-
- String driver =
nullToEmpty(config.getProperty(SERVICE_MA_JDBC_DRIVER));
- try {
- Class.forName(driver);
- } catch (ClassNotFoundException e) {
- throw new PerfSONARException("error.ma.query", "Unsupported JDBC
driver: " + driver);
- }
-
- final BoneCPDataSource dataSource = new BoneCPDataSource();
-
dataSource.setJdbcUrl(nullToEmpty(config.getProperty(SERVICE_MA_JDBC_URL)));
-
dataSource.setUsername(nullToEmpty(config.getProperty(SERVICE_MA_JDBC_USERNAME)));
-
dataSource.setPassword(nullToEmpty(config.getProperty(SERVICE_MA_JDBC_PASSWORD)));
-
- Runtime.getRuntime().addShutdownHook(
- new Thread()
- {
- public void run()
- {
- dataSource.close();
- }
- }
- );
-
- return dataSource;
- }
-
private synchronized Dao getDao(String eventType) throws
PerfSONARException
{
Dao dao = daos.get(eventType);
@@ -117,7 +76,7 @@

private Dao createDao(String eventType) throws PerfSONARException
{
- for (DaoProvider provider: providers) {
+ for (DaoProvider provider: PROVIDERS) {
Dao dao = provider.createDao(eventType, dataSource);
if (dao != null) {
return dao;

Modified:
trunk/perfsonar-java-sql-ma/src/main/java/org/perfsonar/service/measurementArchive/sqlType/SQLTypeMAServiceEngine.java
===================================================================
---
trunk/perfsonar-java-sql-ma/src/main/java/org/perfsonar/service/measurementArchive/sqlType/SQLTypeMAServiceEngine.java
2012-12-04 13:50:01 UTC (rev 6050)
+++
trunk/perfsonar-java-sql-ma/src/main/java/org/perfsonar/service/measurementArchive/sqlType/SQLTypeMAServiceEngine.java
2012-12-04 13:50:04 UTC (rev 6051)
@@ -1,10 +1,5 @@
-/**
- * $Id$
- * Project : perfSONAR
- */
package org.perfsonar.service.measurementArchive.sqlType;

-
import java.util.Collection;
import java.util.Date;
import java.util.Random;
@@ -45,32 +40,33 @@
public class SQLTypeMAServiceEngine implements ServiceEngine
{
/**
- * Type of service angine.
+ * Type of service engine.
*/
- protected String serviceEngineType = null;
+ private final String serviceEngineType;


/**
* The object to log control/debugging messages.
*/
- protected LoggerComponent logger = null;
+ private final LoggerComponent logger;


/**
* This object provides access to the service configuration
* (service.properties).
*/
- protected ConfigurationComponent configuration = null;
+ private final ConfigurationComponent configuration;


/**
* This object provides access to metadata configuration.
*/
- protected NMWGStorageManager metadataConfig = null;
+ private final NMWGStorageManager metadataConfig;

+ private final JdbcStorageManager storageManager;

- protected String dbStatus = null;
- protected String dbStore = null;
+ private final String dbStatus;
+ private final String dbStore;


/**
@@ -97,20 +93,17 @@

public SQLTypeMAServiceEngine() throws PerfSONARException
{
-
- this.serviceEngineType = "service.MeasurementArchive.SQLType";
- this.logger = getLogger();
- this.configuration = getConfiguration();
- setProperties();
-
serviceEngineType = "service.MeasurementArchive.SQLType";
+ logger = getLogger();
+ configuration = getConfiguration();
+ storageManager = new JdbcStorageManager();

- //use of MetadataConfigurationStorageManager is a must in SQL MA
service engine
- if (!(metadataConfig instanceof
MetadataConfigurationStorageManager)) {
- metadataConfig = new MetadataConfigurationStorageManager();
- metadataConfig.initStorage(null);
- }
+ // checking if using xml db is allowed
+ dbStatus = configuration.getProperty("component.ma.xmldb.db_status");
+ dbStore = configuration.getProperty("service.ma.xmldb.db_store");

+ metadataConfig = new MetadataConfigurationStorageManager();
+ metadataConfig.initStorage(null);
}


@@ -120,8 +113,6 @@
{
Message response = new Message();

- JdbcStorageManager storageManager = JdbcStorageManager.getInstance();
-
Message keyMessage = getKey(request);

boolean mustCopyMetadata = false;
@@ -164,8 +155,6 @@
{
Message response = new Message();

- JdbcStorageManager storageManager = JdbcStorageManager.getInstance();
-
for (Data data : (Collection<Data>) request.getDataMap().values()) {
Metadata meta = request.getMetadata(data.getMetadataIdRef());
if (meta != null) {
@@ -365,7 +354,7 @@
*
* @param actionType string specifying the type of action required
* on the given input
- * @param Message object containing the request
+ * @param request object containing the request
* @return Message object containing the response
* @throws PerfSONARException
* @see org.perfsonar.service.base.engine.ServiceEngine
@@ -488,39 +477,27 @@
throw new PerfSONARException(
"error.common.no_logger",
"SQLTypeMAServiceEngine.getLogger: "
- + "Cannot get logger component");
+ + "Cannot get logger component", e);
}
}

-
protected ConfigurationComponent getConfiguration() throws
PerfSONARException
{
try {
- configuration = (ConfigurationComponent)
AuxiliaryComponentManager.getInstance().
+ return (ConfigurationComponent)
AuxiliaryComponentManager.getInstance().
getComponent(ComponentNames.CONFIG);
} catch (PerfSONARException e) {
throw new PerfSONARException(
"error.common.no_configuration",
"SQLTypeMAServiceEngine.getConfiguration: "
- + "Cannot get config component");
+ + "Cannot get config component", e);
}
- return configuration;
}

-
- protected void setProperties() throws PerfSONARException
- {
-
- // checking if using xml db is allowed
- dbStatus = configuration.getProperty("component.ma.xmldb.db_status");
- dbStore = configuration.getProperty("service.ma.xmldb.db_store");
-
- }
-
/**
* Returns a key for a request message.
*
- * @param Message object containing the request
+ * @param request object containing the request
* @return Message object containing the response with a key
* @throws PerfSONARException
*/
@@ -551,7 +528,7 @@
* Removes base chaining (chains of metadata blocks linked by
* metadataIdRef attribute) from the message.
*
- * @param Message object to be processed
+ * @param message object to be processed
* @return Message processed message object
* @throws PerfSONARException
*/

Modified:
trunk/perfsonar-java-sql-ma/src/main/resources/perfsonar/conf/components.properties
===================================================================
---
trunk/perfsonar-java-sql-ma/src/main/resources/perfsonar/conf/components.properties
2012-12-04 13:50:01 UTC (rev 6050)
+++
trunk/perfsonar-java-sql-ma/src/main/resources/perfsonar/conf/components.properties
2012-12-04 13:50:04 UTC (rev 6051)
@@ -24,7 +24,10 @@


eventType_config=org.perfsonar.service.measurementArchive.eventTypeConfig.EventTypeConfigurationComponent

+# JDBC data source
+jdbc=org.perfsonar.service.measurementArchive.sqlType.BoneCPJdbcComponent

+
# Group=AuthN
# Description=Authentication component
authn=org.perfsonar.base.auxiliary.components.authn.wssec.WSSecAuthNComponent
\ No newline at end of file

Modified:
trunk/perfsonar_base/src/main/java/org/perfsonar/base/auxiliary/ComponentNames.java
===================================================================
---
trunk/perfsonar_base/src/main/java/org/perfsonar/base/auxiliary/ComponentNames.java
2012-12-04 13:50:01 UTC (rev 6050)
+++
trunk/perfsonar_base/src/main/java/org/perfsonar/base/auxiliary/ComponentNames.java
2012-12-04 13:50:04 UTC (rev 6051)
@@ -23,6 +23,8 @@
*/
public static final String CONTEXT = "context";

+ public static final String JDBC = "jdbc";
+
private ComponentNames()
{
}

Added:
trunk/perfsonar_base/src/main/java/org/perfsonar/base/auxiliary/components/jdbc/JdbcComponent.java
===================================================================
---
trunk/perfsonar_base/src/main/java/org/perfsonar/base/auxiliary/components/jdbc/JdbcComponent.java
(rev 0)
+++
trunk/perfsonar_base/src/main/java/org/perfsonar/base/auxiliary/components/jdbc/JdbcComponent.java
2012-12-04 13:50:04 UTC (rev 6051)
@@ -0,0 +1,8 @@
+package org.perfsonar.base.auxiliary.components.jdbc;
+
+import javax.sql.DataSource;
+
+public interface JdbcComponent
+{
+ DataSource getDataSource();
+}



  • [pS-dev] [GEANT/SA2/ps-java-services] r6051 - in trunk: perfsonar-java-sql-ma perfsonar-java-sql-ma/sr c/main/java/org/perfsonar/service/measurementArchive/sqlTy pe perfsonar-java-sql-ma/src/main/resources/perfsonar/conf perfsonar_base/src/main/java/org/perfsonar/base/auxilia ry perfsonar_base/src/main/java/org/perfsonar/base/auxil iary/components perfsonar_base/src/main/java/org/perfson ar/base/auxiliary/components/jdbc, svn-noreply, 12/04/2012

Archive powered by MHonArc 2.6.16.

Top of Page