Repository: juddi Updated Branches: refs/heads/master be1878f7d -> 02c3b6d02
JUDDI-912 updating documentation for the replication bits JUDDI-919 fixing some of the example apps to default to SSL for example replication endpoints Project: http://git-wip-us.apache.org/repos/asf/juddi/repo Commit: http://git-wip-us.apache.org/repos/asf/juddi/commit/02c3b6d0 Tree: http://git-wip-us.apache.org/repos/asf/juddi/tree/02c3b6d0 Diff: http://git-wip-us.apache.org/repos/asf/juddi/diff/02c3b6d0 Branch: refs/heads/master Commit: 02c3b6d0269a1d826589cb6295bd9c43593075d2 Parents: be1878f Author: Alex <[email protected]> Authored: Mon Feb 16 15:05:35 2015 -0500 Committer: Alex <[email protected]> Committed: Mon Feb 16 15:05:35 2015 -0500 ---------------------------------------------------------------------- docs/asciidoc/Guide/en-US/Guide.asciidoc | 2 + .../Guide/en-US/GuideAdministration.asciidoc | 10 +- .../en-US/GuideConfigurationServer.asciidoc | 42 ++-- .../Guide/en-US/GuideReplication.asciidoc | 211 +++++++++++++++++++ .../juddi/replication/ReplicationNotifier.java | 5 +- .../apache/juddi/samples/JuddiAdminService.java | 4 +- .../adminconsole/hub/JUDDIRequestsAsXML.java | 4 +- .../juddi/adminconsole/hub/UddiAdminHub.java | 2 - src/site/xdoc/releases.xml | 1 - 9 files changed, 247 insertions(+), 34 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/juddi/blob/02c3b6d0/docs/asciidoc/Guide/en-US/Guide.asciidoc ---------------------------------------------------------------------- diff --git a/docs/asciidoc/Guide/en-US/Guide.asciidoc b/docs/asciidoc/Guide/en-US/Guide.asciidoc index 8309d24..35c0064 100644 --- a/docs/asciidoc/Guide/en-US/Guide.asciidoc +++ b/docs/asciidoc/Guide/en-US/Guide.asciidoc @@ -24,6 +24,8 @@ include::GuideAdministration.asciidoc[] include::GuideConfigurationServer.asciidoc[] +include::GuideReplication.asciidoc[] + include::GuideRootSeedData.asciidoc[] include::GuideHowToDeployjUDDITo.asciidoc[] http://git-wip-us.apache.org/repos/asf/juddi/blob/02c3b6d0/docs/asciidoc/Guide/en-US/GuideAdministration.asciidoc ---------------------------------------------------------------------- diff --git a/docs/asciidoc/Guide/en-US/GuideAdministration.asciidoc b/docs/asciidoc/Guide/en-US/GuideAdministration.asciidoc index 9cebbcd..fc14b7c 100644 --- a/docs/asciidoc/Guide/en-US/GuideAdministration.asciidoc +++ b/docs/asciidoc/Guide/en-US/GuideAdministration.asciidoc @@ -620,6 +620,8 @@ This section is broken down into guidance for the jUDDI server and for the jUDDI * Disable sending authentication tokens to subscription notifications (config/juddi/notification/sendAuthTokenWithResultList=false) +* If you're using the replication services, configure your application server to use mutual certification authentication for that deployment (per the specification's recommendation). + ==== jUDDI Client (and developers) * Never log auth tokens. Protect it as if it was a password @@ -678,20 +680,20 @@ The jUDDI web services (juddiv3.war) is designed to be scaled to multiple server ===== Scaling using a common database -The first and simplest mechanism is for the instances of juddiv3.war to share the same database. All of jUDDI's database calls are transactional SQL, meaning that concurrent changes will function just fine from multiple concurrent users. Each instance of juddiv3.war must point to the same database and must use the same Node ID. See the Database Configuration Chapter for more information. +The first and simplest mechanism is for the instances of juddiv3.war to share the same database. All of jUDDI's database calls are transactional SQL, meaning that concurrent changes will function just fine from multiple concurrent users. Each instance of juddiv3.war must point to the same database and must use the same Node ID and configuration settings. See the Database Configuration Chapter for more information. ===== Scaling using Subscriptions -The second mechanism is to use the Subscription API to import data and updates from a remote registry. Unfortunately, this scenario isn't quite yet supported for jUDDI, but will be in a future release. +The second mechanism is to use the Subscription API to import data and updates from a remote registry. Unfortunately, this scenario isn't quite yet supported for jUDDI, but may be in a future release. ===== Replication API -The third mechanism is the Replication API, which is part of the OASIS UDDIv3 specification. jUDDI unfortunately does not currently implement this specification but may in the future. +The third mechanism is the Replication API, which is part of the OASIS UDDIv3 specification. Since version 3.3, jUDDI provides support for synchronizating UDDI servers using the techniques described in the specification as Replication. See the Replication Services chapter for additional information, ==== Limitations of jUDDI -jUDDI's web services have no explicit upper bound on the volume of businesses and services registered. Load testing has shown that at least 10,000 are support for each category. The upper limit is more of a function of both the underlying database implementation and hardware (free disk space). In either case, the likelihood of hitting the limit is low for most instances. If you happen to run into scaling issues, please file a bug report at JUDDI's JIRA site at: https://issues.apache.org/jira/browse/JUDDI +jUDDI's web services have no explicit upper bound on the volume of businesses and services registered. Load testing has shown that at least 10,000 are supported for each category. The upper limit is more of a function of both the underlying database implementation and hardware (free disk space). In either case, the likelihood of hitting the limit is low for most instances. If you happen to run into scaling issues, please file a bug report at JUDDI's JIRA site at: https://issues.apache.org/jira/browse/JUDDI http://git-wip-us.apache.org/repos/asf/juddi/blob/02c3b6d0/docs/asciidoc/Guide/en-US/GuideConfigurationServer.asciidoc ---------------------------------------------------------------------- diff --git a/docs/asciidoc/Guide/en-US/GuideConfigurationServer.asciidoc b/docs/asciidoc/Guide/en-US/GuideConfigurationServer.asciidoc index 3c38c45..31f10a0 100644 --- a/docs/asciidoc/Guide/en-US/GuideConfigurationServer.asciidoc +++ b/docs/asciidoc/Guide/en-US/GuideConfigurationServer.asciidoc @@ -20,7 +20,7 @@ IMPORTANT: When referring to configuration 'properties', we are really referenci |_juddi/auth/token/Timeout_ |Time in minutes to expire tokes after inactivity.|N |_15_ |_juddi/auth/token/Expiration_ |As of 3.1.5 Duration of time for tokens to expire, regardless of inactivity.|N |_15_ |_juddi/auth/token/enforceSameIPRule_ |As of 3.2 This setting will enable or disable the auth token check to ensure that auth tokens can only be used from the same IP address that they were issued to..|N |_true_ -|_juddi/auth/authenticator@useAuthToken | Indicates that the authenticator is use requires a UDDI auth token. Set to false when using HTTP based authenticators | N | _true_ +|_juddi/auth/authenticator@useAuthToken_ | Indicates that the authenticator is use requires a UDDI auth token. Set to false when using HTTP based authenticators | N | _true_ |=========================================================================================== @@ -46,7 +46,7 @@ IMPORTANT: When referring to configuration 'properties', we are really referenci |_juddi/configuration/reload/delay_ |The time in milliseconds in which juddiv3.xmlis polled for changes.|N|5000 |=========================================================================================== -CAUTION: Take caution in changing the jUDDI Node ID. If jUDDI has already been started at least once and the Node ID is changed, an existing records will not be editable. If you want to change from the default value, do so before you first start jUDDI by editing the configuration file. +CAUTION: Take caution in changing the jUDDI Node ID. (Updated at 3.3) jUDDI can now change Node IDs via the Admin console. However care must be taken to prevent changes to data while the rename is in progress. It is recommended to use the Admin console to change the Node ID. It will automatically update the database and the _juddiv3.xml_ configuration file. === Email @@ -83,7 +83,7 @@ Starting with 3.2.1, jUDDI can now send a test email via the juddiv3.war/admin c |_juddi/maxInClause_ | The maximum number of "IN" clause parameters. Some RDMBS limit the number of parameters allowed in a SQL "IN" clause. |Y|[_1000_] |_juddi/maxNameElementsAllowed_| The maximum name size and maximum number of name elements allows in several of the _FindXxxx_ and _SaveXxxx_ UDDI functions |N|[_5_] |_juddi/maxNameLength_ | The maximum name size of name elements|N|[_255_] -|_juddi/maxRows_ | The maximum number of rows returned in a find_* operation. Each call can set this independently, but this property defines a global maximum. This is related to the _maxInClause_ setting (the same?).|N|1000 +|_juddi/maxRows_ | The maximum number of rows returned in a find* operation. Each call can set this independently, but this property defines a global maximum. This is related to the _maxInClause_ setting (the same?).|N|1000 |=========================================================================================== === RMI Proxy @@ -107,7 +107,7 @@ RMI Proxy properties that can be referenced in the _juddiv3.xml_ file and is onl |Property Name |Description |Required |Default Value or [Example Value] |_juddi/cryptor_ | jUDDI Cryptor implementation class that jUDDI will use to encrypt and decrypt password settings |N|_org.apache.juddi.cryptor.DefaultCryptor_ |_juddi/keygenerator_ | Key generator implementation that jUDDI will use to create UDDI keys if no key is passed in by the user.|N|_org.apache.juddi.keygen.KeyGenerator_ -|_juddi/uuidgen _ | UUID generator implementation that jUDDI will use to create UUIDs.|N|_org.apache.juddi.uuidgen.DefaultUUIDGen_ +|_juddi/uuidgen_ | UUID generator implementation that jUDDI will use to create UUIDs.|N|_org.apache.juddi.uuidgen.DefaultUUIDGen_ |=========================================================================================== === Subscription @@ -128,7 +128,7 @@ RMI Proxy properties that can be referenced in the _juddiv3.xml_ file and is onl === Custody Transfer -.Transfer properties that can be referenced in the _juddiv3.xml file. +.Transfer properties that can be referenced in the _juddiv3.xml_ file. [options="header"] |=========================================================================================== |Property Name |Description |Required |Default Value or [Example Value] @@ -138,20 +138,20 @@ RMI Proxy properties that can be referenced in the _juddiv3.xml_ file and is onl === Validation -.These settings are for validating the data that users store in jUDDI. They can be referenced in the _juddiv3.xml file. +.These settings are for validating the data that users store in jUDDI. They can be referenced in the _juddiv3.xml_ file. [options="header"] |=========================================================================================== |Property Name |Description |Required |Default Value or [Example Value] |_juddi/validation/enforceReferentialIntegrity_|As of 3.1.5 This setting will force referential integrity for all tModels (except keyGenerators), category bags, bindingTemplate/AccessPoint/hostingRedirector (referencing another host), tModelInstanceParms and anything else that references a KeyName default value is true. Set to false for backwards compatibility or for a more lax registry.|N|[_true_] -|_juddi/validation/rejectInvalidSignatures/enable | Enables or Disables the validation of signatures when a publisher attempts to save an entity | N | false -|_juddi/validation/rejectInvalidSignatures/enable/trustStorePath | Path to the trust store. Can be overridden via system properties. If not specified, the Windows trust store will be used, else the default JRE trust store will be used. | N | [truststore.jks] -|_juddi/validation/rejectInvalidSignatures/trustStoreType | The type of store to use | N | JKS -|_juddi/validation/rejectInvalidSignatures/trustStorePassword | The clear text or encrypted password to the trust store | N | -|_juddi/validation/rejectInvalidSignatures/trustStorePassword@isPasswordEncrypted | True/False | N | false -|_juddi/validation/rejectInvalidSignatures/trustStorePassword@cryptoProvider | A cryptographic provider, representing the one that was used to encrypt | -|_juddi/validation/rejectInvalidSignatures/checkTimestamps | If true, certificates are checked against the time validity | N | false -|_juddi/validation/rejectInvalidSignatures/checkTrust | If true, the certificates trust chain is validated against the trust store | N | false -|_juddi/validation/rejectInvalidSignatures/checkRevocationCRL | If true, the certificate will attempted to be validated using online certificate revocation protocols | N | false +|_juddi/validation/rejectInvalidSignatures/enable_ | Enables or Disables the validation of signatures when a publisher attempts to save an entity | N | false +|_juddi/validation/rejectInvalidSignatures/enable/trustStorePath_ | Path to the trust store. Can be overridden via system properties. If not specified, the Windows trust store will be used, else the default JRE trust store will be used. | N | [truststore.jks] +|_juddi/validation/rejectInvalidSignatures/trustStoreType_ | The type of store to use | N | JKS +|_juddi/validation/rejectInvalidSignatures/trustStorePassword_ | The clear text or encrypted password to the trust store | N | +|_juddi/validation/rejectInvalidSignatures/trustStorePassword@isPasswordEncrypted_ | True/False | N | false +|_juddi/validation/rejectInvalidSignatures/trustStorePassword@cryptoProvider_ | A cryptographic provider, representing the one that was used to encrypt | +|_juddi/validation/rejectInvalidSignatures/checkTimestamps_ | If true, certificates are checked against the time validity | N | false +|_juddi/validation/rejectInvalidSignatures/checkTrust_ | If true, the certificates trust chain is validated against the trust store | N | false +|_juddi/validation/rejectInvalidSignatures/checkRevocationCRL_ | If true, the certificate will attempted to be validated using online certificate revocation protocols | N | false |=========================================================================================== @@ -163,7 +163,7 @@ Logging properties that can be referenced in the _juddiv3.xml_ file. [options="header"] |=========================================================================================== |Property Name |Description |Required |Default Value or [Example Value] -|_juddi/logging/logInquirySearchPayloads| Enables request payload logging for the Inquiry Find apis |N| false +|_juddi/logging/logInquirySearchPayloads_| Enables request payload logging for the Inquiry Find apis |N| false |=========================================================================================== === Performance @@ -174,20 +174,20 @@ Perofrmance properties are referenced in the _juddiv3.xm_ file. [options="header"] |=========================================================================================== |Property Name |Description |Required |Default Value or [Example Value] -|_juddi/performance/enableFindBusinessTModelBagFiltering| UDDI defines a mechansim to filter findBusiness relates based on tModelInstanceInfo within their service's binding templates. This is an expensive operation and will cause significant performance degredation on larger registries. For spec complliance, it should be set to true. We suspect it's not a commonly used feature and recommend setting this to false. |N| true +|_juddi/performance/enableFindBusinessTModelBagFiltering_ | UDDI defines a mechansim to filter findBusiness relates based on tModelInstanceInfo within their service's binding templates. This is an expensive operation and will cause significant performance degredation on larger registries. For spec complliance, it should be set to true. We suspect it's not a commonly used feature and recommend setting this to false. |N| true |=========================================================================================== === Replication .These properties are used to tweak the replication service capabilities. -Perofrmance properties are referenced in the _juddiv3.xm_ file. +These properties are referenced in the _juddiv3.xml_ file. [options="header"] |=========================================================================================== |Property Name |Description |Required |Default Value or [Example Value] -|_juddi/replication/getChangeRecordsMax| The maximum number of records to return from a getChangeRecord request |N| 100 -|_juddi.replication.start.buffer | Specifies the amount of time to wait before the replication timer initially fires. (in ms) | N | 5000 -|_juddi.replication.interval | Specifies the interval at which the replication timer triggers (in ms). | N | 5000 +|_juddi/replication/getChangeRecordsMax_ | The maximum number of records to return from a getChangeRecord request |N| 100 +|_juddi/replication/start/buffer_ | Specifies the amount of time to wait before the replication timer initially fires. (in ms) | N | 5000 +|_juddi/replication/interval_ | Specifies the interval at which the replication timer triggers (in ms). | N | 5000 |=========================================================================================== http://git-wip-us.apache.org/repos/asf/juddi/blob/02c3b6d0/docs/asciidoc/Guide/en-US/GuideReplication.asciidoc ---------------------------------------------------------------------- diff --git a/docs/asciidoc/Guide/en-US/GuideReplication.asciidoc b/docs/asciidoc/Guide/en-US/GuideReplication.asciidoc new file mode 100644 index 0000000..02b2c9f --- /dev/null +++ b/docs/asciidoc/Guide/en-US/GuideReplication.asciidoc @@ -0,0 +1,211 @@ +[[chapter-Replication]] +== Replication Services + +=== Introduction + +The UDDIv3 specification introduced a Replication API that outlines a mechansim for maintaing data ownership and data synchronization across more than one UDDI node. The replication specification has a number of facets that to the casual reader, can see overwhelmingly complex. jUDDI v3 provides support for the majority of the UDDIv3 replication API. This article will attempt to describe the in's and out's of the specification, what jUDDI supports and doesn't, finally, how to use it with your jUDDI instance(s). + +=== UDDIv3 Replication Overview + +The UDDIv3 replication API defines a number of web service methods that are used to manage and replicate UDDI data. Each node is responsible for maintaining a record of all changes made both locally and at all remote nodes. Everytime a Business, Service, Binding, tModel, or Publisher Assertion changes, all nodes are notified of the change. Once receiving the notification of the change, all nodes are then responsible to obtain the change set, apply it locally, and then retransmit (if needed and based on topology). The topology is configured via the Replication Configuration. With jUDDI, this is configured using the adminstration console. + +There's one important note to remember. Each piece of data in UDDI is owned by a given node. + +==== UDDIv3 Replication Topology + +The specification identifies two scenarios for replication topology. + + 1. Non-directed Graph: All nodes can talk directly to each other and have direct communication with each other. + 2. Directed Graph: Nodes can only talk to subset of the complete set of nodes. + +The Non-directed graph is easier to implement and to understand. During the "notify" phase of replication, the node where the change originates, simply tell's everyone it knows about it. + +In a directed graph, the node where the change originates only notifies the nodes designated nodes. This typically forms some kind of ring in which one node notifies the next and so on until the original change ends up at the origin. + +==== Conflict handling + +The specification defines a mechanism that is similar to a two step commit (for those familiar with database terminology). Esscentially, when a given change (typically a new record) is created, it then notifies all other nodes to put a block on the new record's keys and waits for all nodes to respond with an "OK" to commit message. This prevents the same record from being created in multiple locations. These types of messages are refered to in the specification as NewDataConditional. As of the time of this writting jUDDI doesn't support it. When a record is created at the same at two different nodes within the same replication graph, jUDDI will simply reject the change and prevent the modifications or the transfer from happening. Records that fail to apply for one reason or another are stored in the database and can be accessed via the admin console via "Admin" and selected "getFailedReplicationChangeRecords" from the drop down menu. + +=== Configuring your jUDDI Node for replication + +Prerequisites: + + 1. Each node must have a unique ID associated with it. + 2. Each node must have the UDDI v3 Replication service deployed and configured for CLIENT-CERT authentication using SSL/TLS. + 3. Each node must have a configured JKS key store and trust store. + +==== Changing the Node ID + +Forgot to change the Node ID before starting jUDDI for the first time? No problem. Visit the jUDDI Administration console at http://localhost:8080/juddiv3/admin, then go to the Admin page and select "Change Node Id" from the drop down menu. + +==== Setting up CLIENT-CERT authentication + +Since a registry can be corrupted via the replication endpoint, it is important to provide adequate security. The UDDI spec recommends using mutual certificate authentication. This is somtimes returned to as "CLIENT-CERT", certificate based authentication, or two-way SSL. All of these terms really refer to the same thing. jUDDI comes prebundled with Apache Tomcat that is configured for mutal certificate authentication out of the box (with self signed certificates). To setup CLIENT-CERT authentication, please see the documentation for your web application server. + +==== Setting the Replication Configuration + +To set the replication configuration, you'll need to go to http://localhost:8080/juddiv3/admin then click on "Admin" in the top navigation bar and login. Once logged in, select "set_ReplicationNodes" from the drop down menu. The text entry field is actually resizable, so you'll probably want to make it bigger. This text box should be pre-populated with an example replication configuration. Edit the replication as needed, then click the "Go!" button to save it. + +Note: when saving the configuration, several of the fields (time stamp, serial number) will be overwritten by the server. This is normal. + +Additional notes: +jUDDI doesn't currently support maximumTimeToSyncRegistry, maximumTimeToGetChanges, and controlledMessage. Due to the way the specification was written, these fields are mandatory (they must be in the Replication Configuration XML), but jUDDI wont't respect them. + +===== Replication Configuration + +When using jUDDI's Admin console to set the replication config, here's a few things to keep in mind (using xpath notation). + + - replicationConfiguration/operator() - All nodes in the replication graph must be listed in the Operator section, including all directed graph nodes + - replicationConfiguration/registryContact - Must have at least one contact. If one is specified for the node's root business, then jUDDI will include that with the default config. + - replicationConfiguration/communicationGraph - Must be specified with all nodes listed as identified by the NodeID in replicationConfiguration/operator/operatorNodeID. + - replicationConfiguration/communicationGraph/controlledMessage must be specified. jUDDI uses a '*' to represent all messages. + - replicationConfiguration/maximumTimeToSyncRegistry isn't used and jUDDI will always set it to 1 + - replicationConfiguration/maximumTimeToGetChanges - isn't used and jUDDI will always set it to 1 + - replicationConfiguration/serialNumber - jUDDI will always set this to the time stamp when the configuration was last changed (time since epoch) + - replicationConfiguration/timeOfConfigurationUpdate - jUDDI will always set this to the time stamp when the configuraiton was last changed in a human readable form. The UDDI specification doesn't state what format it should be in, so we used ISO 8601 as the format. + +Everytime the configuration changes, an audit log is required in jUDDI log file. + +Here's an example default configuration +---- +<?xml version="1.0" encoding="UTF-8"?><replicationConfiguration xmlns="urn:uddi-org:repl_v3" xmlns:ns2="urn:uddi-org:api_v3" xmlns:ns3="http://www.w3.org/2000/09/xmldsig#"> + <serialNumber>1424114880586</serialNumber> + <timeOfConfigurationUpdate>201502161428-0500</timeOfConfigurationUpdate> + <registryContact> + <ns2:contact> + <ns2:personName>unknown</ns2:personName> + </ns2:contact> + </registryContact> + <operator> + <operatorNodeID>uddi:juddi.apache.org:node1</operatorNodeID> + <operatorStatus>normal</operatorStatus> + <ns2:contact/> + <soapReplicationURL>http://localhost:8080/juddiv3/services/replication</soapReplicationURL> + </operator> + <communicationGraph> + <node>uddi:juddi.apache.org:node1</node> + <controlledMessage>*</controlledMessage> + </communicationGraph> + <maximumTimeToSyncRegistry>1</maximumTimeToSyncRegistry> + <maximumTimeToGetChanges>1</maximumTimeToGetChanges> +</replicationConfiguration> +---- + +Here's an example non-directed replicaton graph. In this example, all changes perform on all nodes get set to all the other nodes. +---- +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<replicationConfiguration xmlns="urn:uddi-org:repl_v3" xmlns:ns2="urn:uddi-org:api_v3" xmlns:ns3="http://www.w3.org/2000/09/xmldsig#"> + <serialNumber>0</serialNumber> + <timeOfConfigurationUpdate></timeOfConfigurationUpdate> + <registryContact> + <ns2:contact> + <ns2:personName>unknown</ns2:personName> + </ns2:contact> + </registryContact> + <operator> + <operatorNodeID>uddi:juddi.apache.org:node1</operatorNodeID> + <operatorStatus>normal</operatorStatus> + <ns2:contact useType="admin"> + <ns2:personName xml:lang="en">bob</ns2:personName> + </ns2:contact> + <soapReplicationURL>https://localhost:8443/juddiv3replication/services/replication</soapReplicationURL> + </operator> + <operator> + <operatorNodeID>uddi:another.juddi.apache.org:node2</operatorNodeID> + <operatorStatus>normal</operatorStatus> + <ns2:contact useType="admin"> + <ns2:personName xml:lang="en">mary</ns2:personName> + </ns2:contact> + <soapReplicationURL>https://localhost:9443/juddiv3replication/services/replication</soapReplicationURL> + </operator> + <communicationGraph> + <node>uddi:juddi.apache.org:node1</node> + <node>uddi:another.juddi.apache.org:node2</node> + <controlledMessage>*</controlledMessage> + </communicationGraph> + <maximumTimeToSyncRegistry>1</maximumTimeToSyncRegistry> + <maximumTimeToGetChanges>1</maximumTimeToGetChanges> +</replicationConfiguration> +---- + +In this example, we have a directed graph where Node 1 sends to Node2, Node 2 to Node 3, and Node 3 to Node 1. Note the addition of the replicationConfiguration/communicationGraph/edge() that defines this interaction pattern. Again all nodes defined in edges must also be defined both in the communicationGraph and as operator() XML elements. +---- +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<replicationConfiguration xmlns="urn:uddi-org:repl_v3" xmlns:ns2="urn:uddi-org:api_v3" xmlns:ns3="http://www.w3.org/2000/09/xmldsig#"> + <serialNumber>0</serialNumber> + <timeOfConfigurationUpdate></timeOfConfigurationUpdate> + <registryContact> + <ns2:contact> + <ns2:personName>unknown</ns2:personName> + </ns2:contact> + </registryContact> + <operator> + <operatorNodeID>uddi:juddi.apache.org:node1</operatorNodeID> + <operatorStatus>normal</operatorStatus> + <ns2:contact useType="admin"> + <ns2:personName xml:lang="en">bob</ns2:personName> + </ns2:contact> + <soapReplicationURL>https://localhost:8443/juddiv3replication/services/replication</soapReplicationURL> + </operator> + <operator> + <operatorNodeID>uddi:another.juddi.apache.org:node2</operatorNodeID> + <operatorStatus>normal</operatorStatus> + <ns2:contact useType="admin"> + <ns2:personName xml:lang="en">mary</ns2:personName> + </ns2:contact> + <soapReplicationURL>https://localhost:9443/juddiv3replication/services/replication</soapReplicationURL> + </operator> + <operator> + <operatorNodeID>uddi:yet.another.juddi.apache.org:node3</operatorNodeID> + <operatorStatus>normal</operatorStatus> + <ns2:contact useType="admin"> + <ns2:personName xml:lang="en">mary</ns2:personName> + </ns2:contact> + <soapReplicationURL>https://localhost:10443/juddiv3replication/services/replication</soapReplicationURL> + </operator> + <communicationGraph> + <node>uddi:another.juddi.apache.org:node2</node> + <node>uddi:juddi.apache.org:node1</node> + <node>uddi:yet.another.juddi.apache.org:node3</node> + <edge> + <messageSender>uddi:juddi.apache.org:node1</messageSender> + <messageReceiver>uddi:another.juddi.apache.org:node2</messageReceiver> + </edge> + <edge> + <messageSender>uddi:another.juddi.apache.org:node2</messageSender> + <messageReceiver>uddi:yet.another.juddi.apache.org:node3</messageReceiver> + </edge> + <edge> + <messageSender>uddi:yet.another.juddi.apache.org:node3</messageSender> + <messageReceiver>uddi:juddi.apache.org:node1</messageReceiver> + </edge> + </communicationGraph> + <maximumTimeToSyncRegistry>1</maximumTimeToSyncRegistry> + <maximumTimeToGetChanges>1</maximumTimeToGetChanges> +</replicationConfiguration> +---- + + +==== Performing Custody Transfer between nodes + +Custody transfer (from a user's perspective) happens exacty the same way as it would to transfer between two users on the same node. The only change is that the Replication API plays a signficant role in this process and is thus a requirement. + + +==== What's Supported and What's Not + +Supported Configurations + - Directed graph replication with retransmit + - Non-directed + - All UDDI data is replicated (Business, Binding, Serivce, tModels and Publisher Assertions) + - Custody transfer from Node to Node within the replication graph. + +Functions not supported + - Conditional Data Updates + - Configuration Settings: + - maximumTimeToSyncRegistry + - maximumTimeToGetChanges + - OperatorStatus - Node Status (New, Normal, Resigned) + - Controlled Messages (all messages are sent to all nodes) + + + http://git-wip-us.apache.org/repos/asf/juddi/blob/02c3b6d0/juddi-core/src/main/java/org/apache/juddi/replication/ReplicationNotifier.java ---------------------------------------------------------------------- diff --git a/juddi-core/src/main/java/org/apache/juddi/replication/ReplicationNotifier.java b/juddi-core/src/main/java/org/apache/juddi/replication/ReplicationNotifier.java index 6f0a680..4a51df1 100644 --- a/juddi-core/src/main/java/org/apache/juddi/replication/ReplicationNotifier.java +++ b/juddi-core/src/main/java/org/apache/juddi/replication/ReplicationNotifier.java @@ -65,9 +65,8 @@ public class ReplicationNotifier extends TimerTask { private static Log log = LogFactory.getLog(ReplicationNotifier.class); private Timer timer = null; - private long startBuffer = AppConfig.getConfiguration().getLong(Property.JUDDI_NOTIFICATION_START_BUFFER, 20000l); // 20s startup delay default + private long startBuffer = 5000;//AppConfig.getConfiguration().getLong(Property.JUDDI_NOTIFICATION_START_BUFFER, 20000l); // 20s startup delay default private long interval = 5000;//AppConfig.getConfiguration().getLong(Property.JUDDI_NOTIFICATION_INTERVAL, 300000l); //5 min default - private long acceptableLagTime = AppConfig.getConfiguration().getLong(Property.JUDDI_NOTIFICATION_ACCEPTABLE_LAGTIME, 10000l); //1000 milliseconds private static String node = null; private static UDDIService uddiService = new UDDIService(); @@ -79,6 +78,8 @@ public class ReplicationNotifier extends TimerTask { public ReplicationNotifier() throws ConfigurationException { super(); timer = new Timer(true); + startBuffer=AppConfig.getConfiguration().getLong(Property.JUDDI_REPLICATION_START_BUFFER, 5000l); + interval = AppConfig.getConfiguration().getLong(Property.JUDDI_REPLICATION_INTERVAL, 5000l); timer.scheduleAtFixedRate(this, startBuffer, interval); if (queue == null) { queue = new ConcurrentLinkedQueue(); http://git-wip-us.apache.org/repos/asf/juddi/blob/02c3b6d0/juddi-examples/more-uddi-samples/src/main/java/org/apache/juddi/samples/JuddiAdminService.java ---------------------------------------------------------------------- diff --git a/juddi-examples/more-uddi-samples/src/main/java/org/apache/juddi/samples/JuddiAdminService.java b/juddi-examples/more-uddi-samples/src/main/java/org/apache/juddi/samples/JuddiAdminService.java index 57ce10e..4834b00 100644 --- a/juddi-examples/more-uddi-samples/src/main/java/org/apache/juddi/samples/JuddiAdminService.java +++ b/juddi-examples/more-uddi-samples/src/main/java/org/apache/juddi/samples/JuddiAdminService.java @@ -682,9 +682,9 @@ public class JuddiAdminService { replicationNodes = new ReplicationConfiguration(); } - if (replicationNodes.getCommunicationGraph() == null) { + //if (replicationNodes.getCommunicationGraph() == null) { replicationNodes.setCommunicationGraph(new CommunicationGraph()); - } + //} Operator op = new Operator(); op.setOperatorNodeID("uddi:juddi.apache.org:node1"); op.setSoapReplicationURL("http://localhost:8080/juddiv3/services/replication"); http://git-wip-us.apache.org/repos/asf/juddi/blob/02c3b6d0/juddiv3-war/src/main/java/org/apache/juddi/adminconsole/hub/JUDDIRequestsAsXML.java ---------------------------------------------------------------------- diff --git a/juddiv3-war/src/main/java/org/apache/juddi/adminconsole/hub/JUDDIRequestsAsXML.java b/juddiv3-war/src/main/java/org/apache/juddi/adminconsole/hub/JUDDIRequestsAsXML.java index acfa03c..d05565b 100644 --- a/juddiv3-war/src/main/java/org/apache/juddi/adminconsole/hub/JUDDIRequestsAsXML.java +++ b/juddiv3-war/src/main/java/org/apache/juddi/adminconsole/hub/JUDDIRequestsAsXML.java @@ -159,9 +159,9 @@ public class JUDDIRequestsAsXML { op.setOperatorNodeID(thisnode); op.setOperatorStatus(OperatorStatusType.NORMAL); - String url = "http://localhost:8080/juddiv3/services/replication"; + String url = "https://localhost:8443/juddiv3replication/services/replication"; try { - url = AppConfig.getConfiguration().getString(Property.DEFAULT_BASE_URL_SECURE) + "/services/replication"; + url = AppConfig.getConfiguration().getString(Property.JUDDI_BASE_URL_SECURE) + "replication/services/replication"; } catch (ConfigurationException ex) { Logger.getLogger(JUDDIRequestsAsXML.class.getName()).log(Level.SEVERE, null, ex); } http://git-wip-us.apache.org/repos/asf/juddi/blob/02c3b6d0/juddiv3-war/src/main/java/org/apache/juddi/adminconsole/hub/UddiAdminHub.java ---------------------------------------------------------------------- diff --git a/juddiv3-war/src/main/java/org/apache/juddi/adminconsole/hub/UddiAdminHub.java b/juddiv3-war/src/main/java/org/apache/juddi/adminconsole/hub/UddiAdminHub.java index 01e3503..9a578e4 100644 --- a/juddiv3-war/src/main/java/org/apache/juddi/adminconsole/hub/UddiAdminHub.java +++ b/juddiv3-war/src/main/java/org/apache/juddi/adminconsole/hub/UddiAdminHub.java @@ -26,8 +26,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Properties; -import java.util.logging.Level; -import java.util.logging.Logger; import javax.persistence.EntityManager; import javax.persistence.EntityTransaction; import javax.persistence.Query; http://git-wip-us.apache.org/repos/asf/juddi/blob/02c3b6d0/src/site/xdoc/releases.xml ---------------------------------------------------------------------- diff --git a/src/site/xdoc/releases.xml b/src/site/xdoc/releases.xml index d43ecae..8fb01fa 100644 --- a/src/site/xdoc/releases.xml +++ b/src/site/xdoc/releases.xml @@ -43,6 +43,5 @@ </table> </section> - </section> </body> </document> --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
