Difference between revisions of "Pid Cache Manager Service"

From MPDLMediaWiki
Jump to navigation Jump to search
 
(35 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{ESciDoc Services}}
This Page describes the PID cache service.
This Page describes the PID cache service.


== Introduction ==
== ID (Label) ==
* The role of the PID cache service is to avoid unavailability of the PIDManager service hosted at the GWDG [https://www.escidoc.org/JSPWiki/en/PIDManager].
PIDC
* The PID cache service overrides the PIDManager service for the eSciDoc solutions.
* The PID cache service owned predefined PID which are assigned to eSciDoc Object by calling the Object Handler methods (assignObjectPid() and assignVersionPid()).


== Implementation ==
== Complete Name ==
* Since the role of the PId cache service is to override the PIDManager, its architecture intends to simulate the PIDManager.
PID Cache Manager Service
=== Interface ===
 
== Status ==
Running with pidmanager 0.6
 
== Description ==
* The PID cache service is a client to the [http://handle.gwdg.de:8080/pidservice/ GWDG PID Handle Service].
* The PID cache service is used as an alternative to the [https://www.escidoc.org/JSPWiki/en/PIDManager PIDManager service] offered by eSciDoc core infrastructure (PID Service without pre-cached PIDs).
* The PID cache service holds pre-created PIDs which are assigned to an eSciDoc content resource by calling the Item/Container Handler methods (assignObjectPid(), assignVersionPid() or assignContentPid()).
 
== Operations Overview ==
 
{| style=" height:340px" border="2"
|- bgcolor="#ccccff"
! width="150" |'''Operation'''
! width="150" |'''Status'''
!width="200"|'''Input''' 
! width="150" |'''Output'''
!width="300"|'''Description'''   
|- style="height:33px"
|create||implemented||URL:String||String||Scope:'''Public''' <br/>Assign a PID to an URL.
|-
|update||implemented||URL: String<br/>PID(handler): String||String||Scope:'''Public''' <br/>Update a PID with a new URL.
|-
|view||implemented||PID(handler):String||String||Scope:'''Public''' <br/>Retrieve a PID (If GWDG service unavailable, can only retrieve PID that are waiting in cache to be updated at the GWDG).
|-
|search||implemented||URL:String||String||Scope:'''Public''' <br/> Search for a PID (If GWDG service unavailable, can only search for PID that are waiting in cache to be updated at the GWDG). Implements only the search by URL so far. Might be extended.  
|}
 
 
== Service Interface ==
* The PID cache service provides a REST interface:
* The PID cache service provides a REST interface:
** GET: /<service>/<prefix>/<suffix> - resolve
** GET: /pidcache/handle/read, implemting 2 methods:
** PUT: /<service>/<prefix>/<suffix> - registration at PID system (Not implemented)
*** /view?pid= - resolve PID
** POST: /<service>/<prefix>/ - identifier generation and registration at PID system
*** /search?url= - Find a PID
** DELETE: /<service>/<prefix>/<suffix> - delete (Not allowed)
** PUT: Not allowed.
* <service>: the url of the pid cache service (for instance: dev-pubman.mpdl.mpg.de/pidcache/handle)
** POST: /pidcache/handle/write - Implements 2 methods:
* <prefix>/<suffix>: the method called:
*** /create - Create a PID at GWDG (url passed as body parameter).
** /read/view : Visualization of a PID.
*** /update?pid= - Update a PID with new url (url passed as body parameter)
** /read/search: Search of a PID.
** DELETE: (Not allowed)
** /write/create: Creation of a PID.
 
** /write/update: Update of a PID.
 
== Installation ==
# Install files in deploy directory:
## pidmanger.war
## pid_cache.ear
## pid-cache-ds.xml (see source below)
# Defines properties in conf directory and changes with your own credentials (see sources below):
## PidManager.properties
## gwdg.properties with: <entry key="service.url">http://your.escidoc.url.org:8080/pidcache/handle/</entry> (changes with correct escidoc url)
## pidcache.properties (if installed with pubman, then uses pubman.properties instead)
## escidoc-core.properties
 
=== pid-cache-ds.xml ===
<pre>
<?xml version="1.0" encoding="utf-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>PidCache</jndi-name>
<use-java-context>false</use-java-context>
<connection-url>jdbc:hsqldb:${jboss.server.data.dir}${/}hypersonic${/}localDB</connection-url>
<driver-class>org.hsqldb.jdbcDriver</driver-class>
<user-name>sa</user-name>
<password></password>
<min-pool-size>5</min-pool-size>
<max-pool-size>20</max-pool-size>
<idle-timeout-minutes>0</idle-timeout-minutes>
<track-statements/>
<security-domain>HsqlDbRealm</security-domain>
<prepared-statement-cache-size>32</prepared-statement-cache-size>
<metadata>
<type-mapping>Hypersonic SQL</type-mapping>
</metadata>
<depends>jboss:service=Hypersonic,database=localDB</depends>
</local-tx-datasource>
</datasources>
</pre>
 
=== escidoc-core.properties ===
<pre>
# uncomment following line to use the PID Manager as PID service backend
escidoc-core.PidSystemFactory = de.escidoc.core.common.persistence.impl.PIDManagerRESTServiceFactory
 
#
# set parameter for the PID Managment service
#
escidoc-core.PidSystemRESTService.host = http://localhost:8080/pidmanager/pid/
 
# must match <entry key="PIDManager:User"> in PidManager.properties
escidoc-core.PidSystemRESTService.user = pid_manager
 
# must match <entry key="PIDManager:Password"> in PidManager.properties
escidoc-core.PidSystemRESTService.password = XXX_SOME_PASSWORD_XXX
 
# must match <entry key="globalPrefix"> in gwdg.properties
escidoc-core.PidSystem.globalPrefix = gwdg
</pre>
 
=== gwdg.properties ===
<pre>
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Local Handle Resolver Access Parameter</comment>
<!-- customize values to your GWDG handle account -->
<entry key="globalPrefix">gwdg</entry>
 
<entry key="service.url">http://my.escidoc.url.org:8080/pidcache/handle/</entry>
<entry key="service.username">pid_manager</entry>
<entry key="service.password">XXX_SAME_PASSWORD_AS_IN_escodoc-core.properties_XXX</entry>
 
<!-- define path of service
e.g. http://hostname:port/pidmanager/pid
-->
<entry key="ResourcePath:Handle">/gwdg</entry>
<entry key="ResourcePath:Resolve">/gwdg/{suffix}</entry>
 
<!-- methods: semantic, random, serial, .. -->
<!-- debug creates an fixed identifier -->
<!-- semantic use the identifier which must be given via param. -->
<!-- <param><systemID>escidoc:40312:4</systemID></param> -->
<!-- The systemID is automatically added by framework stub.  -->
<!-- <entry key="generatorMethod">semantic</entry> -->
<!-- Use value "minter" to receive the identifier from the minter (NOID),
set to "service" to let the GWDG service create identifier -->
<entry key="IdGenerator:Mode">service</entry>
 
<!-- create identifier with local prefix -->
<!-- e.g. 12345/test-123abcd456, where test- is the -->
<!-- configured local prefix part. Leave it empty for no -->
<!-- prefix. -->
<entry key="localPrefix"></entry>
 
<!-- allow override identifier by client - this means preminted PIDs which are to register -->
<entry key="IdGenerator:Mode.override">true</entry>
 
<!-- log/debug -->
<entry key="debug">true</entry>
<entry key="debug.traceMessages">true</entry>
 
<!-- Run service without communication with Handle resolver (true/false) -->
<!-- All response values are predefined -->
<entry key="debug.coldRun">false</entry>
 
<!-- debug identifier must have at minimum length 3 -->
<entry key="debug.identifier">test-handle-123:3</entry>
 
<entry key="ResourceClass">de.escidoc.pidmanager.pidSystems.handleGWDG.Handle</entry>
 
<!-- Class binding -->
<entry key="BindingResources">Handle;Resolve</entry>
</properties>
</pre>
 
=== pidcache.properties ===
<pre>
# PID cache properties
escidoc.pidcache.cache.size.max=1000
escidoc.pidcache.refresh.interval=1
escidoc.pidcache.dummy.url=http://pubman.mpdl.mpg.de/pubman/faces/PidNotResolved.jsp?id=
escidoc.pid.gwdg.service.url=http://handle.gwdg.de:8080/pidservice
escidoc.pid.gwdg.timeout=10000
escidoc.pid.pidcache.service.url=http://localhost:8080/pidcache/handle
escidoc.pid.service.create.path=/write/create
escidoc.pid.service.view.path=/read/view
escidoc.pid.service.delete.path=/write/delete
escidoc.pid.service.update.path=/write/modify
escidoc.pid.service.search.path=/read/search
escidoc.pid.gwdg.user.login=XXX_YOUR_USER_XXX
escidoc.pid.gwdg.user.password=XXX_YOUR_PASSWORD_XX
# must match <entry key="PIDManager:User"> in PidManager.properties
escidoc.pidcache.user.name=pid_manager
# must match <entry key="PIDManager:Password"> in PidManager.properties
escidoc.pidcache.user.password=XXX_SAME_PASSWORD_AS_IN_escodoc-core.properties_XXX
</pre>
 
===PidManager.properties ===
<pre>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>REST Structure</comment>
<entry key="PIDManager:Port">8080</entry>
        <entry key="PIDManager:ServicePath">/handle</entry>
 
<!-- enable/disable access restriction -->
<entry key="PIDManager:RestrictAccess">true</entry>
<!-- change user and password -->
<entry key="PIDManager:User">pid_manager</entry>
<entry key="PIDManager:Password">XXX_SAME_PASSWORD_AS_IN_escodoc-core.properties_XXX</entry>
<!-- services -->
<entry key="Resources">gwdg</entry>
 
<entry key="Resource:gwdg">gwdg.properties</entry>
 
<!-- logging -->
<entry key="PIDManager:LogConfigFile">log4j-pidmanager.xml</entry>
 
<!-- Set path where static files accessible via HTTP -->
<entry key="IdGenerator:Storage">SQLite</entry>
<entry key="SQLite:DBFile">pidmanager.sqlite</entry>
 
<!-- Unique Identifier creation via NOID -->
<!-- entry key="PIDManager:NoidMinterURL">http://localhost/cgi-bin/minter/</entry -->
<entry key="IdGenerator:NoidMinterURL">http://localhost/cgi-bin/noid/niodu_kt5</entry>
 
</properties>
</pre>
[[Category:ESciDoc|PID Cache Manager Service]]
[[Category:ServiceOrientedArchitecture|PID Cache Manager Service]]
[[Category:LZA]]

Latest revision as of 15:12, 8 January 2013

eSciDoc SOA

SOAP and REST style interfaces
Service layers

Core services
Context Handler · Item Handler
Container Handler
Organizational Unit Handler
User Account Handler
Authentication
Content Model Handler
Semantic Store Handler

Intermediate services
Validation Service
Statistics Manager
Technical Metadata extraction
PIDManager
Basket Handler
Duplication detection
ImageHandler(Digilib)

Application services
Depositing
Searching
Search&Export
Control of Named Entities
Citation style Manager
RightsChecking
DataAcquisition
Transformation
Fledged Data
PID Cache
OAI-PMH

SOA Introduction

edit

This Page describes the PID cache service.

ID (Label)[edit]

PIDC

Complete Name[edit]

PID Cache Manager Service

Status[edit]

Running with pidmanager 0.6

Description[edit]

  • The PID cache service is a client to the GWDG PID Handle Service.
  • The PID cache service is used as an alternative to the PIDManager service offered by eSciDoc core infrastructure (PID Service without pre-cached PIDs).
  • The PID cache service holds pre-created PIDs which are assigned to an eSciDoc content resource by calling the Item/Container Handler methods (assignObjectPid(), assignVersionPid() or assignContentPid()).

Operations Overview[edit]

Operation Status Input Output Description
create implemented URL:String String Scope:Public
Assign a PID to an URL.
update implemented URL: String
PID(handler): String
String Scope:Public
Update a PID with a new URL.
view implemented PID(handler):String String Scope:Public
Retrieve a PID (If GWDG service unavailable, can only retrieve PID that are waiting in cache to be updated at the GWDG).
search implemented URL:String String Scope:Public
Search for a PID (If GWDG service unavailable, can only search for PID that are waiting in cache to be updated at the GWDG). Implements only the search by URL so far. Might be extended.


Service Interface[edit]

  • The PID cache service provides a REST interface:
    • GET: /pidcache/handle/read, implemting 2 methods:
      • /view?pid= - resolve PID
      • /search?url= - Find a PID
    • PUT: Not allowed.
    • POST: /pidcache/handle/write - Implements 2 methods:
      • /create - Create a PID at GWDG (url passed as body parameter).
      • /update?pid= - Update a PID with new url (url passed as body parameter)
    • DELETE: (Not allowed)


Installation[edit]

  1. Install files in deploy directory:
    1. pidmanger.war
    2. pid_cache.ear
    3. pid-cache-ds.xml (see source below)
  2. Defines properties in conf directory and changes with your own credentials (see sources below):
    1. PidManager.properties
    2. gwdg.properties with: <entry key="service.url">http://your.escidoc.url.org:8080/pidcache/handle/</entry> (changes with correct escidoc url)
    3. pidcache.properties (if installed with pubman, then uses pubman.properties instead)
    4. escidoc-core.properties

pid-cache-ds.xml[edit]

<?xml version="1.0" encoding="utf-8"?>
<datasources>
	<local-tx-datasource>
		<jndi-name>PidCache</jndi-name>
		<use-java-context>false</use-java-context>
		<connection-url>jdbc:hsqldb:${jboss.server.data.dir}${/}hypersonic${/}localDB</connection-url>
		<driver-class>org.hsqldb.jdbcDriver</driver-class>
		<user-name>sa</user-name>
		<password></password>
		<min-pool-size>5</min-pool-size>
		<max-pool-size>20</max-pool-size>
		<idle-timeout-minutes>0</idle-timeout-minutes>
		<track-statements/>
		<security-domain>HsqlDbRealm</security-domain>
		<prepared-statement-cache-size>32</prepared-statement-cache-size>
		<metadata>
			<type-mapping>Hypersonic SQL</type-mapping>
		</metadata>
		<depends>jboss:service=Hypersonic,database=localDB</depends>
	</local-tx-datasource>
</datasources>

escidoc-core.properties[edit]

# uncomment following line to use the PID Manager as PID service backend
escidoc-core.PidSystemFactory = de.escidoc.core.common.persistence.impl.PIDManagerRESTServiceFactory

#
# set parameter for the PID Managment service
#
escidoc-core.PidSystemRESTService.host = http://localhost:8080/pidmanager/pid/

# must match <entry key="PIDManager:User"> in PidManager.properties
escidoc-core.PidSystemRESTService.user = pid_manager

# must match <entry key="PIDManager:Password"> in PidManager.properties
escidoc-core.PidSystemRESTService.password = XXX_SOME_PASSWORD_XXX

# must match <entry key="globalPrefix"> in gwdg.properties
escidoc-core.PidSystem.globalPrefix = gwdg

gwdg.properties[edit]

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> 
<properties> 
	<comment>Local Handle Resolver Access Parameter</comment> 
	<!-- customize values to your GWDG handle account -->
	<entry key="globalPrefix">gwdg</entry>

	<entry key="service.url">http://my.escidoc.url.org:8080/pidcache/handle/</entry>
	<entry key="service.username">pid_manager</entry>
	<entry key="service.password">XXX_SAME_PASSWORD_AS_IN_escodoc-core.properties_XXX</entry>

	<!-- define path of service
		e.g. http://hostname:port/pidmanager/pid 
	-->
	<entry key="ResourcePath:Handle">/gwdg</entry>
	<entry key="ResourcePath:Resolve">/gwdg/{suffix}</entry>

	<!-- methods: semantic, random, serial, .. -->
	<!-- debug creates an fixed identifier -->
	<!-- semantic use the identifier which must be given via param. -->
	<!-- <param><systemID>escidoc:40312:4</systemID></param> -->
	<!-- The systemID is automatically added by framework stub.  -->
	<!-- <entry key="generatorMethod">semantic</entry> -->
	<!-- Use value "minter" to receive the identifier from the minter (NOID),
	set to "service" to let the GWDG service create identifier --> 
	
	<entry key="IdGenerator:Mode">service</entry>

	<!-- create identifier with local prefix -->
	<!-- e.g. 12345/test-123abcd456, where test- is the -->
	<!-- configured local prefix part. Leave it empty for no -->
	<!-- prefix. -->
	<entry key="localPrefix"></entry>

	<!-- allow override identifier by client - this means preminted PIDs which are to register -->
	<entry key="IdGenerator:Mode.override">true</entry>

	<!-- log/debug -->
	<entry key="debug">true</entry>
	<entry key="debug.traceMessages">true</entry>

	<!-- Run service without communication with Handle resolver (true/false) -->
	<!-- All response values are predefined -->
	<entry key="debug.coldRun">false</entry>

	<!-- debug identifier must have at minimum length 3 --> 
	<entry key="debug.identifier">test-handle-123:3</entry>

	<entry key="ResourceClass">de.escidoc.pidmanager.pidSystems.handleGWDG.Handle</entry>

	<!-- Class binding -->
	<entry key="BindingResources">Handle;Resolve</entry>
</properties>

pidcache.properties[edit]

# PID cache properties
escidoc.pidcache.cache.size.max=1000
escidoc.pidcache.refresh.interval=1
escidoc.pidcache.dummy.url=http://pubman.mpdl.mpg.de/pubman/faces/PidNotResolved.jsp?id=
escidoc.pid.gwdg.service.url=http://handle.gwdg.de:8080/pidservice
escidoc.pid.gwdg.timeout=10000
escidoc.pid.pidcache.service.url=http://localhost:8080/pidcache/handle
escidoc.pid.service.create.path=/write/create
escidoc.pid.service.view.path=/read/view
escidoc.pid.service.delete.path=/write/delete
escidoc.pid.service.update.path=/write/modify
escidoc.pid.service.search.path=/read/search
escidoc.pid.gwdg.user.login=XXX_YOUR_USER_XXX
escidoc.pid.gwdg.user.password=XXX_YOUR_PASSWORD_XX
# must match <entry key="PIDManager:User"> in PidManager.properties
escidoc.pidcache.user.name=pid_manager
# must match <entry key="PIDManager:Password"> in PidManager.properties
escidoc.pidcache.user.password=XXX_SAME_PASSWORD_AS_IN_escodoc-core.properties_XXX

PidManager.properties[edit]

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> 
<properties> 
<comment>REST Structure</comment> 
	<entry key="PIDManager:Port">8080</entry>
        <entry key="PIDManager:ServicePath">/handle</entry>

	<!-- enable/disable access restriction --> 
	<entry key="PIDManager:RestrictAccess">true</entry>
	<!-- change user and password -->
	<entry key="PIDManager:User">pid_manager</entry>
	<entry key="PIDManager:Password">XXX_SAME_PASSWORD_AS_IN_escodoc-core.properties_XXX</entry>
 
	<!-- services -->
	<entry key="Resources">gwdg</entry>

	<entry key="Resource:gwdg">gwdg.properties</entry>

	<!-- logging -->
	<entry key="PIDManager:LogConfigFile">log4j-pidmanager.xml</entry>

	<!-- Set path where static files accessible via HTTP -->
	<entry key="IdGenerator:Storage">SQLite</entry>
	<entry key="SQLite:DBFile">pidmanager.sqlite</entry>

	<!-- Unique Identifier creation via NOID -->
	<!-- entry key="PIDManager:NoidMinterURL">http://localhost/cgi-bin/minter/</entry -->
	<entry key="IdGenerator:NoidMinterURL">http://localhost/cgi-bin/noid/niodu_kt5</entry>

</properties>