Difference between revisions of "Software Repository"
Luca.frosini (Talk | contribs) (→Functionality) |
Manuele.simi (Talk | contribs) (→Dependencies) |
||
(28 intermediate revisions by 2 users not shown) | |||
Line 13: | Line 13: | ||
The Software Repository is a WSRF service, implemented as specified by the Singleton Pattern. | The Software Repository is a WSRF service, implemented as specified by the Singleton Pattern. | ||
− | The service includes a Validation phase that checks software archives based on service profiles declarations. It control also that service profiles are valid against the service profile schema. Controls performed includes checking that all declared files are in the right place into the service archive structure. After validation phase (if successful) it store in a pending state all packages declared in service profile. When the Software Archive is approved the Software Repository finally store all packages in the repository for dynamic deployment | + | The service includes a Validation phase that checks software archives based on service profiles declarations. It control also that service profiles are valid against the service profile schema. Controls performed includes checking that all declared files are in the right place into the service archive structure. After validation phase (if successful) it store in a pending state all packages declared in service profile. When the Software Archive is approved the Software Repository finally store all packages in the repository for dynamic deployment. |
+ | |||
+ | To submit a Software Archive to the Software Repository some clients are avalaiable. More information are available [[Software_Repository_Clients | here]]. | ||
Line 22: | Line 24: | ||
===== store ===== | ===== store ===== | ||
<pre> | <pre> | ||
− | store( | + | store(Store) -> String |
</pre> | </pre> | ||
This operation stores a software archive into the Software Repository in pending state. Pending status means that software archive is valid, and receive an unique ID that it was not previously used. | This operation stores a software archive into the Software Repository in pending state. Pending status means that software archive is valid, and receive an unique ID that it was not previously used. | ||
The main issue of this method is the validation. You can find more informations about the controls performed on [[ Software_Archive_Specification | Software Archives Specification]] | The main issue of this method is the validation. You can find more informations about the controls performed on [[ Software_Archive_Specification | Software Archives Specification]] | ||
+ | |||
+ | |||
+ | ''Store'' is an array of ''StoreMessage'' type. | ||
''StoreMessage'' type contains Service Class, Service Name and Version of the service, the URL from where the software archive can be downloaded, and the service description. Further contains a String[] with scopes where the Service should be published. | ''StoreMessage'' type contains Service Class, Service Name and Version of the service, the URL from where the software archive can be downloaded, and the service description. Further contains a String[] with scopes where the Service should be published. | ||
Line 73: | Line 78: | ||
− | During this phase a Report about the validation is generated. You can find informations about the [[ Report_Generation | Report Generation]] | + | During this phase a Report about the validation is generated. You can find informations about the [[ Report_Generation | Report Generation]] |
+ | |||
+ | ===== listPending ===== | ||
+ | <pre> | ||
+ | listPending( ) -> String | ||
+ | </pre> | ||
+ | |||
+ | ''Return'' This operation returns an XML containing all stored service archives with status pending. The XML structure is as follow: | ||
+ | |||
+ | <pre> | ||
+ | <Services> | ||
+ | <Service> | ||
+ | <Id>d253bca0-5903-11dd-9bc1-c9ec09a1eecb</Id> | ||
+ | <Class>VREManagement</Class> | ||
+ | <Name>Deployer</Name> | ||
+ | <Version>0.0.0</Version> | ||
+ | </Service> | ||
+ | </Services> | ||
+ | </pre> | ||
===== approve ===== | ===== approve ===== | ||
Line 111: | Line 134: | ||
''Return'' The method returns the URI from where the requested package can be downloaded. | ''Return'' The method returns the URI from where the requested package can be downloaded. | ||
− | ===== | + | ===== isDeployable ===== |
<pre> | <pre> | ||
− | + | isDeployable(String) -> boolean | |
</pre> | </pre> | ||
− | + | With this functionality it is possible to know if a service is deployable. This means all dependences are deployable too. | |
− | + | ''String'' Service ID | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | ===== | + | ''Return'' true if and only if the dependency resolution has success and there are not missing dependency, false otherwise |
+ | |||
+ | ===== listScopedPackagesByServiceData ===== | ||
<pre> | <pre> | ||
− | + | listScopedPackagesByServiceData(ListScopedPackagesByServiceDataMessage) -> String | |
</pre> | </pre> | ||
− | + | This operation lists all dependencies with a certain scope level given as argument. | |
− | '' | + | ''ListScopedPackagesByServiceDataMessage'' type contains Service Class, Service Name, Service Version and scope(GHN, VRE, VO) |
− | ''Return'' | + | ''Return'' XML string with solved and missing (if any) dependency |
<pre> | <pre> | ||
− | < | + | <DependencyResolutionReport> |
− | < | + | <ResolvedDependencies> |
− | < | + | <Dependency> |
− | + | <Service> | |
− | <Version>1. | + | <Class>Portal</Class> |
− | + | <Name>ThumbnailService</Name> | |
− | + | <Version>1.00.00</Version> | |
− | <Version>1.1</Version> | + | </Service> |
− | + | <Package>Thumbnailer-service</Package> | |
− | </ | + | <Version>1.00.00</Version> |
+ | <Scope level="GHN"/> | ||
+ | </Dependency> | ||
+ | <Dependency> | ||
+ | <Service> | ||
+ | <Class>Portal</Class> | ||
+ | <Name>ThumbnailService</Name> | ||
+ | <Version>1.00.00</Version> | ||
+ | </Service> | ||
+ | <Package>Thumbnailer-stubs</Package> | ||
+ | <Version>1.00.00</Version> | ||
+ | <Scope level="GHN"/> | ||
+ | </Dependency> | ||
+ | </ResolvedDependencies> | ||
+ | <MissingDependencies> | ||
+ | <MissingDependency> | ||
+ | <Service> | ||
+ | <Class>ExternalSoftware</Class> | ||
+ | <Name>imageJ</Name> | ||
+ | <Version>1.40.00</Version> | ||
+ | </Service> | ||
+ | <Package>imageJ</Package> | ||
+ | <Version>1.40.00</Version> | ||
+ | <Scope level="GHN"/> | ||
+ | </MissingDependency> | ||
+ | </MissingDependencies> | ||
+ | </DependencyResolutionReport> | ||
</pre> | </pre> | ||
===== listScopedPackages ===== | ===== listScopedPackages ===== | ||
<pre> | <pre> | ||
− | listScopedPackages(ListScopedPackagesMessage) -> | + | listScopedPackages(ListScopedPackagesMessage) -> String |
</pre> | </pre> | ||
Line 162: | Line 204: | ||
''ListScopedPackagesMessage'' type contains serviceID and scope(GHN, VRE, VO) | ''ListScopedPackagesMessage'' type contains serviceID and scope(GHN, VRE, VO) | ||
− | ''Return'' | + | ''Return'' XML string with solved and missing (if any) dependency |
<pre> | <pre> | ||
− | < | + | <DependencyResolutionReport> |
− | < | + | <ResolvedDependencies> |
− | < | + | <Dependency> |
− | + | <Service> | |
− | <Version>1. | + | <Class>Portal</Class> |
− | + | <Name>ThumbnailService</Name> | |
− | + | <Version>1.00.00</Version> | |
− | <Version>1.1</Version> | + | </Service> |
− | + | <Package>Thumbnailer-service</Package> | |
− | </ | + | <Version>1.00.00</Version> |
+ | <Scope level="GHN"/> | ||
+ | </Dependency> | ||
+ | <Dependency> | ||
+ | <Service> | ||
+ | <Class>Portal</Class> | ||
+ | <Name>ThumbnailService</Name> | ||
+ | <Version>1.00.00</Version> | ||
+ | </Service> | ||
+ | <Package>Thumbnailer-stubs</Package> | ||
+ | <Version>1.00.00</Version> | ||
+ | <Scope level="GHN"/> | ||
+ | </Dependency> | ||
+ | </ResolvedDependencies> | ||
+ | <MissingDependencies> | ||
+ | <MissingDependency> | ||
+ | <Service> | ||
+ | <Class>ExternalSoftware</Class> | ||
+ | <Name>imageJ</Name> | ||
+ | <Version>1.40.00</Version> | ||
+ | </Service> | ||
+ | <Package>imageJ</Package> | ||
+ | <Version>1.40.00</Version> | ||
+ | <Scope level="GHN"/> | ||
+ | </MissingDependency> | ||
+ | </MissingDependencies> | ||
+ | </DependencyResolutionReport> | ||
</pre> | </pre> | ||
===== listServicePackages ===== | ===== listServicePackages ===== | ||
<pre> | <pre> | ||
− | listServicePackages(ListServicePackagesMessage) -> | + | listServicePackages(ListServicePackagesMessage) -> StringArray |
</pre> | </pre> | ||
Line 186: | Line 254: | ||
''ListServicePackagesMessage'' type contains Service Class, Service Name, Service Version | ''ListServicePackagesMessage'' type contains Service Class, Service Name, Service Version | ||
− | ''Return'' an XML string | + | ''Return'' StringArray each element contains an XML string with all information about a package. The XML structure is as follow: |
<pre> | <pre> | ||
− | + | <Package> | |
− | + | <ServiceClass>VREManagement</ServiceClass> | |
− | <ServiceClass> | + | <ServiceName>Deployer</ServiceName> |
− | <ServiceName> | + | <ServiceVersion>1.00.00</ServiceVersion> |
− | <ServiceVersion>1. | + | <PackageName>Deployer-service</PackageName> |
− | <PackageName> | + | <PackageVersion>1.00.02</PackageVersion> |
− | <PackageVersion>1. | + | <PackageDescription></PackageDescription> |
− | <URL>http://dlib25.isti.cnr.it:80/maven/ | + | <URL>http://dlib25.isti.cnr.it:80/maven/VREManagement/Deployer/1/00/00/Deployer-service/1.00.02/Deployer-service-1.00.02.tar.gz</URL> |
− | <DocURL>http://dlib25.isti.cnr.it:80/maven/ | + | <DocURL>http://dlib25.isti.cnr.it:80/maven/VREManagement/Deployer/1/00/00/Deployer-service/1.00.02/doc/api/index.html</DocURL> |
− | <SVN>http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/ | + | <SVN>http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/vre-management/Deployer</SVN> |
− | + | </Package> | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
</pre> | </pre> | ||
+ | |||
+ | ===== listPluginsByServiceData ===== | ||
+ | |||
+ | This operation lists all plugins belonging a gCube Service starting from its Class, Name and Version. | ||
+ | |||
+ | This is a sample way to invoke the operation: | ||
+ | |||
+ | <source lang="Java"> | ||
+ | |||
+ | import org.gcube.vremanagement.softwarerepository.stubs.ListPluginsByServiceDataMessage; | ||
+ | import org.gcube.vremanagement.softwarerepository.stubs.SoftwareRepositoryPortType; | ||
+ | import org.gcube.vremanagement.softwarerepository.stubs.service.SoftwareRepositoryServiceAddressingLocator; | ||
+ | ... | ||
+ | |||
+ | String serviceURI = "http://node8.d.d4science.research-infrastructures.eu:8080/wsrf/services/gcube/vremanagement/softwarerepository/SoftwareRepository"; | ||
+ | String serviceClass = "VREManagement"; | ||
+ | String serviceName = "Executor"; | ||
+ | String serviceVersion = "1.00.00"; | ||
+ | try { | ||
+ | EndpointReferenceType epr = new EndpointReferenceType(); | ||
+ | epr.setAddress(new AttributedURI(serviceURI)); | ||
+ | GCUBEScope gCubeScope = GCUBEScope.getScope("/CNRPrivate"); | ||
+ | SoftwareRepositoryServiceAddressingLocator locator = new SoftwareRepositoryServiceAddressingLocator(); | ||
+ | SoftwareRepositoryPortType portType = locator.getSoftwareRepositoryPortTypePort(epr); | ||
+ | portType = GCUBERemotePortTypeContext.getProxy(portType,gCubeScope); | ||
+ | ListPluginsByServiceDataMessage message = new ListPluginsByServiceDataMessage(); | ||
+ | message.setServiceClass(serviceClass); | ||
+ | message.setServiceName(serviceName); | ||
+ | message.setServiceVersion(serviceVersion); | ||
+ | String ret = portType.listPluginsByServiceData(message); | ||
+ | System.out.println(ret); | ||
+ | } catch (Exception e) { | ||
+ | return; | ||
+ | } | ||
+ | ... | ||
+ | </source> | ||
+ | |||
+ | And this is a sample response one may get from such a call: | ||
+ | |||
+ | <source lang="xml"> | ||
+ | <ServicePlugins> | ||
+ | <Service> | ||
+ | <Class>Samples</Class> | ||
+ | <Name>SamplePlugin</Name> | ||
+ | <Version>1.00.00</Version> | ||
+ | </Service> | ||
+ | <Service> | ||
+ | <Class>Samples</Class> | ||
+ | <Name>SamplePluginN2</Name> | ||
+ | <Version>1.00.00</Version> | ||
+ | </Service> | ||
+ | </ServicePlugins> | ||
+ | </source> | ||
+ | |||
+ | ==== Underlying DB ==== | ||
+ | |||
+ | A Software Repository instance relies on an embedded instance of [http://hsqldb.org HLSQL DB]. In the default configuration, the instance is stored under the following folder: | ||
+ | <pre> | ||
+ | ~/.gcore/persisted/<host>-<port>/SoftwareRepository/dbFolder | ||
+ | </pre> | ||
+ | |||
+ | In order to interact with the database instance in an off line manner (i.e. without the mediation of the SR), the [http://hsqldb.org/doc/guide/ch08.html SqlTool] can be used. Run | ||
+ | <pre> | ||
+ | java -jar $GLOBUS_LOCATION/lib/hsqldb.jar --inlineRc url=jdbc:hsqldb:file:~/.gcore/persisted/<host>-<port>/SoftwareRepository/dbFolder/db,user=sa,password= --driver org.hsqldb.jdbcDriver | ||
+ | </pre> | ||
+ | for an interactive use of SqlTool. | ||
=== Dependencies === | === Dependencies === | ||
Line 216: | Line 340: | ||
The dependencies of the Package Repository Service are: | The dependencies of the Package Repository Service are: | ||
*GHN: to host service. | *GHN: to host service. | ||
− | *Commons-compress from Jakarta: | + | *Commons-compress from Jakarta: File compression functionality. |
*hsqldb: to use the DB | *hsqldb: to use the DB | ||
*MavenCustom: to use maven repository functionality | *MavenCustom: to use maven repository functionality | ||
+ | |||
+ | === Test-Suite === | ||
+ | |||
+ | [TBP] | ||
=== Know Bugs and Limitations === | === Know Bugs and Limitations === | ||
[[Category:VRE Management]] | [[Category:VRE Management]] |
Latest revision as of 18:41, 17 December 2009
Contents
Software Repository
Introduction
The Software Repository validates Software Archive, and stores and manages Packages. It checks packages dependencies and giving both access to packages relations and access to the stored packages supports the dynamic packages deployment.
This repository accepts registration requests coming from the Sofware Archive Registration Portlet that is part of the VRE Management
Implentation Overview
This component is responsible for the validation, storage, and maintenance of the Software Archives, each software archive contains all files declared on the Service Profile . It checks packages dependencies and by ensuring access to them, it supports the dynamic packages deployment.
The Software Repository is a WSRF service, implemented as specified by the Singleton Pattern.
The service includes a Validation phase that checks software archives based on service profiles declarations. It control also that service profiles are valid against the service profile schema. Controls performed includes checking that all declared files are in the right place into the service archive structure. After validation phase (if successful) it store in a pending state all packages declared in service profile. When the Software Archive is approved the Software Repository finally store all packages in the repository for dynamic deployment.
To submit a Software Archive to the Software Repository some clients are avalaiable. More information are available here.
Functionality
The signatures of the actual implemented methods are presented below. These operations allow uploading, deleting, listing, and getting package. As well as other advanced operations that operate over packages dependencies.
store
store(Store) -> String
This operation stores a software archive into the Software Repository in pending state. Pending status means that software archive is valid, and receive an unique ID that it was not previously used. The main issue of this method is the validation. You can find more informations about the controls performed on Software Archives Specification
Store is an array of StoreMessage type.
StoreMessage type contains Service Class, Service Name and Version of the service, the URL from where the software archive can be downloaded, and the service description. Further contains a String[] with scopes where the Service should be published.
Return String containing an XML with the information about the validation of Software Archive.
An example of this XML String is:
<Services> <Service> <URL>http://grids16.eng.it/repository_recent_builds/org.gcube.HEAD/BUILD_187/org.gcube.vo-management.credential-renewal-servicearchive.HEAD/org.gcube.vo-management.credential-renewal-servicearchive-0.0.0-0.tar.gz</URL> <ID>082677d0-5cf3-11dd-a000-e94252afcc8c</ID> <ServiceClass>DVOS</ServiceClass> <ServiceName>CredentialsRenewalService</ServiceName> <ServiceVersion>0.0.0</ServiceVersion> <Status>ERROR</Status> <Operation>NEW</Operation> <Timestamp>1217283477453</Timestamp> <ReportURL>http://dlib05.isti.cnr.it:80/report/29-07-2008/082677d0-5cf3-11dd-a000-e94252afcc8c_1217283477453.xml</ReportURL> </Service> <Service> <URL>http://grids16.eng.it/repository_recent_builds/org.gcube.HEAD/BUILD_187/org.gcube.vre-management.deployer-servicearchive.HEAD/org.gcube.vre-management.deployer-servicearchive-0.0.0-0.tar.gz</URL> <ID>d253bca0-5903-11dd-9bc1-c9ec09a1eecb</ID> <ServiceClass>VREManagement</ServiceClass> <ServiceName>Deployer</ServiceName> <ServiceVersion>0.0.0</ServiceVersion> <Status>SUCCESS</Status> <Operation>UPDATE</Operation> <Timestamp>1217283478524</Timestamp> <ReportURL>http://dlib05.isti.cnr.it:80/report/29-07-2008/d253bca0-5903-11dd-9bc1-c9ec09a1eecb_1217283478524.xml</ReportURL> </Service> <Service> <URL>http://grids16.eng.it/repository_recent_builds/org.gcube.HEAD/BUILD_187/org.gcube.vre-management.software-repository-servicearchive.HEAD/org.gcube.vre-management.software-repository-servicearchive-0.0.0-0.tar.gz</URL> <ID>d31c63d0-5903-11dd-9bc1-c9ec09a1eecb</ID> <ServiceClass>VREManagement</ServiceClass> <ServiceName>SoftwareRepository</ServiceName> <ServiceVersion>0.0.0</ServiceVersion> <Status>SUCCESS</Status> <Operation>UPDATE</Operation> <Timestamp>1217283480125</Timestamp> <ReportURL>http://dlib05.isti.cnr.it:80/report/29-07-2008/d31c63d0-5903-11dd-9bc1-c9ec09a1eecb_1217283480125.xml</ReportURL> </Service> </Services>
During this phase a Report about the validation is generated. You can find informations about the Report Generation
listPending
listPending( ) -> String
Return This operation returns an XML containing all stored service archives with status pending. The XML structure is as follow:
<Services> <Service> <Id>d253bca0-5903-11dd-9bc1-c9ec09a1eecb</Id> <Class>VREManagement</Class> <Name>Deployer</Name> <Version>0.0.0</Version> </Service> </Services>
approve
approve (String) -> String
Approve an already stored service archive with the service ID passed as argument if exists.
String Service ID
Return It returns OK if operation success, an error message otherwise.
ATTENTION The Software Repository Running Instance (RI) have to be available in all scopes it have to publish the service profile.
delete
delete (String) -> String
This operation deletes a stored pending Software Archive from the Software Repository with the service ID passed as argument if exists.
String Service ID
Return It returns OK if operation success, an error message otherwise.
get
get(GetMessage) -> String
GetMessage type contains Service Class, Service Name, Service Version, Package Name and Package Version of the requested package
Return The method returns the URI from where the requested package can be downloaded.
isDeployable
isDeployable(String) -> boolean
With this functionality it is possible to know if a service is deployable. This means all dependences are deployable too.
String Service ID
Return true if and only if the dependency resolution has success and there are not missing dependency, false otherwise
listScopedPackagesByServiceData
listScopedPackagesByServiceData(ListScopedPackagesByServiceDataMessage) -> String
This operation lists all dependencies with a certain scope level given as argument.
ListScopedPackagesByServiceDataMessage type contains Service Class, Service Name, Service Version and scope(GHN, VRE, VO)
Return XML string with solved and missing (if any) dependency
<DependencyResolutionReport> <ResolvedDependencies> <Dependency> <Service> <Class>Portal</Class> <Name>ThumbnailService</Name> <Version>1.00.00</Version> </Service> <Package>Thumbnailer-service</Package> <Version>1.00.00</Version> <Scope level="GHN"/> </Dependency> <Dependency> <Service> <Class>Portal</Class> <Name>ThumbnailService</Name> <Version>1.00.00</Version> </Service> <Package>Thumbnailer-stubs</Package> <Version>1.00.00</Version> <Scope level="GHN"/> </Dependency> </ResolvedDependencies> <MissingDependencies> <MissingDependency> <Service> <Class>ExternalSoftware</Class> <Name>imageJ</Name> <Version>1.40.00</Version> </Service> <Package>imageJ</Package> <Version>1.40.00</Version> <Scope level="GHN"/> </MissingDependency> </MissingDependencies> </DependencyResolutionReport>
listScopedPackages
listScopedPackages(ListScopedPackagesMessage) -> String
This operation lists all dependencies with a certain scope level given as argument.
ListScopedPackagesMessage type contains serviceID and scope(GHN, VRE, VO)
Return XML string with solved and missing (if any) dependency
<DependencyResolutionReport> <ResolvedDependencies> <Dependency> <Service> <Class>Portal</Class> <Name>ThumbnailService</Name> <Version>1.00.00</Version> </Service> <Package>Thumbnailer-service</Package> <Version>1.00.00</Version> <Scope level="GHN"/> </Dependency> <Dependency> <Service> <Class>Portal</Class> <Name>ThumbnailService</Name> <Version>1.00.00</Version> </Service> <Package>Thumbnailer-stubs</Package> <Version>1.00.00</Version> <Scope level="GHN"/> </Dependency> </ResolvedDependencies> <MissingDependencies> <MissingDependency> <Service> <Class>ExternalSoftware</Class> <Name>imageJ</Name> <Version>1.40.00</Version> </Service> <Package>imageJ</Package> <Version>1.40.00</Version> <Scope level="GHN"/> </MissingDependency> </MissingDependencies> </DependencyResolutionReport>
listServicePackages
listServicePackages(ListServicePackagesMessage) -> StringArray
This operation lists all packages belonging the Service.
ListServicePackagesMessage type contains Service Class, Service Name, Service Version
Return StringArray each element contains an XML string with all information about a package. The XML structure is as follow:
<Package> <ServiceClass>VREManagement</ServiceClass> <ServiceName>Deployer</ServiceName> <ServiceVersion>1.00.00</ServiceVersion> <PackageName>Deployer-service</PackageName> <PackageVersion>1.00.02</PackageVersion> <PackageDescription></PackageDescription> <URL>http://dlib25.isti.cnr.it:80/maven/VREManagement/Deployer/1/00/00/Deployer-service/1.00.02/Deployer-service-1.00.02.tar.gz</URL> <DocURL>http://dlib25.isti.cnr.it:80/maven/VREManagement/Deployer/1/00/00/Deployer-service/1.00.02/doc/api/index.html</DocURL> <SVN>http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/vre-management/Deployer</SVN> </Package>
listPluginsByServiceData
This operation lists all plugins belonging a gCube Service starting from its Class, Name and Version.
This is a sample way to invoke the operation:
import org.gcube.vremanagement.softwarerepository.stubs.ListPluginsByServiceDataMessage; import org.gcube.vremanagement.softwarerepository.stubs.SoftwareRepositoryPortType; import org.gcube.vremanagement.softwarerepository.stubs.service.SoftwareRepositoryServiceAddressingLocator; ... String serviceURI = "http://node8.d.d4science.research-infrastructures.eu:8080/wsrf/services/gcube/vremanagement/softwarerepository/SoftwareRepository"; String serviceClass = "VREManagement"; String serviceName = "Executor"; String serviceVersion = "1.00.00"; try { EndpointReferenceType epr = new EndpointReferenceType(); epr.setAddress(new AttributedURI(serviceURI)); GCUBEScope gCubeScope = GCUBEScope.getScope("/CNRPrivate"); SoftwareRepositoryServiceAddressingLocator locator = new SoftwareRepositoryServiceAddressingLocator(); SoftwareRepositoryPortType portType = locator.getSoftwareRepositoryPortTypePort(epr); portType = GCUBERemotePortTypeContext.getProxy(portType,gCubeScope); ListPluginsByServiceDataMessage message = new ListPluginsByServiceDataMessage(); message.setServiceClass(serviceClass); message.setServiceName(serviceName); message.setServiceVersion(serviceVersion); String ret = portType.listPluginsByServiceData(message); System.out.println(ret); } catch (Exception e) { return; } ...
And this is a sample response one may get from such a call:
<ServicePlugins> <Service> <Class>Samples</Class> <Name>SamplePlugin</Name> <Version>1.00.00</Version> </Service> <Service> <Class>Samples</Class> <Name>SamplePluginN2</Name> <Version>1.00.00</Version> </Service> </ServicePlugins>
Underlying DB
A Software Repository instance relies on an embedded instance of HLSQL DB. In the default configuration, the instance is stored under the following folder:
~/.gcore/persisted/<host>-<port>/SoftwareRepository/dbFolder
In order to interact with the database instance in an off line manner (i.e. without the mediation of the SR), the SqlTool can be used. Run
java -jar $GLOBUS_LOCATION/lib/hsqldb.jar --inlineRc url=jdbc:hsqldb:file:~/.gcore/persisted/<host>-<port>/SoftwareRepository/dbFolder/db,user=sa,password= --driver org.hsqldb.jdbcDriver
for an interactive use of SqlTool.
Dependencies
The dependencies of the Package Repository Service are:
- GHN: to host service.
- Commons-compress from Jakarta: File compression functionality.
- hsqldb: to use the DB
- MavenCustom: to use maven repository functionality
Test-Suite
[TBP]