You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DefaultCassandraArchivaManager.java 24KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538
  1. package org.apache.archiva.metadata.repository.cassandra;
  2. /*
  3. * Licensed to the Apache Software Foundation (ASF) under one
  4. * or more contributor license agreements. See the NOTICE file
  5. * distributed with this work for additional information
  6. * regarding copyright ownership. The ASF licenses this file
  7. * to you under the Apache License, Version 2.0 (the
  8. * "License"); you may not use this file except in compliance
  9. * with the License. You may obtain a copy of the License at
  10. *
  11. * http://www.apache.org/licenses/LICENSE-2.0
  12. *
  13. * Unless required by applicable law or agreed to in writing,
  14. * software distributed under the License is distributed on an
  15. * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  16. * KIND, either express or implied. See the License for the
  17. * specific language governing permissions and limitations
  18. * under the License.
  19. */
  20. import com.datastax.oss.driver.api.core.CqlSession;
  21. import com.datastax.oss.driver.api.core.CqlSessionBuilder;
  22. import com.datastax.oss.driver.api.core.config.DefaultDriverOption;
  23. import com.datastax.oss.driver.api.core.config.DriverConfigLoader;
  24. import com.datastax.oss.driver.api.core.type.DataTypes;
  25. import com.datastax.oss.driver.api.querybuilder.schema.CreateIndex;
  26. import com.datastax.oss.driver.api.querybuilder.schema.CreateKeyspace;
  27. import com.datastax.oss.driver.api.querybuilder.schema.CreateTableWithOptions;
  28. import org.apache.archiva.metadata.repository.RepositorySessionFactoryBean;
  29. import org.apache.commons.lang3.StringUtils;
  30. import org.slf4j.Logger;
  31. import org.slf4j.LoggerFactory;
  32. import org.springframework.beans.factory.annotation.Value;
  33. import org.springframework.context.ApplicationContext;
  34. import org.springframework.stereotype.Service;
  35. import javax.annotation.PostConstruct;
  36. import javax.annotation.PreDestroy;
  37. import javax.inject.Inject;
  38. import java.time.Duration;
  39. import java.util.ArrayList;
  40. import java.util.Arrays;
  41. import java.util.List;
  42. import static com.datastax.oss.driver.api.querybuilder.SchemaBuilder.*;
  43. import static org.apache.archiva.metadata.repository.cassandra.model.ColumnNames.*;
  44. /**
  45. * FIXME make all configuration not hardcoded :-)
  46. *
  47. * @author Olivier Lamy
  48. * @since 2.0.0
  49. */
  50. @Service( "archivaEntityManagerFactory#cassandra" )
  51. public class DefaultCassandraArchivaManager
  52. implements CassandraArchivaManager
  53. {
  54. private static final Logger logger = LoggerFactory.getLogger( DefaultCassandraArchivaManager.class );
  55. @Inject
  56. private ApplicationContext applicationContext;
  57. private static final String CLUSTER_NAME = "archiva";
  58. private static final String KEYSPACE_NAME = "ArchivaKeySpace";
  59. private boolean started;
  60. // configurable???
  61. private String repositoryFamilyName = "repository";
  62. private String namespaceFamilyName = "namespace";
  63. private String projectFamilyName = PROJECT.toString( );
  64. private String projectVersionMetadataFamilyName = "projectversionmetadata";
  65. private String artifactMetadataFamilyName = "artifactmetadata";
  66. private String metadataFacetFamilyName = "metadatafacet";
  67. private String mailingListFamilyName = "mailinglist";
  68. private String licenseFamilyName = "license";
  69. private String dependencyFamilyName = "dependency";
  70. private String checksumFamilyName = "checksum";
  71. private static String[] projectVersionMetadataColumns;
  72. static
  73. {
  74. projectVersionMetadataColumns = new String[]{
  75. DEFAULT_PRIMARY_KEY,
  76. NAMESPACE_ID.toString( ),
  77. REPOSITORY_NAME.toString( ),
  78. PROJECT_VERSION.toString( ),
  79. PROJECT_ID.toString( ),
  80. DESCRIPTION.toString( ),
  81. URL.toString( ),
  82. NAME.toString( ),
  83. VERSION.toString( ),
  84. VERSION_PROPERTIES.toString( ),
  85. "incomplete",
  86. "ciManagement.system",
  87. "ciManagement.url",
  88. "issueManagement.system",
  89. "issueManagement.url",
  90. "organization.name",
  91. "organization.url",
  92. "scm.url",
  93. "scm.connection",
  94. "scm.developerConnection"
  95. };
  96. Arrays.sort( projectVersionMetadataColumns );
  97. }
  98. @Value( "${cassandra.host}" )
  99. private String cassandraHost;
  100. @Value( "${cassandra.port}" )
  101. private String cassandraPort;
  102. @Value( "${cassandra.maxActive}" )
  103. private int maxActive;
  104. @Value( "${cassandra.driverTimeoutMs}" )
  105. private int driverTimeoutMs;
  106. @Value( "${cassandra.readConsistencyLevel}" )
  107. private String readConsistencyLevel;
  108. @Value( "${cassandra.writeConsistencyLevel}" )
  109. private String writeConsistencyLevel;
  110. @Value( "${cassandra.replicationFactor}" )
  111. private int replicationFactor;
  112. @Value( "${cassandra.keyspace.name}" )
  113. private String keyspaceName;
  114. @Value( "${cassandra.cluster.name}" )
  115. private String clusterName;
  116. @Inject
  117. private RepositorySessionFactoryBean repositorySessionFactoryBean;
  118. DriverConfigLoader configLoader;
  119. CqlSession cqlSession;
  120. @Override
  121. public CqlSessionBuilder getSessionBuilder( )
  122. {
  123. return CqlSession.builder( ).withConfigLoader( configLoader ).withKeyspace( keyspaceName ).withLocalDatacenter( "datacenter1" );
  124. }
  125. @Override
  126. public CqlSession getSession( )
  127. {
  128. if (cqlSession==null || cqlSession.isClosed()) {
  129. this.cqlSession = getSessionBuilder( ).build( );
  130. }
  131. return this.cqlSession;
  132. }
  133. @PostConstruct
  134. public void initialize( )
  135. {
  136. // skip initialisation if not cassandra
  137. if ( !StringUtils.equals( repositorySessionFactoryBean.getId( ), "cassandra" ) )
  138. {
  139. return;
  140. }
  141. List<String> hostNames = new ArrayList<>( );
  142. hostNames.add( cassandraHost + ":" + cassandraPort );
  143. configLoader =
  144. DriverConfigLoader.programmaticBuilder( )
  145. .withStringList( DefaultDriverOption.CONTACT_POINTS, hostNames )
  146. .withInt( DefaultDriverOption.CONNECTION_POOL_LOCAL_SIZE, maxActive )
  147. .withInt( DefaultDriverOption.CONNECTION_POOL_REMOTE_SIZE, maxActive )
  148. //.withInt( DefaultDriverOption.CONNECTION_MAX_REQUESTS, maxActive )
  149. .withString( DefaultDriverOption.REQUEST_CONSISTENCY, readConsistencyLevel )
  150. .withDuration( DefaultDriverOption.REQUEST_TIMEOUT, Duration.ofMillis( driverTimeoutMs ) )
  151. .build( );
  152. {
  153. CreateKeyspace cKeySpace = createKeyspace( keyspaceName ).ifNotExists( ).withSimpleStrategy( replicationFactor );
  154. CqlSession.builder( ).withConfigLoader( configLoader ).withLocalDatacenter( "datacenter1" ).build().execute( cKeySpace.build( ) );
  155. }
  156. CqlSession session = getSession( );
  157. {
  158. // namespace table
  159. {
  160. String tableName = getNamespaceFamilyName( );
  161. CreateTableWithOptions table = createTable( keyspaceName, tableName ).ifNotExists( )
  162. .withPartitionKey( CassandraArchivaManager.DEFAULT_PRIMARY_KEY, DataTypes.TEXT )
  163. .withColumn( NAME.toString( ), DataTypes.TEXT )
  164. .withColumn( REPOSITORY_NAME.toString( ), DataTypes.TEXT )
  165. .withCompactStorage( );
  166. session.execute( table.build( ) );
  167. CreateIndex index = createIndex( NAME.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( NAME.toString( ) );
  168. session.execute( index.build( ) );
  169. index = createIndex( REPOSITORY_NAME.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( REPOSITORY_NAME.toString( ) );
  170. session.execute( index.build( ) );
  171. }
  172. // Repository Table
  173. {
  174. String tableName = getRepositoryFamilyName( );
  175. CreateTableWithOptions table = createTable( keyspaceName, tableName ).ifNotExists( )
  176. .withPartitionKey( CassandraArchivaManager.DEFAULT_PRIMARY_KEY, DataTypes.TEXT )
  177. .withColumn( REPOSITORY_NAME.toString( ), DataTypes.TEXT )
  178. .withCompactStorage( );
  179. session.execute( table.build( ) );
  180. CreateIndex index = createIndex( REPOSITORY_NAME.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( REPOSITORY_NAME.toString( ) );
  181. session.execute( index.build( ) );
  182. }
  183. // Project table
  184. {
  185. String tableName = getProjectFamilyName( );
  186. CreateTableWithOptions table = createTable( keyspaceName, tableName ).ifNotExists( )
  187. .withPartitionKey( CassandraArchivaManager.DEFAULT_PRIMARY_KEY, DataTypes.TEXT )
  188. .withColumn( PROJECT_ID.toString( ), DataTypes.TEXT )
  189. .withColumn( REPOSITORY_NAME.toString( ), DataTypes.TEXT )
  190. .withColumn( NAMESPACE_ID.toString( ), DataTypes.TEXT )
  191. .withColumn( PROJECT_PROPERTIES.toString( ), DataTypes.frozenMapOf( DataTypes.TEXT, DataTypes.TEXT ) )
  192. .withCompactStorage( );
  193. session.execute( table.build( ) );
  194. CreateIndex index = createIndex( PROJECT_ID.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( PROJECT_ID.toString( ) );
  195. session.execute( index.build( ) );
  196. index = createIndex( REPOSITORY_NAME.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( REPOSITORY_NAME.toString( ) );
  197. session.execute( index.build( ) );
  198. index = createIndex( NAMESPACE_ID.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( NAMESPACE_ID.toString( ) );
  199. session.execute( index.build( ) );
  200. }
  201. // Project Version Metadata Model
  202. {
  203. String tableName = getProjectVersionMetadataFamilyName( );
  204. CreateTableWithOptions table = createTable( keyspaceName, tableName ).ifNotExists( )
  205. .withPartitionKey( CassandraArchivaManager.DEFAULT_PRIMARY_KEY, DataTypes.TEXT )
  206. .withColumn( NAMESPACE_ID.toString( ), DataTypes.TEXT )
  207. .withColumn( REPOSITORY_NAME.toString( ), DataTypes.TEXT )
  208. .withColumn( PROJECT_VERSION.toString( ), DataTypes.TEXT )
  209. .withColumn( PROJECT_ID.toString( ), DataTypes.TEXT )
  210. .withColumn( DESCRIPTION.toString( ), DataTypes.TEXT )
  211. .withColumn( URL.toString( ), DataTypes.TEXT )
  212. .withColumn( NAME.toString(), DataTypes.TEXT )
  213. .withColumn( VERSION.toString(), DataTypes.TEXT )
  214. .withColumn( VERSION_PROPERTIES.toString(), DataTypes.mapOf( DataTypes.TEXT, DataTypes.TEXT ) )
  215. .withColumn( "incomplete", DataTypes.BOOLEAN )
  216. .withColumn( "\"ciManagement.system\"", DataTypes.TEXT )
  217. .withColumn( "\"ciManagement.url\"", DataTypes.TEXT )
  218. .withColumn( "\"issueManagement.system\"", DataTypes.TEXT )
  219. .withColumn( "\"issueManagement.url\"", DataTypes.TEXT )
  220. .withColumn( "\"organization.name\"", DataTypes.TEXT )
  221. .withColumn( "\"organization.url\"", DataTypes.TEXT )
  222. .withColumn( "\"scm.url\"", DataTypes.TEXT )
  223. .withColumn( "\"scm.connection\"", DataTypes.TEXT )
  224. .withColumn( "\"scm.developerConnection\"", DataTypes.TEXT );
  225. session.execute( table.build( ) );
  226. CreateIndex index = createIndex( NAMESPACE_ID.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( NAMESPACE_ID.toString( ) );
  227. session.execute( index.build( ) );
  228. index = createIndex( REPOSITORY_NAME.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( REPOSITORY_NAME.toString( ) );
  229. session.execute( index.build( ) );
  230. index = createIndex( PROJECT_VERSION.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( PROJECT_VERSION.toString( ) );
  231. session.execute( index.build( ) );
  232. index = createIndex( PROJECT_ID.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( PROJECT_ID.toString( ) );
  233. session.execute( index.build( ) );
  234. index = createIndex( VERSION_PROPERTIES.toString( ) + "_idx" ).ifNotExists( ).onTable( tableName ).andColumnEntries( VERSION_PROPERTIES.toString( ) );
  235. session.execute( index.build( ) );
  236. }
  237. // Artifact Metadata Model
  238. {
  239. String tableName = getArtifactMetadataFamilyName( );
  240. CreateTableWithOptions table = createTable( keyspaceName, tableName ).ifNotExists( )
  241. .withPartitionKey( CassandraArchivaManager.DEFAULT_PRIMARY_KEY, DataTypes.TEXT )
  242. .withColumn( ID.toString( ), DataTypes.TEXT )
  243. .withColumn( REPOSITORY_NAME.toString( ), DataTypes.TEXT )
  244. .withColumn( NAMESPACE_ID.toString( ), DataTypes.TEXT )
  245. .withColumn( PROJECT_ID.toString( ), DataTypes.TEXT )
  246. .withColumn( PROJECT_VERSION.toString( ), DataTypes.TEXT )
  247. .withColumn( VERSION.toString( ), DataTypes.TEXT )
  248. .withColumn( WHEN_GATHERED.toString( ), DataTypes.BIGINT )
  249. .withColumn( SHA1.toString( ), DataTypes.TEXT )
  250. .withColumn( MD5.toString( ), DataTypes.TEXT )
  251. .withColumn( FILE_LAST_MODIFIED.toString(), DataTypes.BIGINT)
  252. .withColumn( SIZE.toString(), DataTypes.BIGINT )
  253. .withCompactStorage( );
  254. session.execute( table.build( ) );
  255. CreateIndex index = createIndex( ID.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( ID.toString( ) );
  256. session.execute( index.build( ) );
  257. index = createIndex( REPOSITORY_NAME.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( REPOSITORY_NAME.toString( ) );
  258. session.execute( index.build( ) );
  259. index = createIndex( NAMESPACE_ID.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( NAMESPACE_ID.toString( ) );
  260. session.execute( index.build( ) );
  261. index = createIndex( PROJECT_ID.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( PROJECT_ID.toString( ) );
  262. session.execute( index.build( ) );
  263. index = createIndex( PROJECT_VERSION.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( PROJECT_VERSION.toString( ) );
  264. session.execute( index.build( ) );
  265. index = createIndex( VERSION.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( VERSION.toString( ) );
  266. session.execute( index.build( ) );
  267. index = createIndex( WHEN_GATHERED.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( WHEN_GATHERED.toString( ) );
  268. session.execute( index.build( ) );
  269. index = createIndex( SHA1.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( SHA1.toString( ) );
  270. session.execute( index.build( ) );
  271. index = createIndex( MD5.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( MD5.toString( ) );
  272. session.execute( index.build( ) );
  273. }
  274. // Metadata Facet Model
  275. {
  276. String tableName = getMetadataFacetFamilyName( );
  277. CreateTableWithOptions table = createTable( keyspaceName, tableName ).ifNotExists( )
  278. .withPartitionKey( CassandraArchivaManager.DEFAULT_PRIMARY_KEY, DataTypes.TEXT )
  279. .withColumn( FACET_ID.toString( ), DataTypes.TEXT )
  280. .withColumn( REPOSITORY_NAME.toString( ), DataTypes.TEXT )
  281. .withColumn( NAME.toString( ), DataTypes.TEXT )
  282. .withColumn( NAMESPACE_ID.toString( ), DataTypes.TEXT )
  283. .withColumn( PROJECT_ID.toString( ), DataTypes.TEXT )
  284. .withColumn( PROJECT_VERSION.toString( ), DataTypes.TEXT )
  285. .withColumn( KEY.toString(), DataTypes.TEXT )
  286. .withColumn( VALUE.toString(), DataTypes.TEXT)
  287. .withColumn( WHEN_GATHERED.toString(), DataTypes.BIGINT )
  288. .withCompactStorage( );
  289. session.execute( table.build( ) );
  290. CreateIndex index = createIndex( FACET_ID.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( FACET_ID.toString( ) );
  291. session.execute( index.build( ) );
  292. index = createIndex( REPOSITORY_NAME.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( REPOSITORY_NAME.toString( ) );
  293. session.execute( index.build( ) );
  294. index = createIndex( NAME.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( NAME.toString( ) );
  295. session.execute( index.build( ) );
  296. index = createIndex( NAMESPACE_ID.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( NAMESPACE_ID.toString( ) );
  297. session.execute( index.build( ) );
  298. index = createIndex( PROJECT_ID.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( PROJECT_ID.toString( ) );
  299. session.execute( index.build( ) );
  300. index = createIndex( PROJECT_VERSION.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( PROJECT_VERSION.toString( ) );
  301. session.execute( index.build( ) );
  302. }
  303. // Checksum Table
  304. {
  305. String tableName = getChecksumFamilyName( );
  306. CreateTableWithOptions table = createTable( keyspaceName, tableName ).ifNotExists( )
  307. .withPartitionKey( DEFAULT_PRIMARY_KEY, DataTypes.TEXT )
  308. .withColumn( "\"artifactMetadataModel.key\"", DataTypes.TEXT )
  309. .withColumn( CHECKSUM_ALG.toString( ), DataTypes.TEXT )
  310. .withColumn( CHECKSUM_VALUE.toString( ), DataTypes.TEXT )
  311. .withColumn( REPOSITORY_NAME.toString( ), DataTypes.TEXT )
  312. .withCompactStorage( );
  313. session.execute( table.build( ) );
  314. CreateIndex index = createIndex( CHECKSUM_ALG.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( CHECKSUM_ALG.toString( ) );
  315. session.execute( index.build( ) );
  316. index = createIndex( CHECKSUM_VALUE.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( CHECKSUM_VALUE.toString( ) );
  317. session.execute( index.build( ) );
  318. index = createIndex( REPOSITORY_NAME.toString( ) ).ifNotExists( ).onTable( tableName ).andColumn( REPOSITORY_NAME.toString( ) );
  319. session.execute( index.build( ) );
  320. }
  321. // Mailinglist Table
  322. {
  323. String tableName = getMailingListFamilyName( );
  324. CreateTableWithOptions table = createTable( keyspaceName, tableName ).ifNotExists( )
  325. .withPartitionKey( CassandraArchivaManager.DEFAULT_PRIMARY_KEY, DataTypes.TEXT )
  326. .withColumn( NAME.toString(), DataTypes.TEXT )
  327. .withColumn( "\"projectVersionMetadataModel.key\"", DataTypes.TEXT )
  328. .withColumn( "mainArchiveUrl", DataTypes.TEXT )
  329. .withColumn( "postAddress", DataTypes.TEXT )
  330. .withColumn( "subscribeAddress", DataTypes.TEXT )
  331. .withColumn( "unsubscribeAddress", DataTypes.TEXT )
  332. .withColumn( "otherArchive", DataTypes.frozenListOf( DataTypes.TEXT ) )
  333. .withCompactStorage( );
  334. session.execute( table.build( ) );
  335. CreateIndex index = createIndex( "\"projectVersionMetadataModel_key\"" ).ifNotExists( ).onTable( tableName ).andColumn( "\"\"projectVersionMetadataModel.key\"\"" );
  336. session.execute( index.build( ) );
  337. }
  338. // License Table
  339. {
  340. String tableName = getLicenseFamilyName( );
  341. CreateTableWithOptions table = createTable( keyspaceName, tableName ).ifNotExists( )
  342. .withPartitionKey( CassandraArchivaManager.DEFAULT_PRIMARY_KEY, DataTypes.TEXT )
  343. .withColumn( "\"projectVersionMetadataModel.key\"", DataTypes.TEXT )
  344. .withColumn( NAME.toString(), DataTypes.TEXT )
  345. .withColumn( URL.toString(), DataTypes.TEXT )
  346. .withCompactStorage( );
  347. session.execute( table.build( ) );
  348. CreateIndex index = createIndex( "\"projectVersionMetadataModel_key\"" ).ifNotExists( ).onTable( tableName ).andColumn( "\"\"projectVersionMetadataModel.key\"\"" );
  349. session.execute( index.build( ) );
  350. }
  351. // Dependency Table
  352. {
  353. String tableName = getDependencyFamilyName( );
  354. CreateTableWithOptions table = createTable( keyspaceName, tableName ).ifNotExists( )
  355. .withPartitionKey( CassandraArchivaManager.DEFAULT_PRIMARY_KEY, DataTypes.TEXT )
  356. .withColumn( REPOSITORY_NAME.toString( ), DataTypes.TEXT )
  357. .withColumn( GROUP_ID.toString( ), DataTypes.TEXT )
  358. .withColumn( ARTIFACT_ID.toString( ), DataTypes.TEXT )
  359. .withColumn( VERSION.toString( ), DataTypes.TEXT )
  360. .withColumn( "\"projectVersionMetadataModel.key\"", DataTypes.TEXT )
  361. .withColumn( "classifier", DataTypes.TEXT )
  362. .withColumn( "optional", DataTypes.TEXT )
  363. .withColumn( "scope", DataTypes.TEXT )
  364. .withColumn( "systemPath", DataTypes.TEXT )
  365. .withColumn( "type", DataTypes.TEXT )
  366. .withCompactStorage( );
  367. session.execute( table.build( ) );
  368. CreateIndex index = createIndex( "groupIdIdx" ).ifNotExists( ).onTable( tableName ).andColumn( GROUP_ID.toString( ) );
  369. session.execute( index.build( ) );
  370. index = createIndex( "\"projectVersionMetadataModel_key\"" ).ifNotExists( ).onTable( tableName ).andColumn( "\"\"projectVersionMetadataModel.key\"\"" );
  371. session.execute( index.build( ) );
  372. }
  373. }
  374. }
  375. @Override
  376. public void start( )
  377. {
  378. }
  379. @PreDestroy
  380. @Override
  381. public void shutdown( )
  382. {
  383. if (this.cqlSession!=null) {
  384. this.cqlSession.close( );
  385. }
  386. }
  387. @Override
  388. public boolean started( )
  389. {
  390. return started;
  391. }
  392. @Override
  393. public String getRepositoryFamilyName( )
  394. {
  395. return repositoryFamilyName;
  396. }
  397. @Override
  398. public String getNamespaceFamilyName( )
  399. {
  400. return namespaceFamilyName;
  401. }
  402. @Override
  403. public String getProjectFamilyName( )
  404. {
  405. return projectFamilyName;
  406. }
  407. @Override
  408. public String getProjectVersionMetadataFamilyName( )
  409. {
  410. return projectVersionMetadataFamilyName;
  411. }
  412. public String[] getProjectVersionMetadataColumns() {
  413. return projectVersionMetadataColumns;
  414. }
  415. @Override
  416. public String getArtifactMetadataFamilyName( )
  417. {
  418. return artifactMetadataFamilyName;
  419. }
  420. @Override
  421. public String getMetadataFacetFamilyName( )
  422. {
  423. return metadataFacetFamilyName;
  424. }
  425. @Override
  426. public String getMailingListFamilyName( )
  427. {
  428. return mailingListFamilyName;
  429. }
  430. @Override
  431. public String getLicenseFamilyName( )
  432. {
  433. return licenseFamilyName;
  434. }
  435. @Override
  436. public String getDependencyFamilyName( )
  437. {
  438. return dependencyFamilyName;
  439. }
  440. @Override
  441. public String getChecksumFamilyName( )
  442. {
  443. return checksumFamilyName;
  444. }
  445. @Override
  446. public DriverConfigLoader getConfigLoader( )
  447. {
  448. return configLoader;
  449. }
  450. @Override
  451. public String getKeyspaceName( )
  452. {
  453. return keyspaceName;
  454. }
  455. }