You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juddi.apache.org by al...@apache.org on 2022/09/25 02:15:02 UTC
[juddi] 01/01: JUDDI-1024 a possible solution, by removing hibernate support
This is an automated email from the ASF dual-hosted git repository.
alexoree pushed a commit to branch bug/JUDDI-1024
in repository https://gitbox.apache.org/repos/asf/juddi.git
commit c091e365ed247db91478ebeabf40bc1f3e0f03eb
Author: Alex O'Ree <al...@apache.org>
AuthorDate: Sat Sep 24 22:14:55 2022 -0400
JUDDI-1024 a possible solution, by removing hibernate support
---
docs/.gitignore | 6 -
docs/asciidoc/.gitignore | 6 -
docs/asciidoc/ClientGuide/.gitignore | 6 -
docs/asciidoc/Guide/.gitignore | 6 -
docs/dist/.gitignore | 6 -
docs/examples/auth/pom.xml | 2 +-
juddi-client-cli/.gitignore | 6 -
juddi-client.net/.gitignore | 6 -
juddi-client/.gitignore | 6 -
juddi-core-openjpa/.gitignore | 6 -
juddi-core-openjpa/pom.xml | 38 +-
juddi-core-openjpa/src/.gitignore | 1 -
.../src/main/java/org/apache/juddi/ClassUtil.java | 0
.../src/main/java/org/apache/juddi/Registry.java | 0
.../juddi/api/impl/AuthenticatedService.java | 506 +-
.../org/apache/juddi/api/impl/InquiryHelper.java | 1300 ++---
.../org/apache/juddi/api/impl/JUDDIApiImpl.java | 3366 ++++++-------
.../apache/juddi/api/impl/PublicationHelper.java | 124 +-
.../api/impl/ServiceCounterLifecycleResource.java | 0
.../juddi/api/impl/UDDICustodyTransferImpl.java | 942 ++--
.../org/apache/juddi/api/impl/UDDIInquiryImpl.java | 1260 ++---
.../apache/juddi/api/impl/UDDIPublicationImpl.java | 3206 ++++++------
.../apache/juddi/api/impl/UDDIReplicationImpl.java | 2752 +++++------
.../apache/juddi/api/impl/UDDISecurityImpl.java | 350 +-
.../apache/juddi/api/impl/UDDIServiceCounter.java | 0
.../juddi/api/impl/UDDIServiceCounterMBean.java | 0
.../juddi/api/impl/UDDISubscriptionImpl.java | 2092 ++++----
.../api/impl/UDDISubscriptionListenerImpl.java | 230 +-
.../juddi/api/impl/UDDIValueSetCachingImpl.java | 194 +-
.../juddi/api/impl/UDDIValueSetValidationImpl.java | 736 +--
.../apache/juddi/api/impl/UDDIv2InquiryImpl.java | 0
.../apache/juddi/api/impl/UDDIv2PublishImpl.java | 0
.../org/apache/juddi/api/impl/XRegisterHelper.java | 354 +-
.../org/apache/juddi/api/impl/package-info.java | 0
.../juddi/api/util/CustodyTransferQuery.java | 0
.../org/apache/juddi/api/util/InquiryQuery.java | 0
.../java/org/apache/juddi/api/util/JUDDIQuery.java | 0
.../apache/juddi/api/util/PublicationQuery.java | 0
.../org/apache/juddi/api/util/QueryStatus.java | 0
.../apache/juddi/api/util/ReplicationQuery.java | 0
.../org/apache/juddi/api/util/SecurityQuery.java | 0
.../juddi/api/util/SubscriptionListenerQuery.java | 0
.../apache/juddi/api/util/SubscriptionQuery.java | 0
.../java/org/apache/juddi/api/util/UDDIQuery.java | 0
.../juddi/api/util/ValueSetCachingQuery.java | 0
.../juddi/api/util/ValueSetValidationQuery.java | 0
.../org/apache/juddi/api/util/package-info.java | 0
.../java/org/apache/juddi/config/AppConfig.java | 0
.../java/org/apache/juddi/config/Constants.java | 60 +-
.../main/java/org/apache/juddi/config/Install.java | 1676 +++----
.../apache/juddi/config/PersistenceManager.java | 0
.../java/org/apache/juddi/config/Property.java | 0
.../apache/juddi/config/PublisherFileFilter.java | 0
.../main/java/org/apache/juddi/config/Release.java | 0
.../org/apache/juddi/config/ResourceConfig.java | 104 +-
.../java/org/apache/juddi/config/package-info.java | 0
.../org/apache/juddi/cryptor/CryptorFactory.java | 212 +-
.../org/apache/juddi/cryptor/package-info.java | 0
.../apache/juddi/keygen/DefaultKeyGenerator.java | 164 +-
.../java/org/apache/juddi/keygen/KeyGenerator.java | 68 +-
.../apache/juddi/keygen/KeyGeneratorFactory.java | 212 +-
.../java/org/apache/juddi/keygen/package-info.java | 0
.../apache/juddi/mapping/MappingApiToModel.java | 3384 ++++++-------
.../apache/juddi/mapping/MappingModelToApi.java | 2728 +++++------
.../org/apache/juddi/mapping/package-info.java | 0
.../main/java/org/apache/juddi/model/Address.java | 1 +
.../java/org/apache/juddi/model/AddressLine.java | 0
.../java/org/apache/juddi/model/AuthToken.java | 0
.../org/apache/juddi/model/BindingCategoryBag.java | 0
.../java/org/apache/juddi/model/BindingDescr.java | 0
.../org/apache/juddi/model/BindingTemplate.java | 0
.../apache/juddi/model/BusinessCategoryBag.java | 0
.../java/org/apache/juddi/model/BusinessDescr.java | 0
.../org/apache/juddi/model/BusinessEntity.java | 0
.../org/apache/juddi/model/BusinessIdentifier.java | 0
.../java/org/apache/juddi/model/BusinessName.java | 0
.../org/apache/juddi/model/BusinessService.java | 0
.../apache/juddi/model/CanonicalizationMethod.java | 0
.../java/org/apache/juddi/model/CategoryBag.java | 0
.../java/org/apache/juddi/model/ChangeRecord.java | 0
.../main/java/org/apache/juddi/model/Clerk.java | 0
.../apache/juddi/model/ClientSubscriptionInfo.java | 0
.../main/java/org/apache/juddi/model/Contact.java | 0
.../java/org/apache/juddi/model/ContactDescr.java | 0
.../org/apache/juddi/model/ControlMessage.java | 0
.../java/org/apache/juddi/model/DiscoveryUrl.java | 0
.../src/main/java/org/apache/juddi/model/Edge.java | 0
.../apache/juddi/model/EdgeReceiverAlternate.java | 0
.../main/java/org/apache/juddi/model/Email.java | 0
.../apache/juddi/model/InstanceDetailsDescr.java | 0
.../juddi/model/InstanceDetailsDocDescr.java | 0
.../java/org/apache/juddi/model/KeyDataValue.java | 0
.../main/java/org/apache/juddi/model/KeyInfo.java | 0
.../org/apache/juddi/model/KeyedReference.java | 0
.../apache/juddi/model/KeyedReferenceGroup.java | 0
.../src/main/java/org/apache/juddi/model/Node.java | 0
.../java/org/apache/juddi/model/ObjectType.java | 0
.../org/apache/juddi/model/ObjectTypeContent.java | 0
.../main/java/org/apache/juddi/model/Operator.java | 0
.../org/apache/juddi/model/OperatorStatusType.java | 0
.../java/org/apache/juddi/model/OverviewDoc.java | 0
.../org/apache/juddi/model/OverviewDocDescr.java | 0
.../java/org/apache/juddi/model/PersonName.java | 0
.../main/java/org/apache/juddi/model/Phone.java | 0
.../java/org/apache/juddi/model/Publisher.java | 0
.../org/apache/juddi/model/PublisherAssertion.java | 0
.../apache/juddi/model/PublisherAssertionId.java | 0
.../java/org/apache/juddi/model/Reference.java | 0
.../juddi/model/ReplicationConfiguration.java | 0
.../juddi/model/ReplicationConfigurationNode.java | 0
.../org/apache/juddi/model/ServiceCategoryBag.java | 0
.../java/org/apache/juddi/model/ServiceDescr.java | 0
.../java/org/apache/juddi/model/ServiceName.java | 0
.../org/apache/juddi/model/ServiceProjection.java | 154 +-
.../apache/juddi/model/ServiceProjectionId.java | 146 +-
.../java/org/apache/juddi/model/Signature.java | 0
.../org/apache/juddi/model/SignatureMethod.java | 0
.../org/apache/juddi/model/SignatureTransform.java | 0
.../juddi/model/SignatureTransformDataValue.java | 0
.../org/apache/juddi/model/SignatureValue.java | 0
.../java/org/apache/juddi/model/SignedInfo.java | 0
.../java/org/apache/juddi/model/Subscription.java | 0
.../apache/juddi/model/SubscriptionChunkToken.java | 208 +-
.../org/apache/juddi/model/SubscriptionMatch.java | 154 +-
.../main/java/org/apache/juddi/model/TempKey.java | 6 +-
.../java/org/apache/juddi/model/TempKeyPK.java | 158 +-
.../main/java/org/apache/juddi/model/Tmodel.java | 0
.../org/apache/juddi/model/TmodelCategoryBag.java | 0
.../java/org/apache/juddi/model/TmodelDescr.java | 0
.../org/apache/juddi/model/TmodelIdentifier.java | 0
.../org/apache/juddi/model/TmodelInstanceInfo.java | 0
.../juddi/model/TmodelInstanceInfoDescr.java | 0
.../java/org/apache/juddi/model/TransferToken.java | 4 +-
.../org/apache/juddi/model/TransferTokenKey.java | 0
.../java/org/apache/juddi/model/UddiEntity.java | 258 +-
.../apache/juddi/model/UddiEntityPublisher.java | 442 +-
.../org/apache/juddi/model/ValueSetValues.java | 0
.../java/org/apache/juddi/model/package-info.java | 0
.../apache/juddi/query/BindingTemplateQuery.java | 92 +-
.../apache/juddi/query/BusinessEntityQuery.java | 86 +-
.../apache/juddi/query/BusinessServiceQuery.java | 90 +-
.../DeletePublisherAssertionByBusinessQuery.java | 138 +-
.../java/org/apache/juddi/query/EntityQuery.java | 372 +-
.../juddi/query/FetchBindingTemplatesQuery.java | 250 +-
.../juddi/query/FetchBusinessEntitiesQuery.java | 300 +-
.../juddi/query/FetchBusinessServicesQuery.java | 296 +-
.../org/apache/juddi/query/FetchTModelsQuery.java | 292 +-
.../query/FindBindingByCategoryGroupQuery.java | 138 +-
.../juddi/query/FindBindingByCategoryQuery.java | 126 +-
.../juddi/query/FindBindingByTModelKeyQuery.java | 320 +-
.../query/FindBusinessByCategoryGroupQuery.java | 126 +-
.../juddi/query/FindBusinessByCategoryQuery.java | 114 +-
.../query/FindBusinessByCombinedCategoryQuery.java | 0
.../query/FindBusinessByDiscoveryURLQuery.java | 240 +-
.../juddi/query/FindBusinessByIdentifierQuery.java | 114 +-
.../juddi/query/FindBusinessByNameQuery.java | 130 +-
.../juddi/query/FindBusinessByPublisherQuery.java | 102 +-
.../juddi/query/FindBusinessByTModelKeyQuery.java | 328 +-
.../query/FindEntityByCategoryGroupQuery.java | 650 +--
.../juddi/query/FindEntityByCategoryQuery.java | 616 +--
.../query/FindEntityByCombinedCategoryQuery.java | 0
.../juddi/query/FindEntityByIdentifierQuery.java | 576 +--
.../apache/juddi/query/FindEntityByNamesQuery.java | 356 +-
.../juddi/query/FindEntityByPublisherQuery.java | 216 +-
.../FindPublisherAssertionByBusinessQuery.java | 204 +-
.../query/FindServiceByCategoryGroupQuery.java | 136 +-
.../juddi/query/FindServiceByCategoryQuery.java | 126 +-
.../query/FindServiceByCombinedCategoryQuery.java | 0
.../apache/juddi/query/FindServiceByNameQuery.java | 142 +-
.../juddi/query/FindServiceByTModelKeyQuery.java | 334 +-
.../query/FindSubscriptionByPublisherQuery.java | 80 +-
.../query/FindTModelByCategoryGroupQuery.java | 130 +-
.../juddi/query/FindTModelByCategoryQuery.java | 118 +-
.../juddi/query/FindTModelByIdentifierQuery.java | 116 +-
.../apache/juddi/query/FindTModelByNameQuery.java | 210 +-
.../juddi/query/FindTModelByPublisherQuery.java | 102 +-
.../juddi/query/PublisherAssertionQuery.java | 98 +-
.../org/apache/juddi/query/SubscriptionQuery.java | 80 +-
.../java/org/apache/juddi/query/TModelQuery.java | 84 +-
.../java/org/apache/juddi/query/package-info.java | 0
.../org/apache/juddi/query/util/DynamicQuery.java | 506 +-
.../apache/juddi/query/util/FindQualifiers.java | 740 +--
.../query/util/KeyedRefGroupTModelComparator.java | 96 +-
.../juddi/query/util/KeyedRefTModelComparator.java | 96 +-
.../juddi/replication/ReplicationNotifier.java | 0
.../juddi/subscription/NotificationList.java | 0
.../juddi/subscription/SubscriptionNotifier.java | 0
.../apache/juddi/subscription/TypeConvertor.java | 0
.../juddi/subscription/notify/HTTPNotifier.java | 0
.../apache/juddi/subscription/notify/Notifier.java | 0
.../juddi/subscription/notify/NotifierFactory.java | 0
.../juddi/subscription/notify/SMTPNotifier.java | 0
.../notify/TemporaryMailContainer.java | 0
.../notify/USERFRIENDLYSMTPNotifier.java | 0
.../juddi/subscription/notify/package-info.java | 0
.../apache/juddi/subscription/package-info.java | 0
.../org/apache/juddi/v3/auth/Authenticator.java | 122 +-
.../apache/juddi/v3/auth/AuthenticatorFactory.java | 198 +-
.../juddi/v3/auth/CryptedXMLDocAuthenticator.java | 402 +-
.../juddi/v3/auth/HTTPContainerAuthenticator.java | 0
.../juddi/v3/auth/HTTPHeaderAuthenticator.java | 0
.../apache/juddi/v3/auth/JUDDIAuthenticator.java | 254 +-
.../java/org/apache/juddi/v3/auth/JuddiUsers.java | 0
.../juddi/v3/auth/LdapExpandedAuthenticator.java | 0
.../juddi/v3/auth/LdapSimpleAuthenticator.java | 0
.../juddi/v3/auth/MD5XMLDocAuthenticator.java | 348 +-
.../main/java/org/apache/juddi/v3/auth/User.java | 0
.../apache/juddi/v3/auth/XMLDocAuthenticator.java | 464 +-
.../org/apache/juddi/v3/auth/package-info.java | 0
.../juddi/v3/error/AssertionNotFoundException.java | 72 +-
.../juddi/v3/error/AuthTokenExpiredException.java | 72 +-
.../juddi/v3/error/AuthTokenRequiredException.java | 72 +-
.../juddi/v3/error/AuthenticationException.java | 72 +-
.../org/apache/juddi/v3/error/ErrorMessage.java | 122 +-
.../apache/juddi/v3/error/FatalErrorException.java | 72 +-
.../v3/error/InvalidCombinationException.java | 74 +-
.../juddi/v3/error/InvalidKeyPassedException.java | 74 +-
.../juddi/v3/error/InvalidProjectionException.java | 74 +-
.../juddi/v3/error/InvalidTimeException.java | 74 +-
.../juddi/v3/error/InvalidValueException.java | 80 +-
.../juddi/v3/error/KeyUnavailableException.java | 72 +-
.../v3/error/MaxEntitiesExceededException.java | 74 +-
.../apache/juddi/v3/error/RegistryException.java | 72 +-
.../v3/error/TokenAlreadyExistsException.java | 74 +-
.../v3/error/TransferNotAllowedException.java | 74 +-
.../org/apache/juddi/v3/error/UDDIErrorHelper.java | 422 +-
.../juddi/v3/error/UnknownUserException.java | 72 +-
.../juddi/v3/error/UnsupportedException.java | 72 +-
.../juddi/v3/error/UserMismatchException.java | 64 +-
.../juddi/v3/error/ValueNotAllowedException.java | 74 +-
.../org/apache/juddi/v3/error/package-info.java | 0
.../org/apache/juddi/validation/ValidateClerk.java | 198 +-
.../validation/ValidateClientSubscriptionInfo.java | 280 +-
.../juddi/validation/ValidateCustodyTransfer.java | 0
.../apache/juddi/validation/ValidateInquiry.java | 1604 +++---
.../org/apache/juddi/validation/ValidateNode.java | 246 +-
.../apache/juddi/validation/ValidatePublish.java | 5102 ++++++++++----------
.../apache/juddi/validation/ValidatePublisher.java | 288 +-
.../juddi/validation/ValidateReplication.java | 0
.../apache/juddi/validation/ValidateSecurity.java | 0
.../juddi/validation/ValidateSubscription.java | 0
.../validation/ValidateSubscriptionListener.java | 80 +-
.../apache/juddi/validation/ValidateUDDIApi.java | 172 +-
.../apache/juddi/validation/ValidateUDDIKey.java | 320 +-
.../juddi/validation/ValidateUDDIv2Inquiry.java | 0
.../juddi/validation/ValidateValueSetCaching.java | 0
.../validation/ValidateValueSetValidation.java | 0
.../validation/ValidateValuesFromWebService.java | 0
.../juddi/validation/ValidationConstants.java | 0
.../org/apache/juddi/validation/package-info.java | 0
.../validation/vsv/AbstractSimpleValidator.java | 0
.../vsv/Uddiuddiorgcategorizationderivedfrom.java | 0
.../Uddiuddiorgcategorizationentitykeyvalues.java | 0
.../vsv/Uddiuddiorgcategorizationnodes.java | 0
.../Uddiuddiorgcategorizationowningbusiness.java | 0
.../vsv/Uddiuddiorgcategorizationtypes.java | 0
.../vsv/Uddiuddiorgcategorizationvalidatedby.java | 0
.../vsv/Uddiuddiorgidentifierisreplacedby.java | 0
.../validation/vsv/Uddiuddiorgrelationships.java | 0
.../vsv/Uuid25b22e3e3dfa3024b02a3438b9050b59.java | 0
.../vsv/Uuid327a56f032994461bc235cd513e95c55.java | 0
.../vsv/Uuid4064c0646d144f3589539652106476a9.java | 0
.../vsv/Uuid5678dd4ff95d35f99ea6f79a7dd64656.java | 0
.../vsv/Uuid807a2c6aee22470dadc7e0424a337c03.java | 0
.../vsv/Uuid916b87bf075639198eae97dfa325e5a4.java | 0
.../vsv/Uuidc1acf26d967244049d7039b756e62ab4.java | 0
.../vsv/Uuide59ae32077a511d5b8980004ac49cc1e.java | 0
.../juddi/validation/vsv/ValueSetValidator.java | 0
.../juddi_install_data/UDDI_Publisher.xml | 44 +-
.../resources/juddi_install_data/UDDI_tModels.xml | 4850 +++++++++----------
.../juddi_install_data/root_BusinessEntity.xml | 1336 ++---
.../juddi_install_data/root_Publisher.xml | 42 +-
.../root_replicationConfiguration.xml | 0
.../juddi_install_data/root_tModelKeyGen.xml | 80 +-
.../src/main/resources/messages.properties | 622 +--
juddi-core-openjpa/src/test/.gitignore | 1 -
.../juddi/api/impl/API_010_PublisherTest.java | 690 +--
.../apache/juddi/api/impl/API_020_TmodelTest.java | 250 +-
.../juddi/api/impl/API_030_BusinessEntityTest.java | 320 +-
.../api/impl/API_040_BusinessServiceLoadTest.java | 344 +-
.../api/impl/API_040_BusinessServiceTest.java | 362 +-
.../api/impl/API_050_BindingTemplateTest.java | 618 +--
.../api/impl/API_051_BindingTemplateWSDLTest.java | 288 +-
.../api/impl/API_060_PublisherAssertionTest.java | 1014 ++--
.../juddi/api/impl/API_070_FindEntityTest.java | 628 +--
.../juddi/api/impl/API_080_SubscriptionTest.java | 322 +-
...PI_090_SubscriptionListenerIntegrationTest.java | 0
.../apache/juddi/api/impl/API_099_LoadTest.java | 0
.../impl/API_100_ClientSubscriptionInfoTest.java | 406 +-
.../juddi/api/impl/API_110_FindBusinessTest.java | 0
...API_120_CombineCategoryBagsFindServiceTest.java | 0
...PI_130_CombineCategoryBagsFindBusinessTest.java | 0
.../api/impl/API_140_NegativePublicationTest.java | 4888 +++++++++----------
.../apache/juddi/api/impl/API_141_JIRATest.java | 2838 +++++------
.../api/impl/API_150_ValueSetValidationTest.java | 0
.../juddi/api/impl/API_160_ReplicationTest.java | 0
.../api/impl/API_170_CustodyTransferTest.java | 0
.../java/org/apache/juddi/api/impl/TokenTest.java | 0
.../juddi/api/impl/UDDIPublicationImplExt.java | 0
.../apache/juddi/api/impl/UDDISecurityImplExt.java | 0
.../java/org/apache/juddi/api/impl/package.html | 0
.../apache/juddi/api/runtime/CLIServerTest.java | 0
.../apache/juddi/api/runtime/JuddiTestimpl.java | 0
.../apache/juddi/api/runtime/ReplicantImpl.java | 0
.../org/apache/juddi/auth/AuthenticatorTest.java | 0
.../apache/juddi/auth/MockHttpServletRequest.java | 0
.../org/apache/juddi/auth/MockMessageContext.java | 0
.../apache/juddi/auth/MockWebServiceContext.java | 0
.../juddi/config/ApplicationConfigurationTest.java | 0
.../java/org/apache/juddi/config/InstallTest.java | 0
.../apache/juddi/config/ReleaseVersionTest.java | 0
.../org/apache/juddi/keygen/KeyGeneratorTest.java | 0
.../juddi/replication/ReplicationNotifierTest.java | 0
.../subscription/SubscriptionNotifierTest.java | 0
.../juddi/subscription/notify/NotifierTest.java | 0
.../test/java/org/apache/juddi/util/JPAUtil.java | 314 +-
.../src/test/resources/META-INF/uddi.xml | 160 +-
.../src/test/resources/juddi-users-hashed.xml | 1 +
.../src/test/resources/juddiv3-enc-3des.xml | 30 +-
.../src/test/resources/juddiv3-enc-aes128.xml | 31 +-
.../src/test/resources/juddiv3-enc-aes256.xml | 26 +-
.../src/test/resources/juddiv3-enc-default.xml | 20 +-
juddi-core-openjpa/src/test/resources/juddiv3.xml | 25 +-
.../test/resources/juddiv3DisabledTModelKeybag.xml | 18 +-
juddi-core/.gitignore | 6 -
juddi-core/pom.xml | 189 -
juddi-core/src/test/resources/META-INF/orm.xml | 241 -
.../src/test/resources/META-INF/persistence.xml | 118 -
juddi-core/src/test/resources/META-INF/uddi.xml | 114 -
.../src/test/resources/juddi-users-encrypted.xml | 22 -
.../src/test/resources/juddi-users-hashed.xml | 23 -
juddi-core/src/test/resources/juddi-users.xml | 22 -
juddi-core/src/test/resources/juddiv3-enc-3des.xml | 222 -
.../src/test/resources/juddiv3-enc-aes128.xml | 218 -
.../src/test/resources/juddiv3-enc-aes256.xml | 225 -
.../src/test/resources/juddiv3-enc-default.xml | 222 -
juddi-core/src/test/resources/juddiv3.xml | 225 -
.../test/resources/juddiv3DisabledTModelKeybag.xml | 230 -
juddi-core/src/test/resources/keystore.jks | Bin 2253 -> 0 bytes
juddi-core/src/test/resources/log4j.xml | 36 -
juddi-core/src/test/resources/truststore.jks | Bin 965 -> 0 bytes
juddi-core/src/test/resources/wsdl/sample.wsdl | 70 -
juddi-ddl-generator/pom.xml | 4 +-
juddi-dist/.gitignore | 6 -
juddi-dist/pom.xml | 6 +-
juddi-examples/.gitignore | 6 -
juddi-examples/ValueSetValidator/pom.xml | 2 +-
juddi-examples/hello-world-embedded/.gitignore | 6 -
juddi-examples/hello-world-embedded/pom.xml | 2 +-
juddi-examples/hello-world/.gitignore | 6 -
juddi-examples/juddi-embedded/pom.xml | 2 +-
juddi-examples/more-uddi-samples/.gitignore | 6 -
juddi-examples/service-version/.gitignore | 6 -
juddi-examples/simple-browse/.gitignore | 6 -
juddi-examples/simple-publish-clerk/.gitignore | 6 -
juddi-examples/simple-publish-portable/.gitignore | 6 -
.../subscription-notification-amqp/pom.xml | 2 +-
juddi-examples/uddi-annotations/.gitignore | 6 -
.../uddiv2-api-bridge-example/.gitignore | 6 -
juddi-examples/wsdl2uddi-lifecyle/.gitignore | 6 -
juddi-examples/wsdl2uddi/.gitignore | 6 -
juddi-extras/.gitignore | 6 -
juddi-gui/.gitignore | 6 -
juddi-rest-cxf/.gitignore | 6 -
juddi-rest-cxf/pom.xml | 3 +-
juddi-tomcat/.gitignore | 6 -
juddiv3-war-repl/.gitignore | 6 -
juddiv3-war-repl/pom.xml | 376 +-
juddiv3-war/.gitignore | 6 -
juddiv3-war/pom.xml | 375 +-
pom.xml | 21 +-
uddi-client-dist/.gitignore | 6 -
uddi-migration-tool/.gitignore | 6 -
uddi-tck-base/.gitignore | 6 -
uddi-tck-runner/.gitignore | 6 -
uddi-tck/.gitignore | 6 -
uddi-ws/.gitignore | 6 -
377 files changed, 34881 insertions(+), 37931 deletions(-)
diff --git a/docs/.gitignore b/docs/.gitignore
deleted file mode 100644
index c1a69fdf9..000000000
--- a/docs/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-target
-**/target/*
-**/derby.log
-**/.project
-**/.classpath
-**/.settings/*
diff --git a/docs/asciidoc/.gitignore b/docs/asciidoc/.gitignore
deleted file mode 100644
index c1a69fdf9..000000000
--- a/docs/asciidoc/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-target
-**/target/*
-**/derby.log
-**/.project
-**/.classpath
-**/.settings/*
diff --git a/docs/asciidoc/ClientGuide/.gitignore b/docs/asciidoc/ClientGuide/.gitignore
deleted file mode 100644
index c1a69fdf9..000000000
--- a/docs/asciidoc/ClientGuide/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-target
-**/target/*
-**/derby.log
-**/.project
-**/.classpath
-**/.settings/*
diff --git a/docs/asciidoc/Guide/.gitignore b/docs/asciidoc/Guide/.gitignore
deleted file mode 100644
index c1a69fdf9..000000000
--- a/docs/asciidoc/Guide/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-target
-**/target/*
-**/derby.log
-**/.project
-**/.classpath
-**/.settings/*
diff --git a/docs/dist/.gitignore b/docs/dist/.gitignore
deleted file mode 100644
index c1a69fdf9..000000000
--- a/docs/dist/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-target
-**/target/*
-**/derby.log
-**/.project
-**/.classpath
-**/.settings/*
diff --git a/docs/examples/auth/pom.xml b/docs/examples/auth/pom.xml
index f42954b4e..eab50cf49 100644
--- a/docs/examples/auth/pom.xml
+++ b/docs/examples/auth/pom.xml
@@ -44,7 +44,7 @@
</dependency>
<dependency>
<groupId>org.apache.juddi</groupId>
- <artifactId>juddi-core</artifactId>
+ <artifactId>juddi-core-openjpa</artifactId>
<version>${project.parent.version}</version>
<scope>compile</scope>
</dependency>
diff --git a/juddi-client-cli/.gitignore b/juddi-client-cli/.gitignore
deleted file mode 100644
index c1a69fdf9..000000000
--- a/juddi-client-cli/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-target
-**/target/*
-**/derby.log
-**/.project
-**/.classpath
-**/.settings/*
diff --git a/juddi-client.net/.gitignore b/juddi-client.net/.gitignore
deleted file mode 100644
index c1a69fdf9..000000000
--- a/juddi-client.net/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-target
-**/target/*
-**/derby.log
-**/.project
-**/.classpath
-**/.settings/*
diff --git a/juddi-client/.gitignore b/juddi-client/.gitignore
deleted file mode 100644
index d229ff0f1..000000000
--- a/juddi-client/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-target
-**/target/*
-**/derby.log
-**/.project
-**/.classpath
-**/.settings/
diff --git a/juddi-core-openjpa/.gitignore b/juddi-core-openjpa/.gitignore
deleted file mode 100644
index c1a69fdf9..000000000
--- a/juddi-core-openjpa/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-target
-**/target/*
-**/derby.log
-**/.project
-**/.classpath
-**/.settings/*
diff --git a/juddi-core-openjpa/pom.xml b/juddi-core-openjpa/pom.xml
index e2adb03ff..d4df8044d 100644
--- a/juddi-core-openjpa/pom.xml
+++ b/juddi-core-openjpa/pom.xml
@@ -30,13 +30,7 @@
OpenJPA.
</description>
<build>
- <sourceDirectory>../juddi-core/src/main/java</sourceDirectory>
- <testSourceDirectory>../juddi-core/src/test/java</testSourceDirectory>
- <resources>
- <resource>
- <directory>../juddi-core/src/main/resources</directory>
- </resource>
- </resources>
+
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
@@ -62,7 +56,7 @@
<plugin>
<groupId>org.apache.openjpa</groupId>
<artifactId>openjpa-maven-plugin</artifactId>
- <version>3.1.0</version>
+ <version>3.2.2</version>
<configuration>
<includes>**/org/apache/juddi/model/*.class</includes>
<addDefaultConstructor>true</addDefaultConstructor>
@@ -82,34 +76,12 @@
<dependency>
<groupId>org.apache.openjpa</groupId>
<artifactId>openjpa</artifactId>
- <version>3.1.0</version>
+ <version>3.2.2</version>
</dependency>
</dependencies>
</plugin>
- <plugin>
- <artifactId>maven-clean-plugin</artifactId>
- <version>2.6.1</version>
- <configuration>
- <filesets>
- <fileset>
- <directory>src/main/java</directory>
- <includes>
- <include>**/*</include>
- </includes>
- <followSymlinks>false</followSymlinks>
- </fileset>
- <fileset>
- <directory>src/test/java</directory>
- <includes>
- <include>**/*</include>
- </includes>
- <followSymlinks>false</followSymlinks>
- </fileset>
- </filesets>
- </configuration>
- </plugin>
-
+
</plugins>
</build>
<dependencies>
@@ -140,7 +112,7 @@
<dependency>
<groupId>org.apache.openjpa</groupId>
<artifactId>openjpa</artifactId>
- <version>2.3.0</version>
+ <version>3.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
diff --git a/juddi-core-openjpa/src/.gitignore b/juddi-core-openjpa/src/.gitignore
deleted file mode 100644
index 95811e001..000000000
--- a/juddi-core-openjpa/src/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/main
diff --git a/juddi-core/src/main/java/org/apache/juddi/ClassUtil.java b/juddi-core-openjpa/src/main/java/org/apache/juddi/ClassUtil.java
similarity index 100%
rename from juddi-core/src/main/java/org/apache/juddi/ClassUtil.java
rename to juddi-core-openjpa/src/main/java/org/apache/juddi/ClassUtil.java
diff --git a/juddi-core/src/main/java/org/apache/juddi/Registry.java b/juddi-core-openjpa/src/main/java/org/apache/juddi/Registry.java
similarity index 100%
rename from juddi-core/src/main/java/org/apache/juddi/Registry.java
rename to juddi-core-openjpa/src/main/java/org/apache/juddi/Registry.java
diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/AuthenticatedService.java b/juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/AuthenticatedService.java
similarity index 98%
rename from juddi-core/src/main/java/org/apache/juddi/api/impl/AuthenticatedService.java
rename to juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/AuthenticatedService.java
index 5886a5faa..631a0e3ac 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/AuthenticatedService.java
+++ b/juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/AuthenticatedService.java
@@ -1,253 +1,253 @@
-/*
- * Copyright 2001-2008 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.juddi.api.impl;
-
-import java.util.Date;
-import javax.annotation.Resource;
-
-import javax.persistence.EntityManager;
-import javax.servlet.http.HttpServletRequest;
-import javax.xml.datatype.DatatypeConfigurationException;
-import javax.xml.datatype.DatatypeFactory;
-import javax.xml.ws.WebServiceContext;
-import javax.xml.ws.handler.MessageContext;
-
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.juddi.config.AppConfig;
-import org.apache.juddi.config.Property;
-import org.apache.juddi.model.UddiEntityPublisher;
-import org.apache.juddi.v3.auth.Authenticator;
-import org.apache.juddi.v3.auth.AuthenticatorFactory;
-import org.apache.juddi.v3.error.AuthTokenRequiredException;
-import org.apache.juddi.v3.error.AuthTokenExpiredException;
-import org.apache.juddi.v3.error.ErrorMessage;
-import org.uddi.v3_service.DispositionReportFaultMessage;
-
-/**
- * Although this class is abstract, it provides token validation
- *
- * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
- *
- * @author <a href="mailto:alexoree@apache.org">Alex O'Ree</a> - modified to
- * include token expiration validation
- */
-public abstract class AuthenticatedService {
-
- /**
- * @return the node
- */
- public String getNode() {
- return node;
- }
-
- public static final String UTF8 = "UTF-8";
- public static final int AUTHTOKEN_ACTIVE = 1;
- public static final int AUTHTOKEN_RETIRED = 0;
- static final Log logger = LogFactory.getLog(AuthenticatedService.class);
- /**
- * the node id of this server instance, as loaded from the config file
- */
- private String node = "UNDEFINED_NODE_NAME";
- protected String baseUrlSSL = "UNDEFINED";
- protected String baseUrl = "UNDEFINED";
- protected DatatypeFactory df = null;
-
- public AuthenticatedService() {
- try {
- node = AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID, "UNDEFINED_NODE_NAME");
- node = node.trim();
- baseUrlSSL = AppConfig.getConfiguration().getString(Property.JUDDI_BASE_URL_SECURE, Property.DEFAULT_BASE_URL_SECURE);
- baseUrlSSL = baseUrlSSL.trim();
- } catch (ConfigurationException ex) {
- logger.fatal(null, ex);
- }
- init();
- }
-
- /**
- * this method can be used to explicitly set a request context. this is useful
- * in unit tests, embedded and in-vm scenarios only
- * @param ctx
- * @since 3.3.8
- */
- public void setContext(WebServiceContext ctx) {
- this.ctx = ctx;
- }
-
- private synchronized void init() {
- try {
- df = DatatypeFactory.newInstance();
- } catch (DatatypeConfigurationException ex) {
- logger.fatal(null, ex);
- }
- }
-
- @Resource
- protected WebServiceContext ctx;
-
- public UddiEntityPublisher getEntityPublisher(EntityManager em, String authInfo) throws DispositionReportFaultMessage {
- boolean useAuthInfo = true;
- try {
- useAuthInfo = AppConfig.getConfiguration().getBoolean(Property.JUDDI_AUTHENTICATOR_USE_TOKEN, true);
- } catch (ConfigurationException ex) {
-
- }
- if (useAuthInfo) {
-
- if (authInfo == null || authInfo.length() == 0) {
- throw new AuthTokenRequiredException(new ErrorMessage("errors.auth.AuthRequired"));
- }
-
- org.apache.juddi.model.AuthToken modelAuthToken = em.find(org.apache.juddi.model.AuthToken.class, authInfo);
- if (modelAuthToken == null) {
- throw new AuthTokenRequiredException(new ErrorMessage("errors.auth.AuthInvalid"));
- }
-
- int allowedMinutesOfInactivity = 0;
- try {
- allowedMinutesOfInactivity = AppConfig.getConfiguration().getInt(Property.JUDDI_AUTH_TOKEN_TIMEOUT, 0);
- } catch (ConfigurationException ce) {
- logger.error("Error reading property " + Property.JUDDI_AUTH_TOKEN_EXPIRATION + " from "
- + "the application's configuration. No automatic timeout token invalidation will occur. "
- + ce.getMessage(), ce);
- }
- int maxMinutesOfAge = 0;
- try {
- maxMinutesOfAge = AppConfig.getConfiguration().getInt(Property.JUDDI_AUTH_TOKEN_EXPIRATION, 0);
- } catch (ConfigurationException ce) {
- logger.error("Error reading property " + Property.JUDDI_AUTH_TOKEN_EXPIRATION + " from "
- + "the application's configuration. No automatic timeout token invalidation will occur. "
- + ce.getMessage(), ce);
- }
- Date now = new Date();
- // 0 or negative means token does not expire
- if (allowedMinutesOfInactivity > 0) {
- // expire tokens after # minutes of inactivity
- // compare the time in milli-seconds
- if (now.getTime() > modelAuthToken.getLastUsed().getTime() + allowedMinutesOfInactivity * 60000l) {
- logger.info("AUDIT: FAILTURE Token " + modelAuthToken.getAuthToken() + " expired due to inactivity " + getRequestorsIPAddress());
- modelAuthToken.setTokenState(AUTHTOKEN_RETIRED);
- }
- }
- if (maxMinutesOfAge > 0) {
- // expire tokens when max age is reached
- // compare the time in milli-seconds
- if (now.getTime() > modelAuthToken.getCreated().getTime() + maxMinutesOfAge * 60000l) {
-
- logger.info("AUDIT: FAILURE - Token " + modelAuthToken.getAuthorizedName() + " expired due to old age " + getRequestorsIPAddress());
- modelAuthToken.setTokenState(AUTHTOKEN_RETIRED);
- }
- }
-
- if (modelAuthToken.getTokenState() == AUTHTOKEN_RETIRED) {
-
- throw new AuthTokenExpiredException(new ErrorMessage("errors.auth.AuthTokenExpired"));
- }
- if (ctx != null) {
- try {
- boolean check = true;
- try {
- check = AppConfig.getConfiguration().getBoolean(Property.JUDDI_AUTH_TOKEN_ENFORCE_SAME_IP, true);
- } catch (ConfigurationException ex) {
- logger.warn("Error loading config property " + Property.JUDDI_AUTH_TOKEN_ENFORCE_SAME_IP
- + " Enforcing Same IP for Auth Tokens will be enabled by default", ex);
- }
- if (check) {
- MessageContext mc = ctx.getMessageContext();
- HttpServletRequest req = null;
- if (mc != null) {
- req = (HttpServletRequest) mc.get(MessageContext.SERVLET_REQUEST);
- }
- if (req != null
- && req.getRemoteAddr() != null
- && modelAuthToken.getIPAddress() != null
- && !modelAuthToken.getIPAddress().equalsIgnoreCase(req.getRemoteAddr())) {
- modelAuthToken.setTokenState(AUTHTOKEN_RETIRED);
- logger.error("AUDIT FAILURE - Security Alert - Attempt to use issued auth token from a different IP address, user "
- + modelAuthToken.getAuthorizedName() + ", issued IP " + modelAuthToken.getIPAddress()
- + ", attempted use from " + req.getRemoteAddr() + ", forcing reauthentication.");
- throw new AuthTokenRequiredException(new ErrorMessage("errors.auth.AuthInvalid"));
- //invalidate the token, someone's intercepted it or it was reused on another ip
- }
- }
- } catch (Exception ex) {
- if (ex instanceof AuthTokenRequiredException) {
- throw (AuthTokenRequiredException) ex;
- }
- logger.error("unexpected error caught looking up requestor's ip address", ex);
- }
-
- }
- Authenticator authenticator = AuthenticatorFactory.getAuthenticator();
- UddiEntityPublisher entityPublisher = authenticator.identify(authInfo, modelAuthToken.getAuthorizedName(), ctx);
-
- // Must make sure the returned publisher has all the necessary fields filled
- if (entityPublisher == null) {
- logger.warn("AUDIT FAILURE - Auth token invalid, publisher does not exist " + getRequestorsIPAddress());
- throw new AuthTokenRequiredException(new ErrorMessage("errors.auth.AuthInvalid"));
- }
- if (entityPublisher.getAuthorizedName() == null) {
- logger.warn("AUDIT FAILURE - Auth token invalid, username does exist" + getRequestorsIPAddress());
- throw new AuthTokenRequiredException(new ErrorMessage("errors.auth.AuthInvalid"));
- }
- // Auth token is being used. Adjust appropriate values so that it's internal 'expiration clock' is reset.
- modelAuthToken.setLastUsed(new Date());
- modelAuthToken.setNumberOfUses(modelAuthToken.getNumberOfUses() + 1);
- return entityPublisher;
- } else {
- //use non-token based authentication
- Authenticator authenticator = AuthenticatorFactory.getAuthenticator();
- UddiEntityPublisher entityPublisher = authenticator.identify(null, null, ctx);
- // Must make sure the returned publisher has all the necessary fields filled
- if (entityPublisher == null) {
- logger.warn("AUDIT FAILURE - Auth token invalid, publisher does not exist " + getRequestorsIPAddress());
- throw new AuthTokenRequiredException(new ErrorMessage("errors.auth.AuthInvalid"));
- }
- if (entityPublisher.getAuthorizedName() == null) {
- logger.warn("AUDIT FAILURE - Auth token invalid, username does exist" + getRequestorsIPAddress());
- throw new AuthTokenRequiredException(new ErrorMessage("errors.auth.AuthInvalid"));
- }
- return entityPublisher;
-
- }
-
- }
-
- /**
- * Attempts to get the requestor's ip address from the servlet context,
- * defaults to null it it can't be retrieved
- *
- * @return requestor's ip address or null if it's not available
- */
- public String getRequestorsIPAddress() {
- try {
- MessageContext mc = ctx.getMessageContext();
- HttpServletRequest req = null;
- if (mc != null) {
- req = (HttpServletRequest) mc.get(MessageContext.SERVLET_REQUEST);
- }
- if (req != null) {
- return req.getRemoteAddr();
- }
- } catch (Exception ex) {
- logger.debug("Error caught looking up the requestor's ip address", ex);
- }
- return null;
- }
-}
+/*
+ * Copyright 2001-2008 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.juddi.api.impl;
+
+import java.util.Date;
+import javax.annotation.Resource;
+
+import javax.persistence.EntityManager;
+import javax.servlet.http.HttpServletRequest;
+import javax.xml.datatype.DatatypeConfigurationException;
+import javax.xml.datatype.DatatypeFactory;
+import javax.xml.ws.WebServiceContext;
+import javax.xml.ws.handler.MessageContext;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.juddi.config.AppConfig;
+import org.apache.juddi.config.Property;
+import org.apache.juddi.model.UddiEntityPublisher;
+import org.apache.juddi.v3.auth.Authenticator;
+import org.apache.juddi.v3.auth.AuthenticatorFactory;
+import org.apache.juddi.v3.error.AuthTokenRequiredException;
+import org.apache.juddi.v3.error.AuthTokenExpiredException;
+import org.apache.juddi.v3.error.ErrorMessage;
+import org.uddi.v3_service.DispositionReportFaultMessage;
+
+/**
+ * Although this class is abstract, it provides token validation
+ *
+ * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
+ *
+ * @author <a href="mailto:alexoree@apache.org">Alex O'Ree</a> - modified to
+ * include token expiration validation
+ */
+public abstract class AuthenticatedService {
+
+ /**
+ * @return the node
+ */
+ public String getNode() {
+ return node;
+ }
+
+ public static final String UTF8 = "UTF-8";
+ public static final int AUTHTOKEN_ACTIVE = 1;
+ public static final int AUTHTOKEN_RETIRED = 0;
+ static final Log logger = LogFactory.getLog(AuthenticatedService.class);
+ /**
+ * the node id of this server instance, as loaded from the config file
+ */
+ private String node = "UNDEFINED_NODE_NAME";
+ protected String baseUrlSSL = "UNDEFINED";
+ protected String baseUrl = "UNDEFINED";
+ protected DatatypeFactory df = null;
+
+ public AuthenticatedService() {
+ try {
+ node = AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID, "UNDEFINED_NODE_NAME");
+ node = node.trim();
+ baseUrlSSL = AppConfig.getConfiguration().getString(Property.JUDDI_BASE_URL_SECURE, Property.DEFAULT_BASE_URL_SECURE);
+ baseUrlSSL = baseUrlSSL.trim();
+ } catch (ConfigurationException ex) {
+ logger.fatal(null, ex);
+ }
+ init();
+ }
+
+ /**
+ * this method can be used to explicitly set a request context. this is useful
+ * in unit tests, embedded and in-vm scenarios only
+ * @param ctx
+ * @since 3.3.8
+ */
+ public void setContext(WebServiceContext ctx) {
+ this.ctx = ctx;
+ }
+
+ private synchronized void init() {
+ try {
+ df = DatatypeFactory.newInstance();
+ } catch (DatatypeConfigurationException ex) {
+ logger.fatal(null, ex);
+ }
+ }
+
+ @Resource
+ protected WebServiceContext ctx;
+
+ public UddiEntityPublisher getEntityPublisher(EntityManager em, String authInfo) throws DispositionReportFaultMessage {
+ boolean useAuthInfo = true;
+ try {
+ useAuthInfo = AppConfig.getConfiguration().getBoolean(Property.JUDDI_AUTHENTICATOR_USE_TOKEN, true);
+ } catch (ConfigurationException ex) {
+
+ }
+ if (useAuthInfo) {
+
+ if (authInfo == null || authInfo.length() == 0) {
+ throw new AuthTokenRequiredException(new ErrorMessage("errors.auth.AuthRequired"));
+ }
+
+ org.apache.juddi.model.AuthToken modelAuthToken = em.find(org.apache.juddi.model.AuthToken.class, authInfo);
+ if (modelAuthToken == null) {
+ throw new AuthTokenRequiredException(new ErrorMessage("errors.auth.AuthInvalid"));
+ }
+
+ int allowedMinutesOfInactivity = 0;
+ try {
+ allowedMinutesOfInactivity = AppConfig.getConfiguration().getInt(Property.JUDDI_AUTH_TOKEN_TIMEOUT, 0);
+ } catch (ConfigurationException ce) {
+ logger.error("Error reading property " + Property.JUDDI_AUTH_TOKEN_EXPIRATION + " from "
+ + "the application's configuration. No automatic timeout token invalidation will occur. "
+ + ce.getMessage(), ce);
+ }
+ int maxMinutesOfAge = 0;
+ try {
+ maxMinutesOfAge = AppConfig.getConfiguration().getInt(Property.JUDDI_AUTH_TOKEN_EXPIRATION, 0);
+ } catch (ConfigurationException ce) {
+ logger.error("Error reading property " + Property.JUDDI_AUTH_TOKEN_EXPIRATION + " from "
+ + "the application's configuration. No automatic timeout token invalidation will occur. "
+ + ce.getMessage(), ce);
+ }
+ Date now = new Date();
+ // 0 or negative means token does not expire
+ if (allowedMinutesOfInactivity > 0) {
+ // expire tokens after # minutes of inactivity
+ // compare the time in milli-seconds
+ if (now.getTime() > modelAuthToken.getLastUsed().getTime() + allowedMinutesOfInactivity * 60000l) {
+ logger.info("AUDIT: FAILTURE Token " + modelAuthToken.getAuthToken() + " expired due to inactivity " + getRequestorsIPAddress());
+ modelAuthToken.setTokenState(AUTHTOKEN_RETIRED);
+ }
+ }
+ if (maxMinutesOfAge > 0) {
+ // expire tokens when max age is reached
+ // compare the time in milli-seconds
+ if (now.getTime() > modelAuthToken.getCreated().getTime() + maxMinutesOfAge * 60000l) {
+
+ logger.info("AUDIT: FAILURE - Token " + modelAuthToken.getAuthorizedName() + " expired due to old age " + getRequestorsIPAddress());
+ modelAuthToken.setTokenState(AUTHTOKEN_RETIRED);
+ }
+ }
+
+ if (modelAuthToken.getTokenState() == AUTHTOKEN_RETIRED) {
+
+ throw new AuthTokenExpiredException(new ErrorMessage("errors.auth.AuthTokenExpired"));
+ }
+ if (ctx != null) {
+ try {
+ boolean check = true;
+ try {
+ check = AppConfig.getConfiguration().getBoolean(Property.JUDDI_AUTH_TOKEN_ENFORCE_SAME_IP, true);
+ } catch (ConfigurationException ex) {
+ logger.warn("Error loading config property " + Property.JUDDI_AUTH_TOKEN_ENFORCE_SAME_IP
+ + " Enforcing Same IP for Auth Tokens will be enabled by default", ex);
+ }
+ if (check) {
+ MessageContext mc = ctx.getMessageContext();
+ HttpServletRequest req = null;
+ if (mc != null) {
+ req = (HttpServletRequest) mc.get(MessageContext.SERVLET_REQUEST);
+ }
+ if (req != null
+ && req.getRemoteAddr() != null
+ && modelAuthToken.getIPAddress() != null
+ && !modelAuthToken.getIPAddress().equalsIgnoreCase(req.getRemoteAddr())) {
+ modelAuthToken.setTokenState(AUTHTOKEN_RETIRED);
+ logger.error("AUDIT FAILURE - Security Alert - Attempt to use issued auth token from a different IP address, user "
+ + modelAuthToken.getAuthorizedName() + ", issued IP " + modelAuthToken.getIPAddress()
+ + ", attempted use from " + req.getRemoteAddr() + ", forcing reauthentication.");
+ throw new AuthTokenRequiredException(new ErrorMessage("errors.auth.AuthInvalid"));
+ //invalidate the token, someone's intercepted it or it was reused on another ip
+ }
+ }
+ } catch (Exception ex) {
+ if (ex instanceof AuthTokenRequiredException) {
+ throw (AuthTokenRequiredException) ex;
+ }
+ logger.error("unexpected error caught looking up requestor's ip address", ex);
+ }
+
+ }
+ Authenticator authenticator = AuthenticatorFactory.getAuthenticator();
+ UddiEntityPublisher entityPublisher = authenticator.identify(authInfo, modelAuthToken.getAuthorizedName(), ctx);
+
+ // Must make sure the returned publisher has all the necessary fields filled
+ if (entityPublisher == null) {
+ logger.warn("AUDIT FAILURE - Auth token invalid, publisher does not exist " + getRequestorsIPAddress());
+ throw new AuthTokenRequiredException(new ErrorMessage("errors.auth.AuthInvalid"));
+ }
+ if (entityPublisher.getAuthorizedName() == null) {
+ logger.warn("AUDIT FAILURE - Auth token invalid, username does exist" + getRequestorsIPAddress());
+ throw new AuthTokenRequiredException(new ErrorMessage("errors.auth.AuthInvalid"));
+ }
+ // Auth token is being used. Adjust appropriate values so that it's internal 'expiration clock' is reset.
+ modelAuthToken.setLastUsed(new Date());
+ modelAuthToken.setNumberOfUses(modelAuthToken.getNumberOfUses() + 1);
+ return entityPublisher;
+ } else {
+ //use non-token based authentication
+ Authenticator authenticator = AuthenticatorFactory.getAuthenticator();
+ UddiEntityPublisher entityPublisher = authenticator.identify(null, null, ctx);
+ // Must make sure the returned publisher has all the necessary fields filled
+ if (entityPublisher == null) {
+ logger.warn("AUDIT FAILURE - Auth token invalid, publisher does not exist " + getRequestorsIPAddress());
+ throw new AuthTokenRequiredException(new ErrorMessage("errors.auth.AuthInvalid"));
+ }
+ if (entityPublisher.getAuthorizedName() == null) {
+ logger.warn("AUDIT FAILURE - Auth token invalid, username does exist" + getRequestorsIPAddress());
+ throw new AuthTokenRequiredException(new ErrorMessage("errors.auth.AuthInvalid"));
+ }
+ return entityPublisher;
+
+ }
+
+ }
+
+ /**
+ * Attempts to get the requestor's ip address from the servlet context,
+ * defaults to null it it can't be retrieved
+ *
+ * @return requestor's ip address or null if it's not available
+ */
+ public String getRequestorsIPAddress() {
+ try {
+ MessageContext mc = ctx.getMessageContext();
+ HttpServletRequest req = null;
+ if (mc != null) {
+ req = (HttpServletRequest) mc.get(MessageContext.SERVLET_REQUEST);
+ }
+ if (req != null) {
+ return req.getRemoteAddr();
+ }
+ } catch (Exception ex) {
+ logger.debug("Error caught looking up the requestor's ip address", ex);
+ }
+ return null;
+ }
+}
diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/InquiryHelper.java b/juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/InquiryHelper.java
similarity index 97%
rename from juddi-core/src/main/java/org/apache/juddi/api/impl/InquiryHelper.java
rename to juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/InquiryHelper.java
index b4b88ed55..691314648 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/InquiryHelper.java
+++ b/juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/InquiryHelper.java
@@ -1,650 +1,650 @@
-/*
- * Copyright 2001-2008 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.juddi.api.impl;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.LinkedList;
-import java.util.List;
-
-import javax.persistence.EntityManager;
-import javax.xml.ws.Holder;
-import org.apache.commons.configuration.ConfigurationException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.juddi.config.AppConfig;
-import org.apache.juddi.config.Property;
-import org.apache.juddi.mapping.MappingModelToApi;
-import org.apache.juddi.model.BindingTemplate;
-import org.apache.juddi.query.FetchBindingTemplatesQuery;
-import org.apache.juddi.query.FetchBusinessEntitiesQuery;
-import org.apache.juddi.query.FetchBusinessServicesQuery;
-import org.apache.juddi.query.FetchTModelsQuery;
-import org.apache.juddi.query.FindBindingByCategoryGroupQuery;
-import org.apache.juddi.query.FindBindingByCategoryQuery;
-import org.apache.juddi.query.FindBindingByTModelKeyQuery;
-import org.apache.juddi.query.FindBusinessByCategoryGroupQuery;
-import org.apache.juddi.query.FindBusinessByCategoryQuery;
-import org.apache.juddi.query.FindBusinessByCombinedCategoryQuery;
-import org.apache.juddi.query.FindBusinessByDiscoveryURLQuery;
-import org.apache.juddi.query.FindBusinessByIdentifierQuery;
-import org.apache.juddi.query.FindBusinessByNameQuery;
-import org.apache.juddi.query.FindBusinessByTModelKeyQuery;
-import org.apache.juddi.query.FindServiceByCategoryGroupQuery;
-import org.apache.juddi.query.FindServiceByCategoryQuery;
-import org.apache.juddi.query.FindServiceByCombinedCategoryQuery;
-import org.apache.juddi.query.FindServiceByNameQuery;
-import org.apache.juddi.query.FindServiceByTModelKeyQuery;
-import org.apache.juddi.query.FindTModelByCategoryGroupQuery;
-import org.apache.juddi.query.FindTModelByCategoryQuery;
-import org.apache.juddi.query.FindTModelByIdentifierQuery;
-import org.apache.juddi.query.FindTModelByNameQuery;
-import org.apache.juddi.query.util.FindQualifiers;
-import org.apache.juddi.v3.error.ErrorMessage;
-import org.apache.juddi.v3.error.InvalidKeyPassedException;
-import org.uddi.api_v3.BindingDetail;
-import org.uddi.api_v3.BusinessList;
-import org.uddi.api_v3.Direction;
-import org.uddi.api_v3.FindBinding;
-import org.uddi.api_v3.FindBusiness;
-import org.uddi.api_v3.FindRelatedBusinesses;
-import org.uddi.api_v3.FindService;
-import org.uddi.api_v3.FindTModel;
-import org.uddi.api_v3.ListDescription;
-import org.uddi.api_v3.Name;
-import org.uddi.api_v3.RelatedBusinessesList;
-import org.uddi.api_v3.ServiceList;
-import org.uddi.api_v3.TModelBag;
-import org.uddi.api_v3.TModelList;
-import org.uddi.v3_service.DispositionReportFaultMessage;
-
-/**Co
- * Used to factor out inquiry functionality as it is used in more than one spot.
- *
- * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
- */
-public class InquiryHelper {
-
- private static Log logger = LogFactory.getLog(InquiryHelper.class);
-
- public static List<Object> findBinding(FindBinding body, FindQualifiers findQualifiers, EntityManager em) throws DispositionReportFaultMessage {
-
- List<Object> keysFound = new LinkedList<Object>();
- if (body.getServiceKey()!=null && body.getServiceKey().length() > 0) {
- keysFound = findBindingsByServiceKey(em, body.getServiceKey(), keysFound);
- }
-
- if (body.getTModelBag() == null)
- body.setTModelBag(new TModelBag());
- // First perform the embedded FindTModel search which will augment the tModel bag with any resulting tModel keys.
- doFindTModelEmbeddedSearch(em, body.getFindQualifiers(), body.getFindTModel(), body.getTModelBag());
- keysFound = FindBindingByTModelKeyQuery.select(em, findQualifiers, body.getTModelBag(), body.getServiceKey(), keysFound);
- keysFound = FindBindingByCategoryQuery.select(em, findQualifiers, body.getCategoryBag(), body.getServiceKey(), keysFound);
- keysFound = FindBindingByCategoryGroupQuery.select(em, findQualifiers, body.getCategoryBag(), body.getServiceKey(), keysFound);
-
- return keysFound;
- }
-
- public static BindingDetail getBindingDetailFromKeys(FindBinding body, FindQualifiers findQualifiers, EntityManager em, List<?> keysFound) throws DispositionReportFaultMessage {
- return getBindingDetailFromKeys(body, findQualifiers, em, keysFound, null, null, null, null);
- }
-
- public static BindingDetail getBindingDetailFromKeys(FindBinding body, FindQualifiers findQualifiers, EntityManager em, List<?> keysFound,
- Date modifiedAfter, Date modifiedBefore, Holder<Integer> subscriptionStartIndex, Integer subscriptionMaxRows)
- throws DispositionReportFaultMessage {
-
- BindingDetail result = new BindingDetail();
- ListDescription listDesc = new ListDescription();
- result.setListDescription(listDesc);
-
- // Sort and retrieve the final results with paging taken into account
- List<?> queryResults = FetchBindingTemplatesQuery.select(em, findQualifiers, keysFound, body.getMaxRows(), body.getListHead(), listDesc);
-
- // Set the currentIndex to 0 or the value of the subscriptionStartIndex
- int currentIndex = 0;
- if (subscriptionStartIndex != null && subscriptionStartIndex.value != null)
- currentIndex = subscriptionStartIndex.value;
-
- int returnedRowCount = 0;
-
- while (currentIndex < queryResults.size()) {
- Object item = queryResults.get(currentIndex);
-
- org.apache.juddi.model.BindingTemplate modelBindingTemplate = (org.apache.juddi.model.BindingTemplate)item;
- org.uddi.api_v3.BindingTemplate apiBindingTemplate = new org.uddi.api_v3.BindingTemplate();
-
- if (modifiedAfter != null && modifiedAfter.after(modelBindingTemplate.getModifiedIncludingChildren())) {
- currentIndex++;
- continue;
- }
-
- if (modifiedBefore != null && modifiedBefore.before(modelBindingTemplate.getModifiedIncludingChildren())) {
- currentIndex++;
- continue;
- }
-
- MappingModelToApi.mapBindingTemplate(modelBindingTemplate, apiBindingTemplate);
-
- result.getBindingTemplate().add(apiBindingTemplate);
-
- returnedRowCount++;
- // If the returned rows equals the max allowed, we can end the loop (applies to subscription calls only)
- if (subscriptionMaxRows != null) {
- if (returnedRowCount == subscriptionMaxRows)
- break;
- }
-
- currentIndex++;
- }
-
- // If the loop was broken prematurely (max row count hit) we set the subscriptionStartIndex to the next index to start with.
- // Otherwise, set it to null so the subscription call won't trigger chunk token generation.
- if (currentIndex < (queryResults.size() - 1)) {
- if (subscriptionStartIndex != null)
- subscriptionStartIndex.value = currentIndex + 1;
- result.setTruncated(Boolean.TRUE);
- }
- else {
- if (subscriptionStartIndex != null)
- subscriptionStartIndex.value = null;
- result.setTruncated(Boolean.FALSE);
- }
- result.getListDescription().setListHead(currentIndex);
- result.getListDescription().setActualCount(result.getBindingTemplate().size());
- result.getListDescription().setIncludeCount(returnedRowCount);
- return result;
- }
-
- public static List<Object> findBusiness(FindBusiness body, FindQualifiers findQualifiers, EntityManager em) throws DispositionReportFaultMessage {
-
- List<Object> keysFound = null;
-
- // First perform the embedded FindTModel search which will augment the tModel bag with any resulting tModel keys.
- if (body.getTModelBag() == null)
- body.setTModelBag(new TModelBag());
- doFindTModelEmbeddedSearch(em, body.getFindQualifiers(), body.getFindTModel(), body.getTModelBag());
-
- // The embedded find_relatedBusinesses search is performed first. This is done the same as the actual API call, except the resulting business keys are
- // extracted and placed in the keysFound array to restrict future searches to only those keys.
- if (body.getFindRelatedBusinesses() != null) {
- FindRelatedBusinesses frb = body.getFindRelatedBusinesses();
-
- org.uddi.api_v3.RelatedBusinessInfos relatedBusinessInfos = new org.uddi.api_v3.RelatedBusinessInfos();
- if (body.getFindRelatedBusinesses().getBusinessKey() != null ) {
- getRelatedBusinesses(em, Direction.FROM_KEY, frb.getBusinessKey(), frb.getKeyedReference(), relatedBusinessInfos);
- getRelatedBusinesses(em, Direction.TO_KEY, frb.getBusinessKey(), frb.getKeyedReference(), relatedBusinessInfos);
- }
- else if (body.getFindRelatedBusinesses().getFromKey() != null)
- getRelatedBusinesses(em, Direction.FROM_KEY, frb.getFromKey(), frb.getKeyedReference(), relatedBusinessInfos);
- else if (body.getFindRelatedBusinesses().getToKey() != null)
- getRelatedBusinesses(em, Direction.TO_KEY, frb.getToKey(), frb.getKeyedReference(), relatedBusinessInfos);
-
- List<Object> relatedBusinessKeys = new ArrayList<Object>(0);
- for (org.uddi.api_v3.RelatedBusinessInfo rbi : relatedBusinessInfos.getRelatedBusinessInfo())
- relatedBusinessKeys.add(rbi.getBusinessKey());
-
- keysFound = relatedBusinessKeys;
- }
-
- keysFound = FindBusinessByTModelKeyQuery.select(em, findQualifiers, body.getTModelBag(), keysFound);
- keysFound = FindBusinessByIdentifierQuery.select(em, findQualifiers, body.getIdentifierBag(), keysFound);
- keysFound = FindBusinessByDiscoveryURLQuery.select(em, findQualifiers, body.getDiscoveryURLs(), keysFound);
- if (findQualifiers.isCombineCategoryBags()) {
- keysFound = FindBusinessByCombinedCategoryQuery.select(em, findQualifiers, body.getCategoryBag(), keysFound);
- } else {
- keysFound = FindBusinessByCategoryQuery.select(em, findQualifiers, body.getCategoryBag(), keysFound);
- }
-
- keysFound = FindBusinessByCategoryGroupQuery.select(em, findQualifiers, body.getCategoryBag(), keysFound);
- keysFound = FindBusinessByNameQuery.select(em, findQualifiers, body.getName(), keysFound);
-
- // If there no keys in the bag then remove the empty TModelBag
- if (body.getTModelBag().getTModelKey().size()==0) body.setTModelBag(null);
-
- return keysFound;
- }
-
- public static BusinessList getBusinessListFromKeys(FindBusiness body, FindQualifiers findQualifiers, EntityManager em, List<?> keysFound) throws DispositionReportFaultMessage {
- return getBusinessListFromKeys(body, findQualifiers, em, keysFound, null, null, null, null);
- }
-
- public static BusinessList getBusinessListFromKeys(FindBusiness body, FindQualifiers findQualifiers, EntityManager em, List<?> keysFound,
- Date modifiedAfter, Date modifiedBefore, Holder<Integer> subscriptionStartIndex, Integer subscriptionMaxRows)
- throws DispositionReportFaultMessage {
-
- BusinessList result = new BusinessList();
- ListDescription listDesc = new ListDescription();
- result.setListDescription(listDesc);
-
- // Sort and retrieve the final results taking paging into account
- List<?> queryResults = FetchBusinessEntitiesQuery.select(em, findQualifiers, keysFound, body.getMaxRows(), body.getListHead(), listDesc);
-
- boolean enabled = true;
- try {
- //AppConfig.reloadConfig();
- enabled= AppConfig.getConfiguration().getBoolean(Property.JUDDI_ENABLE_FIND_BUSINESS_TMODEL_BAG_FILTERING, true);
- } catch (ConfigurationException ex) {
- logger.error(ex);
- }
- if (enabled) {
- logger.info("FindBusiness by tModelBag is enabled! Loaded from " + AppConfig.getConfigFileURL());
- List<?> serviceResults = null;
- for (int i = 0; i < queryResults.size(); i++) {
- org.apache.juddi.model.BusinessEntity be = (org.apache.juddi.model.BusinessEntity) queryResults.get(i);
-
- List<Object> keysIn = new ArrayList<Object>();
- List<org.apache.juddi.model.BusinessService> services = be.getBusinessServices();
- for (int j = 0; j < services.size(); j++) {
- keysIn.add(services.get(j).getEntityKey());
- }
-
- serviceResults = FindServiceByTModelKeyQuery.select(em, findQualifiers, body.getTModelBag(), null, keysIn);
- if (serviceResults == null) {
- be.setBusinessServices(null);
- } else {
- ListDescription ldesc = new ListDescription();
- result.setListDescription(listDesc);
- List<?> srvcs = FetchBusinessServicesQuery.select(em, findQualifiers, serviceResults, body.getMaxRows(),
- body.getListHead(), ldesc);
- be.setBusinessServices((List<org.apache.juddi.model.BusinessService>) srvcs);
- }
- }
- }
-
-
- if (queryResults != null && queryResults.size() > 0)
- result.setBusinessInfos(new org.uddi.api_v3.BusinessInfos());
-
- // Set the currentIndex to 0 or the value of the subscriptionStartIndex
- int currentIndex = 0;
- if (subscriptionStartIndex != null && subscriptionStartIndex.value != null)
- currentIndex = subscriptionStartIndex.value;
-
- int returnedRowCount = 0;
-
- while (queryResults!=null && currentIndex < queryResults.size()) {
- Object item = queryResults.get(currentIndex);
-
- org.apache.juddi.model.BusinessEntity modelBusinessEntity = (org.apache.juddi.model.BusinessEntity)item;
- org.uddi.api_v3.BusinessInfo apiBusinessInfo = new org.uddi.api_v3.BusinessInfo();
-
- if (modifiedAfter != null && modifiedAfter.after(modelBusinessEntity.getModifiedIncludingChildren())){
- currentIndex++;
- continue;
- }
-
- if (modifiedBefore != null && modifiedBefore.before(modelBusinessEntity.getModifiedIncludingChildren())) {
- currentIndex++;
- continue;
- }
-
- MappingModelToApi.mapBusinessInfo(modelBusinessEntity, apiBusinessInfo);
-
- result.getBusinessInfos().getBusinessInfo().add(apiBusinessInfo);
-
- returnedRowCount++;
- // If the returned rows equals the max allowed, we can end the loop (applies to subscription calls only)
- if (subscriptionMaxRows != null) {
- if (returnedRowCount == subscriptionMaxRows)
- break;
- }
-
- currentIndex++;
- }
-
- // If the loop was broken prematurely (max row count hit) we set the subscriptionStartIndex to the next index to start with.
- // Otherwise, set it to null so the subscription call won't trigger chunk token generation.
- if (queryResults!=null && currentIndex < (queryResults.size() - 1)) {
- if (subscriptionStartIndex != null)
- subscriptionStartIndex.value = currentIndex + 1;
- result.setTruncated(Boolean.TRUE);
- }
- else {
- if (subscriptionStartIndex != null)
- subscriptionStartIndex.value = null;
- result.setTruncated(Boolean.FALSE);
- }
- return result;
- }
-
- public static List<?> findService(FindService body, FindQualifiers findQualifiers, EntityManager em) throws DispositionReportFaultMessage {
-
- List<Object> keysFound = null;
-
- // First perform the embedded FindTModel search which will augment the tModel bag with any resulting tModel keys.
- if (body.getTModelBag() == null)
- body.setTModelBag(new TModelBag());
- doFindTModelEmbeddedSearch(em, body.getFindQualifiers(), body.getFindTModel(), body.getTModelBag());
-
- keysFound = FindServiceByTModelKeyQuery.select(em, findQualifiers, body.getTModelBag(), body.getBusinessKey(), keysFound);
- if (findQualifiers.isCombineCategoryBags()) {
- keysFound = FindServiceByCombinedCategoryQuery.select(em, findQualifiers, body.getCategoryBag(), body.getBusinessKey(), keysFound);
- } else {
- keysFound = FindServiceByCategoryQuery.select(em, findQualifiers, body.getCategoryBag(), body.getBusinessKey(), keysFound);
- }
- keysFound = FindServiceByCategoryGroupQuery.select(em, findQualifiers, body.getCategoryBag(), body.getBusinessKey(), keysFound);
-
- if (body.getFindTModel()==null && body.getCategoryBag()==null &&
- ( body.getTModelBag()==null || body.getTModelBag().getTModelKey().size() == 0)
- && body.getName().size() == 0 && body.getBusinessKey() != null) {
- //support searching for all services for a business
- findQualifiers.setApproximateMatch(true);
- body.getName().add(new Name("%", null));
- }
- keysFound = FindServiceByNameQuery.select(em, findQualifiers, body.getName(), body.getBusinessKey(), keysFound);
-
- if (body.getTModelBag().getTModelKey().size()==0) body.setTModelBag(null);
- return keysFound;
- }
-
- public static ServiceList getServiceListFromKeys(FindService body, FindQualifiers findQualifiers, EntityManager em, List<?> keysFound) throws DispositionReportFaultMessage {
- return getServiceListFromKeys(body, findQualifiers, em, keysFound, null, null, null, null);
- }
-
- public static ServiceList getServiceListFromKeys(FindService body, FindQualifiers findQualifiers, EntityManager em, List<?> keysFound,
- Date modifiedAfter, Date modifiedBefore, Holder<Integer> subscriptionStartIndex, Integer subscriptionMaxRows)
- throws DispositionReportFaultMessage {
- ServiceList result = new ServiceList();
- ListDescription listDesc = new ListDescription();
- result.setListDescription(listDesc);
-
- // Sort and retrieve the final results taking paging into account
- List<?> queryResults = FetchBusinessServicesQuery.select(em, findQualifiers, keysFound, body.getMaxRows(), body.getListHead(), listDesc);
- if (queryResults != null && queryResults.size() > 0)
- result.setServiceInfos(new org.uddi.api_v3.ServiceInfos());
-
- // Set the currentIndex to 0 or the value of the subscriptionStartIndex
- int currentIndex = 0;
- if (subscriptionStartIndex != null && subscriptionStartIndex.value != null)
- currentIndex = subscriptionStartIndex.value;
-
- int returnedRowCount = 0;
- if (logger.isDebugEnabled()) logger.debug("Period = " + modifiedAfter + " ---- " + modifiedBefore);
- while (queryResults!=null && currentIndex < queryResults.size()) {
- Object item = queryResults.get(currentIndex);
-
- org.apache.juddi.model.BusinessService modelBusinessService = (org.apache.juddi.model.BusinessService)item;
- org.uddi.api_v3.ServiceInfo apiServiceInfo = new org.uddi.api_v3.ServiceInfo();
-
- logger.debug(modelBusinessService.getEntityKey() + " is modified " + modelBusinessService.getModifiedIncludingChildren() + " " + modelBusinessService.getModifiedIncludingChildren().getTime() );
- if (modifiedAfter != null && modifiedAfter.after(modelBusinessService.getModifiedIncludingChildren())) {
- currentIndex++;
- continue;
- }
-
- if (modifiedBefore != null && modifiedBefore.before(modelBusinessService.getModifiedIncludingChildren())) {
- currentIndex++;
- continue;
- }
- MappingModelToApi.mapServiceInfo(modelBusinessService, apiServiceInfo);
-
- result.getServiceInfos().getServiceInfo().add(apiServiceInfo);
-
- returnedRowCount++;
- // If the returned rows equals the max allowed, we can end the loop (applies to subscription calls only)
- if (subscriptionMaxRows != null) {
- if (returnedRowCount == subscriptionMaxRows)
- break;
- }
-
- currentIndex++;
- }
-
- // If the loop was broken prematurely (max row count hit) we set the subscriptionStartIndex to the next index to start with.
- // Otherwise, set it to null so the subscription call won't trigger chunk token generation.
- if (queryResults!=null && currentIndex < (queryResults.size() - 1)) {
- if (subscriptionStartIndex != null)
- subscriptionStartIndex.value = currentIndex + 1;
- result.setTruncated(Boolean.TRUE);
- }
- else {
- if (subscriptionStartIndex != null)
- subscriptionStartIndex.value = null;
- result.setTruncated(Boolean.FALSE);
- }
-
- return result;
- }
-
- public static List<Object> findTModel(FindTModel body, FindQualifiers findQualifiers, EntityManager em) throws DispositionReportFaultMessage {
- List<Object> keysFound = null;
-
- keysFound = FindTModelByIdentifierQuery.select(em, findQualifiers, body.getIdentifierBag(), keysFound);
- keysFound = FindTModelByCategoryQuery.select(em, findQualifiers, body.getCategoryBag(), keysFound);
- keysFound = FindTModelByCategoryGroupQuery.select(em, findQualifiers, body.getCategoryBag(), keysFound);
- keysFound = FindTModelByNameQuery.select(em, findQualifiers, body.getName(), keysFound);
-
- return keysFound;
- }
-
- public static TModelList getTModelListFromKeys(FindTModel body, FindQualifiers findQualifiers, EntityManager em, List<?> keysFound) throws DispositionReportFaultMessage {
- return getTModelListFromKeys(body, findQualifiers, em, keysFound, null, null, null, null);
- }
-
- public static TModelList getTModelListFromKeys(FindTModel body, FindQualifiers findQualifiers, EntityManager em, List<?> keysFound,
- Date modifiedAfter, Date modifiedBefore, Holder<Integer> subscriptionStartIndex, Integer subscriptionMaxRows)
- throws DispositionReportFaultMessage {
- TModelList result = new TModelList();
- ListDescription listDesc = new ListDescription();
- result.setListDescription(listDesc);
-
- // Sort and retrieve the final results taking paging into account
- List<?> queryResults = FetchTModelsQuery.select(em, findQualifiers, keysFound, body.getMaxRows(), body.getListHead(), listDesc);
- if (queryResults != null && queryResults.size() > 0)
- result.setTModelInfos(new org.uddi.api_v3.TModelInfos());
-
- // Set the currentIndex to 0 or the value of the subscriptionStartIndex
- int currentIndex = 0;
- if (subscriptionStartIndex != null && subscriptionStartIndex.value != null)
- currentIndex = subscriptionStartIndex.value;
-
- int returnedRowCount = 0;
-
- while (queryResults!=null && currentIndex < queryResults.size()) {
- Object item = queryResults.get(currentIndex);
-
- org.apache.juddi.model.Tmodel modelTModel = (org.apache.juddi.model.Tmodel)item;
- org.uddi.api_v3.TModelInfo apiTModelInfo = new org.uddi.api_v3.TModelInfo();
-
- if (modifiedAfter != null && modifiedAfter.after(modelTModel.getModifiedIncludingChildren())) {
- currentIndex++;
- continue;
- }
-
- if (modifiedBefore != null && modifiedBefore.before(modelTModel.getModifiedIncludingChildren())) {
- currentIndex++;
- continue;
- }
-
- MappingModelToApi.mapTModelInfo(modelTModel, apiTModelInfo);
-
- result.getTModelInfos().getTModelInfo().add(apiTModelInfo);
-
- returnedRowCount++;
- // If the returned rows equals the max allowed, we can end the loop (applies to subscription calls only)
- if (subscriptionMaxRows != null) {
- if (returnedRowCount == subscriptionMaxRows)
- break;
- }
-
- currentIndex++;
- }
-
- // If the loop was broken prematurely (max row count hit) we set the subscriptionStartIndex to the next index to start with.
- // Otherwise, set it to null so the subscription call won't trigger chunk token generation.
- if (queryResults!=null && currentIndex < (queryResults.size() - 1)) {
- if (subscriptionStartIndex != null)
- subscriptionStartIndex.value = currentIndex + 1;
- result.setTruncated(Boolean.TRUE);
- }
- else {
- if (subscriptionStartIndex != null)
- subscriptionStartIndex.value = null;
- result.setTruncated(Boolean.FALSE);
- }
-
- return result;
- }
-
-
- /*
- * Retrieves related businesses based on the focal business and the direction (fromKey or toKey). The focal business is retrieved and then the
- * appropriate publisher assertion collection is examined for matches. The assertion must be "completed" and if a keyedReference is passed, it must
- * match exactly. Successful assertion matches are mapped to a RelationBusinessInfo structure and added to the passed in RelationalBusinessInfos
- * structure.
- */
- public static void getRelatedBusinesses(EntityManager em,
- Direction direction,
- String focalKey,
- org.uddi.api_v3.KeyedReference keyedRef,
- org.uddi.api_v3.RelatedBusinessInfos relatedBusinessInfos)
- throws DispositionReportFaultMessage {
- getRelatedBusinesses(em, direction, focalKey, keyedRef, relatedBusinessInfos, null, null);
- }
-
- public static void getRelatedBusinesses(EntityManager em,
- Direction direction,
- String focalKey,
- org.uddi.api_v3.KeyedReference keyedRef,
- org.uddi.api_v3.RelatedBusinessInfos relatedBusinessInfos,
- Date modifiedAfter,
- Date modifiedBefore)
- throws DispositionReportFaultMessage {
- if (relatedBusinessInfos == null)
- relatedBusinessInfos = new org.uddi.api_v3.RelatedBusinessInfos();
- org.apache.juddi.model.BusinessEntity focalBusiness = null;
- try {
- focalBusiness = em.find(org.apache.juddi.model.BusinessEntity.class, focalKey);
- } catch (ClassCastException e) {}
- if (focalBusiness == null)
- throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.BusinessNotFound", focalKey));
-
- List<org.apache.juddi.model.PublisherAssertion> pubAssertList = null;
- if (direction == Direction.FROM_KEY)
- pubAssertList = focalBusiness.getPublisherAssertionsForFromKey();
- else
- pubAssertList = focalBusiness.getPublisherAssertionsForToKey();
-
- if (pubAssertList != null) {
- for (org.apache.juddi.model.PublisherAssertion modelPublisherAssertion : pubAssertList) {
- if ("true".equalsIgnoreCase(modelPublisherAssertion.getFromCheck()) && "true".equalsIgnoreCase(modelPublisherAssertion.getToCheck())) {
- if (keyedRef != null) {
- if(!keyedRef.getTModelKey().equals(modelPublisherAssertion.getTmodelKey()) ||
- !keyedRef.getKeyName().equals(modelPublisherAssertion.getKeyName()) ||
- !keyedRef.getKeyValue().equals(modelPublisherAssertion.getKeyValue())) {
- continue;
- }
- }
-
- org.apache.juddi.model.BusinessEntity modelRelatedBusiness = null;
- if (direction == Direction.FROM_KEY)
- modelRelatedBusiness = em.find(org.apache.juddi.model.BusinessEntity.class, modelPublisherAssertion.getId().getToKey());
- else
- modelRelatedBusiness = em.find(org.apache.juddi.model.BusinessEntity.class, modelPublisherAssertion.getId().getFromKey());
-
- if (modifiedAfter != null && modifiedAfter.after(modelRelatedBusiness.getModifiedIncludingChildren()))
- continue;
-
- if (modifiedBefore != null && modifiedBefore.before(modelRelatedBusiness.getModifiedIncludingChildren()))
- continue;
-
- org.uddi.api_v3.RelatedBusinessInfo apiRelatedBusinessInfo = new org.uddi.api_v3.RelatedBusinessInfo();
-
- MappingModelToApi.mapRelatedBusinessInfo(modelPublisherAssertion, modelRelatedBusiness, direction, apiRelatedBusinessInfo);
-
- relatedBusinessInfos.getRelatedBusinessInfo().add(apiRelatedBusinessInfo);
- }
- }
- }
-
- }
-
- public static RelatedBusinessesList getRelatedBusinessesList(FindRelatedBusinesses body, EntityManager em) throws DispositionReportFaultMessage {
- return getRelatedBusinessesList(body, em, null, null);
- }
-
- public static RelatedBusinessesList getRelatedBusinessesList(FindRelatedBusinesses body, EntityManager em, Date modifiedAfter, Date modifiedBefore) throws DispositionReportFaultMessage {
- RelatedBusinessesList result = new RelatedBusinessesList();
- result.setBusinessKey(body.getBusinessKey());
- ListDescription listDesc = new ListDescription();
- result.setListDescription(listDesc);
-
- // Either one of the businessKey, fromKey or toKey will be passed. This is considered the "focal" business to which related businesses must be
- // found. Rather than use a query, it seems simpler to take advantage of the model's publisher assertion collections.
- org.uddi.api_v3.RelatedBusinessInfos relatedBusinessInfos = new org.uddi.api_v3.RelatedBusinessInfos();
- if (body.getBusinessKey() != null ) {
- InquiryHelper.getRelatedBusinesses(em, Direction.FROM_KEY, body.getBusinessKey(), body.getKeyedReference(), relatedBusinessInfos, modifiedAfter, modifiedBefore);
- InquiryHelper.getRelatedBusinesses(em, Direction.TO_KEY, body.getBusinessKey(), body.getKeyedReference(), relatedBusinessInfos, modifiedAfter, modifiedBefore);
- }
- else if (body.getFromKey() != null) {
- InquiryHelper.getRelatedBusinesses(em, Direction.FROM_KEY, body.getFromKey(), body.getKeyedReference(), relatedBusinessInfos, modifiedAfter, modifiedBefore);
- result.setBusinessKey(body.getFromKey());
- } else if (body.getToKey() != null) {
- InquiryHelper.getRelatedBusinesses(em, Direction.TO_KEY, body.getToKey(), body.getKeyedReference(), relatedBusinessInfos, modifiedAfter, modifiedBefore);
- result.setBusinessKey(body.getToKey());
- }
- if (relatedBusinessInfos.getRelatedBusinessInfo().size() > 0) {
- // TODO: Do proper pagination!
- listDesc.setActualCount(relatedBusinessInfos.getRelatedBusinessInfo().size());
- listDesc.setIncludeCount(relatedBusinessInfos.getRelatedBusinessInfo().size());
- listDesc.setListHead(1);
-
- result.setRelatedBusinessInfos(relatedBusinessInfos);
- }
-
- return result;
- }
-
- /**
- * Performs the necessary queries for the find_tModel search and adds resulting tModel keys to the tModelBag provided.
- */
- private static void doFindTModelEmbeddedSearch(EntityManager em,
- org.uddi.api_v3.FindQualifiers fq,
- FindTModel findTmodel,
- TModelBag tmodelBag)
- throws DispositionReportFaultMessage {
-
-
- if (findTmodel != null && tmodelBag != null) {
- org.apache.juddi.query.util.FindQualifiers findQualifiers = new org.apache.juddi.query.util.FindQualifiers();
- findQualifiers.mapApiFindQualifiers(findTmodel.getFindQualifiers());
-
-
- List<Object> tmodelKeysFound = null;
- tmodelKeysFound = FindTModelByIdentifierQuery.select(em, findQualifiers, findTmodel.getIdentifierBag(), tmodelKeysFound);
- tmodelKeysFound = FindTModelByCategoryQuery.select(em, findQualifiers, findTmodel.getCategoryBag(), tmodelKeysFound);
- tmodelKeysFound = FindTModelByCategoryGroupQuery.select(em, findQualifiers, findTmodel.getCategoryBag(), tmodelKeysFound);
- tmodelKeysFound = FindTModelByNameQuery.select(em, findQualifiers, findTmodel.getName(), tmodelKeysFound);
-
- if (tmodelKeysFound != null && tmodelKeysFound.size() > 0) {
- for (Object item : tmodelKeysFound)
- tmodelBag.getTModelKey().add((String)item);
- }
- }
- }
-
- private static List<Object> findBindingsByServiceKey(EntityManager em, String serviceKey, List<Object> keysFound) {
- org.apache.juddi.model.BusinessService modelBusinessService=em.find(org.apache.juddi.model.BusinessService.class, serviceKey);
- for (BindingTemplate bt : modelBusinessService.getBindingTemplates()){
- keysFound.add(bt.getEntityKey());
- }
- return keysFound;
- }
-
-
-}
+/*
+ * Copyright 2001-2008 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.juddi.api.impl;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.xml.ws.Holder;
+import org.apache.commons.configuration.ConfigurationException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.juddi.config.AppConfig;
+import org.apache.juddi.config.Property;
+import org.apache.juddi.mapping.MappingModelToApi;
+import org.apache.juddi.model.BindingTemplate;
+import org.apache.juddi.query.FetchBindingTemplatesQuery;
+import org.apache.juddi.query.FetchBusinessEntitiesQuery;
+import org.apache.juddi.query.FetchBusinessServicesQuery;
+import org.apache.juddi.query.FetchTModelsQuery;
+import org.apache.juddi.query.FindBindingByCategoryGroupQuery;
+import org.apache.juddi.query.FindBindingByCategoryQuery;
+import org.apache.juddi.query.FindBindingByTModelKeyQuery;
+import org.apache.juddi.query.FindBusinessByCategoryGroupQuery;
+import org.apache.juddi.query.FindBusinessByCategoryQuery;
+import org.apache.juddi.query.FindBusinessByCombinedCategoryQuery;
+import org.apache.juddi.query.FindBusinessByDiscoveryURLQuery;
+import org.apache.juddi.query.FindBusinessByIdentifierQuery;
+import org.apache.juddi.query.FindBusinessByNameQuery;
+import org.apache.juddi.query.FindBusinessByTModelKeyQuery;
+import org.apache.juddi.query.FindServiceByCategoryGroupQuery;
+import org.apache.juddi.query.FindServiceByCategoryQuery;
+import org.apache.juddi.query.FindServiceByCombinedCategoryQuery;
+import org.apache.juddi.query.FindServiceByNameQuery;
+import org.apache.juddi.query.FindServiceByTModelKeyQuery;
+import org.apache.juddi.query.FindTModelByCategoryGroupQuery;
+import org.apache.juddi.query.FindTModelByCategoryQuery;
+import org.apache.juddi.query.FindTModelByIdentifierQuery;
+import org.apache.juddi.query.FindTModelByNameQuery;
+import org.apache.juddi.query.util.FindQualifiers;
+import org.apache.juddi.v3.error.ErrorMessage;
+import org.apache.juddi.v3.error.InvalidKeyPassedException;
+import org.uddi.api_v3.BindingDetail;
+import org.uddi.api_v3.BusinessList;
+import org.uddi.api_v3.Direction;
+import org.uddi.api_v3.FindBinding;
+import org.uddi.api_v3.FindBusiness;
+import org.uddi.api_v3.FindRelatedBusinesses;
+import org.uddi.api_v3.FindService;
+import org.uddi.api_v3.FindTModel;
+import org.uddi.api_v3.ListDescription;
+import org.uddi.api_v3.Name;
+import org.uddi.api_v3.RelatedBusinessesList;
+import org.uddi.api_v3.ServiceList;
+import org.uddi.api_v3.TModelBag;
+import org.uddi.api_v3.TModelList;
+import org.uddi.v3_service.DispositionReportFaultMessage;
+
+/**Co
+ * Used to factor out inquiry functionality as it is used in more than one spot.
+ *
+ * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
+ */
+public class InquiryHelper {
+
+ private static Log logger = LogFactory.getLog(InquiryHelper.class);
+
+ public static List<Object> findBinding(FindBinding body, FindQualifiers findQualifiers, EntityManager em) throws DispositionReportFaultMessage {
+
+ List<Object> keysFound = new LinkedList<Object>();
+ if (body.getServiceKey()!=null && body.getServiceKey().length() > 0) {
+ keysFound = findBindingsByServiceKey(em, body.getServiceKey(), keysFound);
+ }
+
+ if (body.getTModelBag() == null)
+ body.setTModelBag(new TModelBag());
+ // First perform the embedded FindTModel search which will augment the tModel bag with any resulting tModel keys.
+ doFindTModelEmbeddedSearch(em, body.getFindQualifiers(), body.getFindTModel(), body.getTModelBag());
+ keysFound = FindBindingByTModelKeyQuery.select(em, findQualifiers, body.getTModelBag(), body.getServiceKey(), keysFound);
+ keysFound = FindBindingByCategoryQuery.select(em, findQualifiers, body.getCategoryBag(), body.getServiceKey(), keysFound);
+ keysFound = FindBindingByCategoryGroupQuery.select(em, findQualifiers, body.getCategoryBag(), body.getServiceKey(), keysFound);
+
+ return keysFound;
+ }
+
+ public static BindingDetail getBindingDetailFromKeys(FindBinding body, FindQualifiers findQualifiers, EntityManager em, List<?> keysFound) throws DispositionReportFaultMessage {
+ return getBindingDetailFromKeys(body, findQualifiers, em, keysFound, null, null, null, null);
+ }
+
+ public static BindingDetail getBindingDetailFromKeys(FindBinding body, FindQualifiers findQualifiers, EntityManager em, List<?> keysFound,
+ Date modifiedAfter, Date modifiedBefore, Holder<Integer> subscriptionStartIndex, Integer subscriptionMaxRows)
+ throws DispositionReportFaultMessage {
+
+ BindingDetail result = new BindingDetail();
+ ListDescription listDesc = new ListDescription();
+ result.setListDescription(listDesc);
+
+ // Sort and retrieve the final results with paging taken into account
+ List<?> queryResults = FetchBindingTemplatesQuery.select(em, findQualifiers, keysFound, body.getMaxRows(), body.getListHead(), listDesc);
+
+ // Set the currentIndex to 0 or the value of the subscriptionStartIndex
+ int currentIndex = 0;
+ if (subscriptionStartIndex != null && subscriptionStartIndex.value != null)
+ currentIndex = subscriptionStartIndex.value;
+
+ int returnedRowCount = 0;
+
+ while (currentIndex < queryResults.size()) {
+ Object item = queryResults.get(currentIndex);
+
+ org.apache.juddi.model.BindingTemplate modelBindingTemplate = (org.apache.juddi.model.BindingTemplate)item;
+ org.uddi.api_v3.BindingTemplate apiBindingTemplate = new org.uddi.api_v3.BindingTemplate();
+
+ if (modifiedAfter != null && modifiedAfter.after(modelBindingTemplate.getModifiedIncludingChildren())) {
+ currentIndex++;
+ continue;
+ }
+
+ if (modifiedBefore != null && modifiedBefore.before(modelBindingTemplate.getModifiedIncludingChildren())) {
+ currentIndex++;
+ continue;
+ }
+
+ MappingModelToApi.mapBindingTemplate(modelBindingTemplate, apiBindingTemplate);
+
+ result.getBindingTemplate().add(apiBindingTemplate);
+
+ returnedRowCount++;
+ // If the returned rows equals the max allowed, we can end the loop (applies to subscription calls only)
+ if (subscriptionMaxRows != null) {
+ if (returnedRowCount == subscriptionMaxRows)
+ break;
+ }
+
+ currentIndex++;
+ }
+
+ // If the loop was broken prematurely (max row count hit) we set the subscriptionStartIndex to the next index to start with.
+ // Otherwise, set it to null so the subscription call won't trigger chunk token generation.
+ if (currentIndex < (queryResults.size() - 1)) {
+ if (subscriptionStartIndex != null)
+ subscriptionStartIndex.value = currentIndex + 1;
+ result.setTruncated(Boolean.TRUE);
+ }
+ else {
+ if (subscriptionStartIndex != null)
+ subscriptionStartIndex.value = null;
+ result.setTruncated(Boolean.FALSE);
+ }
+ result.getListDescription().setListHead(currentIndex);
+ result.getListDescription().setActualCount(result.getBindingTemplate().size());
+ result.getListDescription().setIncludeCount(returnedRowCount);
+ return result;
+ }
+
+ public static List<Object> findBusiness(FindBusiness body, FindQualifiers findQualifiers, EntityManager em) throws DispositionReportFaultMessage {
+
+ List<Object> keysFound = null;
+
+ // First perform the embedded FindTModel search which will augment the tModel bag with any resulting tModel keys.
+ if (body.getTModelBag() == null)
+ body.setTModelBag(new TModelBag());
+ doFindTModelEmbeddedSearch(em, body.getFindQualifiers(), body.getFindTModel(), body.getTModelBag());
+
+ // The embedded find_relatedBusinesses search is performed first. This is done the same as the actual API call, except the resulting business keys are
+ // extracted and placed in the keysFound array to restrict future searches to only those keys.
+ if (body.getFindRelatedBusinesses() != null) {
+ FindRelatedBusinesses frb = body.getFindRelatedBusinesses();
+
+ org.uddi.api_v3.RelatedBusinessInfos relatedBusinessInfos = new org.uddi.api_v3.RelatedBusinessInfos();
+ if (body.getFindRelatedBusinesses().getBusinessKey() != null ) {
+ getRelatedBusinesses(em, Direction.FROM_KEY, frb.getBusinessKey(), frb.getKeyedReference(), relatedBusinessInfos);
+ getRelatedBusinesses(em, Direction.TO_KEY, frb.getBusinessKey(), frb.getKeyedReference(), relatedBusinessInfos);
+ }
+ else if (body.getFindRelatedBusinesses().getFromKey() != null)
+ getRelatedBusinesses(em, Direction.FROM_KEY, frb.getFromKey(), frb.getKeyedReference(), relatedBusinessInfos);
+ else if (body.getFindRelatedBusinesses().getToKey() != null)
+ getRelatedBusinesses(em, Direction.TO_KEY, frb.getToKey(), frb.getKeyedReference(), relatedBusinessInfos);
+
+ List<Object> relatedBusinessKeys = new ArrayList<Object>(0);
+ for (org.uddi.api_v3.RelatedBusinessInfo rbi : relatedBusinessInfos.getRelatedBusinessInfo())
+ relatedBusinessKeys.add(rbi.getBusinessKey());
+
+ keysFound = relatedBusinessKeys;
+ }
+
+ keysFound = FindBusinessByTModelKeyQuery.select(em, findQualifiers, body.getTModelBag(), keysFound);
+ keysFound = FindBusinessByIdentifierQuery.select(em, findQualifiers, body.getIdentifierBag(), keysFound);
+ keysFound = FindBusinessByDiscoveryURLQuery.select(em, findQualifiers, body.getDiscoveryURLs(), keysFound);
+ if (findQualifiers.isCombineCategoryBags()) {
+ keysFound = FindBusinessByCombinedCategoryQuery.select(em, findQualifiers, body.getCategoryBag(), keysFound);
+ } else {
+ keysFound = FindBusinessByCategoryQuery.select(em, findQualifiers, body.getCategoryBag(), keysFound);
+ }
+
+ keysFound = FindBusinessByCategoryGroupQuery.select(em, findQualifiers, body.getCategoryBag(), keysFound);
+ keysFound = FindBusinessByNameQuery.select(em, findQualifiers, body.getName(), keysFound);
+
+ // If there no keys in the bag then remove the empty TModelBag
+ if (body.getTModelBag().getTModelKey().size()==0) body.setTModelBag(null);
+
+ return keysFound;
+ }
+
+ public static BusinessList getBusinessListFromKeys(FindBusiness body, FindQualifiers findQualifiers, EntityManager em, List<?> keysFound) throws DispositionReportFaultMessage {
+ return getBusinessListFromKeys(body, findQualifiers, em, keysFound, null, null, null, null);
+ }
+
+ public static BusinessList getBusinessListFromKeys(FindBusiness body, FindQualifiers findQualifiers, EntityManager em, List<?> keysFound,
+ Date modifiedAfter, Date modifiedBefore, Holder<Integer> subscriptionStartIndex, Integer subscriptionMaxRows)
+ throws DispositionReportFaultMessage {
+
+ BusinessList result = new BusinessList();
+ ListDescription listDesc = new ListDescription();
+ result.setListDescription(listDesc);
+
+ // Sort and retrieve the final results taking paging into account
+ List<?> queryResults = FetchBusinessEntitiesQuery.select(em, findQualifiers, keysFound, body.getMaxRows(), body.getListHead(), listDesc);
+
+ boolean enabled = true;
+ try {
+ //AppConfig.reloadConfig();
+ enabled= AppConfig.getConfiguration().getBoolean(Property.JUDDI_ENABLE_FIND_BUSINESS_TMODEL_BAG_FILTERING, true);
+ } catch (ConfigurationException ex) {
+ logger.error(ex);
+ }
+ if (enabled) {
+ logger.info("FindBusiness by tModelBag is enabled! Loaded from " + AppConfig.getConfigFileURL());
+ List<?> serviceResults = null;
+ for (int i = 0; i < queryResults.size(); i++) {
+ org.apache.juddi.model.BusinessEntity be = (org.apache.juddi.model.BusinessEntity) queryResults.get(i);
+
+ List<Object> keysIn = new ArrayList<Object>();
+ List<org.apache.juddi.model.BusinessService> services = be.getBusinessServices();
+ for (int j = 0; j < services.size(); j++) {
+ keysIn.add(services.get(j).getEntityKey());
+ }
+
+ serviceResults = FindServiceByTModelKeyQuery.select(em, findQualifiers, body.getTModelBag(), null, keysIn);
+ if (serviceResults == null) {
+ be.setBusinessServices(null);
+ } else {
+ ListDescription ldesc = new ListDescription();
+ result.setListDescription(listDesc);
+ List<?> srvcs = FetchBusinessServicesQuery.select(em, findQualifiers, serviceResults, body.getMaxRows(),
+ body.getListHead(), ldesc);
+ be.setBusinessServices((List<org.apache.juddi.model.BusinessService>) srvcs);
+ }
+ }
+ }
+
+
+ if (queryResults != null && queryResults.size() > 0)
+ result.setBusinessInfos(new org.uddi.api_v3.BusinessInfos());
+
+ // Set the currentIndex to 0 or the value of the subscriptionStartIndex
+ int currentIndex = 0;
+ if (subscriptionStartIndex != null && subscriptionStartIndex.value != null)
+ currentIndex = subscriptionStartIndex.value;
+
+ int returnedRowCount = 0;
+
+ while (queryResults!=null && currentIndex < queryResults.size()) {
+ Object item = queryResults.get(currentIndex);
+
+ org.apache.juddi.model.BusinessEntity modelBusinessEntity = (org.apache.juddi.model.BusinessEntity)item;
+ org.uddi.api_v3.BusinessInfo apiBusinessInfo = new org.uddi.api_v3.BusinessInfo();
+
+ if (modifiedAfter != null && modifiedAfter.after(modelBusinessEntity.getModifiedIncludingChildren())){
+ currentIndex++;
+ continue;
+ }
+
+ if (modifiedBefore != null && modifiedBefore.before(modelBusinessEntity.getModifiedIncludingChildren())) {
+ currentIndex++;
+ continue;
+ }
+
+ MappingModelToApi.mapBusinessInfo(modelBusinessEntity, apiBusinessInfo);
+
+ result.getBusinessInfos().getBusinessInfo().add(apiBusinessInfo);
+
+ returnedRowCount++;
+ // If the returned rows equals the max allowed, we can end the loop (applies to subscription calls only)
+ if (subscriptionMaxRows != null) {
+ if (returnedRowCount == subscriptionMaxRows)
+ break;
+ }
+
+ currentIndex++;
+ }
+
+ // If the loop was broken prematurely (max row count hit) we set the subscriptionStartIndex to the next index to start with.
+ // Otherwise, set it to null so the subscription call won't trigger chunk token generation.
+ if (queryResults!=null && currentIndex < (queryResults.size() - 1)) {
+ if (subscriptionStartIndex != null)
+ subscriptionStartIndex.value = currentIndex + 1;
+ result.setTruncated(Boolean.TRUE);
+ }
+ else {
+ if (subscriptionStartIndex != null)
+ subscriptionStartIndex.value = null;
+ result.setTruncated(Boolean.FALSE);
+ }
+ return result;
+ }
+
+ public static List<?> findService(FindService body, FindQualifiers findQualifiers, EntityManager em) throws DispositionReportFaultMessage {
+
+ List<Object> keysFound = null;
+
+ // First perform the embedded FindTModel search which will augment the tModel bag with any resulting tModel keys.
+ if (body.getTModelBag() == null)
+ body.setTModelBag(new TModelBag());
+ doFindTModelEmbeddedSearch(em, body.getFindQualifiers(), body.getFindTModel(), body.getTModelBag());
+
+ keysFound = FindServiceByTModelKeyQuery.select(em, findQualifiers, body.getTModelBag(), body.getBusinessKey(), keysFound);
+ if (findQualifiers.isCombineCategoryBags()) {
+ keysFound = FindServiceByCombinedCategoryQuery.select(em, findQualifiers, body.getCategoryBag(), body.getBusinessKey(), keysFound);
+ } else {
+ keysFound = FindServiceByCategoryQuery.select(em, findQualifiers, body.getCategoryBag(), body.getBusinessKey(), keysFound);
+ }
+ keysFound = FindServiceByCategoryGroupQuery.select(em, findQualifiers, body.getCategoryBag(), body.getBusinessKey(), keysFound);
+
+ if (body.getFindTModel()==null && body.getCategoryBag()==null &&
+ ( body.getTModelBag()==null || body.getTModelBag().getTModelKey().size() == 0)
+ && body.getName().size() == 0 && body.getBusinessKey() != null) {
+ //support searching for all services for a business
+ findQualifiers.setApproximateMatch(true);
+ body.getName().add(new Name("%", null));
+ }
+ keysFound = FindServiceByNameQuery.select(em, findQualifiers, body.getName(), body.getBusinessKey(), keysFound);
+
+ if (body.getTModelBag().getTModelKey().size()==0) body.setTModelBag(null);
+ return keysFound;
+ }
+
+ public static ServiceList getServiceListFromKeys(FindService body, FindQualifiers findQualifiers, EntityManager em, List<?> keysFound) throws DispositionReportFaultMessage {
+ return getServiceListFromKeys(body, findQualifiers, em, keysFound, null, null, null, null);
+ }
+
+ public static ServiceList getServiceListFromKeys(FindService body, FindQualifiers findQualifiers, EntityManager em, List<?> keysFound,
+ Date modifiedAfter, Date modifiedBefore, Holder<Integer> subscriptionStartIndex, Integer subscriptionMaxRows)
+ throws DispositionReportFaultMessage {
+ ServiceList result = new ServiceList();
+ ListDescription listDesc = new ListDescription();
+ result.setListDescription(listDesc);
+
+ // Sort and retrieve the final results taking paging into account
+ List<?> queryResults = FetchBusinessServicesQuery.select(em, findQualifiers, keysFound, body.getMaxRows(), body.getListHead(), listDesc);
+ if (queryResults != null && queryResults.size() > 0)
+ result.setServiceInfos(new org.uddi.api_v3.ServiceInfos());
+
+ // Set the currentIndex to 0 or the value of the subscriptionStartIndex
+ int currentIndex = 0;
+ if (subscriptionStartIndex != null && subscriptionStartIndex.value != null)
+ currentIndex = subscriptionStartIndex.value;
+
+ int returnedRowCount = 0;
+ if (logger.isDebugEnabled()) logger.debug("Period = " + modifiedAfter + " ---- " + modifiedBefore);
+ while (queryResults!=null && currentIndex < queryResults.size()) {
+ Object item = queryResults.get(currentIndex);
+
+ org.apache.juddi.model.BusinessService modelBusinessService = (org.apache.juddi.model.BusinessService)item;
+ org.uddi.api_v3.ServiceInfo apiServiceInfo = new org.uddi.api_v3.ServiceInfo();
+
+ logger.debug(modelBusinessService.getEntityKey() + " is modified " + modelBusinessService.getModifiedIncludingChildren() + " " + modelBusinessService.getModifiedIncludingChildren().getTime() );
+ if (modifiedAfter != null && modifiedAfter.after(modelBusinessService.getModifiedIncludingChildren())) {
+ currentIndex++;
+ continue;
+ }
+
+ if (modifiedBefore != null && modifiedBefore.before(modelBusinessService.getModifiedIncludingChildren())) {
+ currentIndex++;
+ continue;
+ }
+ MappingModelToApi.mapServiceInfo(modelBusinessService, apiServiceInfo);
+
+ result.getServiceInfos().getServiceInfo().add(apiServiceInfo);
+
+ returnedRowCount++;
+ // If the returned rows equals the max allowed, we can end the loop (applies to subscription calls only)
+ if (subscriptionMaxRows != null) {
+ if (returnedRowCount == subscriptionMaxRows)
+ break;
+ }
+
+ currentIndex++;
+ }
+
+ // If the loop was broken prematurely (max row count hit) we set the subscriptionStartIndex to the next index to start with.
+ // Otherwise, set it to null so the subscription call won't trigger chunk token generation.
+ if (queryResults!=null && currentIndex < (queryResults.size() - 1)) {
+ if (subscriptionStartIndex != null)
+ subscriptionStartIndex.value = currentIndex + 1;
+ result.setTruncated(Boolean.TRUE);
+ }
+ else {
+ if (subscriptionStartIndex != null)
+ subscriptionStartIndex.value = null;
+ result.setTruncated(Boolean.FALSE);
+ }
+
+ return result;
+ }
+
+ public static List<Object> findTModel(FindTModel body, FindQualifiers findQualifiers, EntityManager em) throws DispositionReportFaultMessage {
+ List<Object> keysFound = null;
+
+ keysFound = FindTModelByIdentifierQuery.select(em, findQualifiers, body.getIdentifierBag(), keysFound);
+ keysFound = FindTModelByCategoryQuery.select(em, findQualifiers, body.getCategoryBag(), keysFound);
+ keysFound = FindTModelByCategoryGroupQuery.select(em, findQualifiers, body.getCategoryBag(), keysFound);
+ keysFound = FindTModelByNameQuery.select(em, findQualifiers, body.getName(), keysFound);
+
+ return keysFound;
+ }
+
+ public static TModelList getTModelListFromKeys(FindTModel body, FindQualifiers findQualifiers, EntityManager em, List<?> keysFound) throws DispositionReportFaultMessage {
+ return getTModelListFromKeys(body, findQualifiers, em, keysFound, null, null, null, null);
+ }
+
+ public static TModelList getTModelListFromKeys(FindTModel body, FindQualifiers findQualifiers, EntityManager em, List<?> keysFound,
+ Date modifiedAfter, Date modifiedBefore, Holder<Integer> subscriptionStartIndex, Integer subscriptionMaxRows)
+ throws DispositionReportFaultMessage {
+ TModelList result = new TModelList();
+ ListDescription listDesc = new ListDescription();
+ result.setListDescription(listDesc);
+
+ // Sort and retrieve the final results taking paging into account
+ List<?> queryResults = FetchTModelsQuery.select(em, findQualifiers, keysFound, body.getMaxRows(), body.getListHead(), listDesc);
+ if (queryResults != null && queryResults.size() > 0)
+ result.setTModelInfos(new org.uddi.api_v3.TModelInfos());
+
+ // Set the currentIndex to 0 or the value of the subscriptionStartIndex
+ int currentIndex = 0;
+ if (subscriptionStartIndex != null && subscriptionStartIndex.value != null)
+ currentIndex = subscriptionStartIndex.value;
+
+ int returnedRowCount = 0;
+
+ while (queryResults!=null && currentIndex < queryResults.size()) {
+ Object item = queryResults.get(currentIndex);
+
+ org.apache.juddi.model.Tmodel modelTModel = (org.apache.juddi.model.Tmodel)item;
+ org.uddi.api_v3.TModelInfo apiTModelInfo = new org.uddi.api_v3.TModelInfo();
+
+ if (modifiedAfter != null && modifiedAfter.after(modelTModel.getModifiedIncludingChildren())) {
+ currentIndex++;
+ continue;
+ }
+
+ if (modifiedBefore != null && modifiedBefore.before(modelTModel.getModifiedIncludingChildren())) {
+ currentIndex++;
+ continue;
+ }
+
+ MappingModelToApi.mapTModelInfo(modelTModel, apiTModelInfo);
+
+ result.getTModelInfos().getTModelInfo().add(apiTModelInfo);
+
+ returnedRowCount++;
+ // If the returned rows equals the max allowed, we can end the loop (applies to subscription calls only)
+ if (subscriptionMaxRows != null) {
+ if (returnedRowCount == subscriptionMaxRows)
+ break;
+ }
+
+ currentIndex++;
+ }
+
+ // If the loop was broken prematurely (max row count hit) we set the subscriptionStartIndex to the next index to start with.
+ // Otherwise, set it to null so the subscription call won't trigger chunk token generation.
+ if (queryResults!=null && currentIndex < (queryResults.size() - 1)) {
+ if (subscriptionStartIndex != null)
+ subscriptionStartIndex.value = currentIndex + 1;
+ result.setTruncated(Boolean.TRUE);
+ }
+ else {
+ if (subscriptionStartIndex != null)
+ subscriptionStartIndex.value = null;
+ result.setTruncated(Boolean.FALSE);
+ }
+
+ return result;
+ }
+
+
+ /*
+ * Retrieves related businesses based on the focal business and the direction (fromKey or toKey). The focal business is retrieved and then the
+ * appropriate publisher assertion collection is examined for matches. The assertion must be "completed" and if a keyedReference is passed, it must
+ * match exactly. Successful assertion matches are mapped to a RelationBusinessInfo structure and added to the passed in RelationalBusinessInfos
+ * structure.
+ */
+ public static void getRelatedBusinesses(EntityManager em,
+ Direction direction,
+ String focalKey,
+ org.uddi.api_v3.KeyedReference keyedRef,
+ org.uddi.api_v3.RelatedBusinessInfos relatedBusinessInfos)
+ throws DispositionReportFaultMessage {
+ getRelatedBusinesses(em, direction, focalKey, keyedRef, relatedBusinessInfos, null, null);
+ }
+
+ public static void getRelatedBusinesses(EntityManager em,
+ Direction direction,
+ String focalKey,
+ org.uddi.api_v3.KeyedReference keyedRef,
+ org.uddi.api_v3.RelatedBusinessInfos relatedBusinessInfos,
+ Date modifiedAfter,
+ Date modifiedBefore)
+ throws DispositionReportFaultMessage {
+ if (relatedBusinessInfos == null)
+ relatedBusinessInfos = new org.uddi.api_v3.RelatedBusinessInfos();
+ org.apache.juddi.model.BusinessEntity focalBusiness = null;
+ try {
+ focalBusiness = em.find(org.apache.juddi.model.BusinessEntity.class, focalKey);
+ } catch (ClassCastException e) {}
+ if (focalBusiness == null)
+ throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.BusinessNotFound", focalKey));
+
+ List<org.apache.juddi.model.PublisherAssertion> pubAssertList = null;
+ if (direction == Direction.FROM_KEY)
+ pubAssertList = focalBusiness.getPublisherAssertionsForFromKey();
+ else
+ pubAssertList = focalBusiness.getPublisherAssertionsForToKey();
+
+ if (pubAssertList != null) {
+ for (org.apache.juddi.model.PublisherAssertion modelPublisherAssertion : pubAssertList) {
+ if ("true".equalsIgnoreCase(modelPublisherAssertion.getFromCheck()) && "true".equalsIgnoreCase(modelPublisherAssertion.getToCheck())) {
+ if (keyedRef != null) {
+ if(!keyedRef.getTModelKey().equals(modelPublisherAssertion.getTmodelKey()) ||
+ !keyedRef.getKeyName().equals(modelPublisherAssertion.getKeyName()) ||
+ !keyedRef.getKeyValue().equals(modelPublisherAssertion.getKeyValue())) {
+ continue;
+ }
+ }
+
+ org.apache.juddi.model.BusinessEntity modelRelatedBusiness = null;
+ if (direction == Direction.FROM_KEY)
+ modelRelatedBusiness = em.find(org.apache.juddi.model.BusinessEntity.class, modelPublisherAssertion.getId().getToKey());
+ else
+ modelRelatedBusiness = em.find(org.apache.juddi.model.BusinessEntity.class, modelPublisherAssertion.getId().getFromKey());
+
+ if (modifiedAfter != null && modifiedAfter.after(modelRelatedBusiness.getModifiedIncludingChildren()))
+ continue;
+
+ if (modifiedBefore != null && modifiedBefore.before(modelRelatedBusiness.getModifiedIncludingChildren()))
+ continue;
+
+ org.uddi.api_v3.RelatedBusinessInfo apiRelatedBusinessInfo = new org.uddi.api_v3.RelatedBusinessInfo();
+
+ MappingModelToApi.mapRelatedBusinessInfo(modelPublisherAssertion, modelRelatedBusiness, direction, apiRelatedBusinessInfo);
+
+ relatedBusinessInfos.getRelatedBusinessInfo().add(apiRelatedBusinessInfo);
+ }
+ }
+ }
+
+ }
+
+ public static RelatedBusinessesList getRelatedBusinessesList(FindRelatedBusinesses body, EntityManager em) throws DispositionReportFaultMessage {
+ return getRelatedBusinessesList(body, em, null, null);
+ }
+
+ public static RelatedBusinessesList getRelatedBusinessesList(FindRelatedBusinesses body, EntityManager em, Date modifiedAfter, Date modifiedBefore) throws DispositionReportFaultMessage {
+ RelatedBusinessesList result = new RelatedBusinessesList();
+ result.setBusinessKey(body.getBusinessKey());
+ ListDescription listDesc = new ListDescription();
+ result.setListDescription(listDesc);
+
+ // Either one of the businessKey, fromKey or toKey will be passed. This is considered the "focal" business to which related businesses must be
+ // found. Rather than use a query, it seems simpler to take advantage of the model's publisher assertion collections.
+ org.uddi.api_v3.RelatedBusinessInfos relatedBusinessInfos = new org.uddi.api_v3.RelatedBusinessInfos();
+ if (body.getBusinessKey() != null ) {
+ InquiryHelper.getRelatedBusinesses(em, Direction.FROM_KEY, body.getBusinessKey(), body.getKeyedReference(), relatedBusinessInfos, modifiedAfter, modifiedBefore);
+ InquiryHelper.getRelatedBusinesses(em, Direction.TO_KEY, body.getBusinessKey(), body.getKeyedReference(), relatedBusinessInfos, modifiedAfter, modifiedBefore);
+ }
+ else if (body.getFromKey() != null) {
+ InquiryHelper.getRelatedBusinesses(em, Direction.FROM_KEY, body.getFromKey(), body.getKeyedReference(), relatedBusinessInfos, modifiedAfter, modifiedBefore);
+ result.setBusinessKey(body.getFromKey());
+ } else if (body.getToKey() != null) {
+ InquiryHelper.getRelatedBusinesses(em, Direction.TO_KEY, body.getToKey(), body.getKeyedReference(), relatedBusinessInfos, modifiedAfter, modifiedBefore);
+ result.setBusinessKey(body.getToKey());
+ }
+ if (relatedBusinessInfos.getRelatedBusinessInfo().size() > 0) {
+ // TODO: Do proper pagination!
+ listDesc.setActualCount(relatedBusinessInfos.getRelatedBusinessInfo().size());
+ listDesc.setIncludeCount(relatedBusinessInfos.getRelatedBusinessInfo().size());
+ listDesc.setListHead(1);
+
+ result.setRelatedBusinessInfos(relatedBusinessInfos);
+ }
+
+ return result;
+ }
+
+ /**
+ * Performs the necessary queries for the find_tModel search and adds resulting tModel keys to the tModelBag provided.
+ */
+ private static void doFindTModelEmbeddedSearch(EntityManager em,
+ org.uddi.api_v3.FindQualifiers fq,
+ FindTModel findTmodel,
+ TModelBag tmodelBag)
+ throws DispositionReportFaultMessage {
+
+
+ if (findTmodel != null && tmodelBag != null) {
+ org.apache.juddi.query.util.FindQualifiers findQualifiers = new org.apache.juddi.query.util.FindQualifiers();
+ findQualifiers.mapApiFindQualifiers(findTmodel.getFindQualifiers());
+
+
+ List<Object> tmodelKeysFound = null;
+ tmodelKeysFound = FindTModelByIdentifierQuery.select(em, findQualifiers, findTmodel.getIdentifierBag(), tmodelKeysFound);
+ tmodelKeysFound = FindTModelByCategoryQuery.select(em, findQualifiers, findTmodel.getCategoryBag(), tmodelKeysFound);
+ tmodelKeysFound = FindTModelByCategoryGroupQuery.select(em, findQualifiers, findTmodel.getCategoryBag(), tmodelKeysFound);
+ tmodelKeysFound = FindTModelByNameQuery.select(em, findQualifiers, findTmodel.getName(), tmodelKeysFound);
+
+ if (tmodelKeysFound != null && tmodelKeysFound.size() > 0) {
+ for (Object item : tmodelKeysFound)
+ tmodelBag.getTModelKey().add((String)item);
+ }
+ }
+ }
+
+ private static List<Object> findBindingsByServiceKey(EntityManager em, String serviceKey, List<Object> keysFound) {
+ org.apache.juddi.model.BusinessService modelBusinessService=em.find(org.apache.juddi.model.BusinessService.class, serviceKey);
+ for (BindingTemplate bt : modelBusinessService.getBindingTemplates()){
+ keysFound.add(bt.getEntityKey());
+ }
+ return keysFound;
+ }
+
+
+}
diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/JUDDIApiImpl.java b/juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/JUDDIApiImpl.java
similarity index 98%
rename from juddi-core/src/main/java/org/apache/juddi/api/impl/JUDDIApiImpl.java
rename to juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/JUDDIApiImpl.java
index 4477e2d4c..740443a2c 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/JUDDIApiImpl.java
+++ b/juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/JUDDIApiImpl.java
@@ -1,1683 +1,1683 @@
-/*
- * Copyright 2001-2008 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.juddi.api.impl;
-
-import java.io.StringWriter;
-import java.math.BigInteger;
-import java.rmi.RemoteException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.jws.WebService;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityTransaction;
-import javax.persistence.Query;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.Marshaller;
-import javax.xml.ws.Holder;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.juddi.ClassUtil;
-import static org.apache.juddi.api.impl.JUDDIApiImpl.sub;
-import org.apache.juddi.api.util.JUDDIQuery;
-import org.apache.juddi.api.util.QueryStatus;
-import org.apache.juddi.api_v3.AdminSaveBusinessWrapper;
-import org.apache.juddi.api_v3.AdminSaveTModelWrapper;
-import org.apache.juddi.api_v3.Clerk;
-import org.apache.juddi.api_v3.ClerkDetail;
-import org.apache.juddi.api_v3.ClerkList;
-import org.apache.juddi.api_v3.ClientSubscriptionInfoDetail;
-import org.apache.juddi.api_v3.DeleteClerk;
-import org.apache.juddi.api_v3.DeleteClientSubscriptionInfo;
-import org.apache.juddi.api_v3.DeleteNode;
-import org.apache.juddi.api_v3.DeletePublisher;
-import org.apache.juddi.api_v3.GetAllClientSubscriptionInfoDetail;
-import org.apache.juddi.api_v3.GetAllPublisherDetail;
-import org.apache.juddi.api_v3.GetClientSubscriptionInfoDetail;
-import org.apache.juddi.api_v3.GetEntityHistoryMessageRequest;
-import org.apache.juddi.api_v3.GetEntityHistoryMessageResponse;
-import org.apache.juddi.api_v3.GetFailedReplicationChangeRecordsMessageRequest;
-import org.apache.juddi.api_v3.GetFailedReplicationChangeRecordsMessageResponse;
-import org.apache.juddi.api_v3.GetPublisherDetail;
-import org.apache.juddi.api_v3.NodeDetail;
-import org.apache.juddi.api_v3.NodeList;
-import org.apache.juddi.api_v3.PublisherDetail;
-import org.apache.juddi.api_v3.SaveClerk;
-import org.apache.juddi.api_v3.SaveClientSubscriptionInfo;
-import org.apache.juddi.api_v3.SaveNode;
-import org.apache.juddi.api_v3.SavePublisher;
-import org.apache.juddi.api_v3.SubscriptionWrapper;
-import org.apache.juddi.api_v3.SyncSubscription;
-import org.apache.juddi.api_v3.SyncSubscriptionDetail;
-import org.apache.juddi.config.AppConfig;
-import org.apache.juddi.config.PersistenceManager;
-import org.apache.juddi.config.Property;
-import org.apache.juddi.mapping.MappingApiToModel;
-import org.apache.juddi.mapping.MappingModelToApi;
-import org.apache.juddi.model.BusinessEntity;
-import org.apache.juddi.model.ChangeRecord;
-import org.apache.juddi.model.ClientSubscriptionInfo;
-import org.apache.juddi.model.Node;
-import org.apache.juddi.model.Publisher;
-import org.apache.juddi.model.ReplicationConfiguration;
-import org.apache.juddi.model.Tmodel;
-import org.apache.juddi.model.UddiEntityPublisher;
-import org.apache.juddi.replication.ReplicationNotifier;
-import org.apache.juddi.subscription.NotificationList;
-import org.apache.juddi.subscription.notify.TemporaryMailContainer;
-import org.apache.juddi.subscription.notify.USERFRIENDLYSMTPNotifier;
-import org.apache.juddi.v3.client.transport.Transport;
-import org.apache.juddi.v3.error.ErrorMessage;
-import org.apache.juddi.v3.error.FatalErrorException;
-import org.apache.juddi.v3.error.InvalidKeyPassedException;
-import org.apache.juddi.v3.error.InvalidValueException;
-import org.apache.juddi.v3.error.UserMismatchException;
-import org.apache.juddi.v3_service.JUDDIApiPortType;
-import org.apache.juddi.validation.ValidateClerk;
-import org.apache.juddi.validation.ValidateClientSubscriptionInfo;
-import org.apache.juddi.validation.ValidateNode;
-import org.apache.juddi.validation.ValidatePublish;
-import org.apache.juddi.validation.ValidatePublisher;
-import org.apache.juddi.validation.ValidateReplication;
-import org.uddi.api_v3.AuthToken;
-import org.uddi.api_v3.BusinessInfo;
-import org.uddi.api_v3.BusinessInfos;
-import org.uddi.api_v3.Contact;
-import org.uddi.api_v3.DeleteTModel;
-import org.uddi.api_v3.DispositionReport;
-import org.uddi.api_v3.GetRegisteredInfo;
-import org.uddi.api_v3.InfoSelection;
-import org.uddi.api_v3.PersonName;
-import org.uddi.api_v3.RegisteredInfo;
-import org.uddi.api_v3.Result;
-import org.uddi.api_v3.SaveBusiness;
-import org.uddi.api_v3.SaveTModel;
-import org.uddi.api_v3.TModelInfo;
-import org.uddi.api_v3.TModelInfos;
-import org.uddi.repl_v3.ChangeRecords;
-import org.uddi.repl_v3.CommunicationGraph;
-import org.uddi.repl_v3.Operator;
-import org.uddi.repl_v3.OperatorStatusType;
-import org.uddi.sub_v3.GetSubscriptionResults;
-import org.uddi.sub_v3.Subscription;
-import org.uddi.sub_v3.SubscriptionResultsList;
-import org.uddi.v3_service.DispositionReportFaultMessage;
-import org.uddi.v3_service.UDDISubscriptionPortType;
-
-/**
- * Implements the jUDDI API service. These methods are outside of the UDDI spec
- * and are specific to jUDDI. They are primarily used for administrative
- * functions.
- *
- * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
- * @author <a href="mailto:kstam@apache.org">Kurt T Stam</a>
- * @author <a href="mailto:alexoree@apache.org">Alex O'Ree</a>
- */
-@WebService(serviceName = "JUDDIApiService",
- endpointInterface = "org.apache.juddi.v3_service.JUDDIApiPortType",
- targetNamespace = "urn:juddi-apache-org:v3_service"
- //, wsdlLocation = "classpath:/juddi_api_v1.wsdl"
-)
-public class JUDDIApiImpl extends AuthenticatedService implements JUDDIApiPortType {
-
- private Log log = LogFactory.getLog(this.getClass());
- private UDDIServiceCounter serviceCounter = ServiceCounterLifecycleResource.getServiceCounter(this.getClass());
-
- /**
- * Saves publisher(s) to the persistence layer. This method is specific
- * to jUDDI. Administrative privilege required.
- *
- * @param body
- * @return PublisherDetail
- * @throws DispositionReportFaultMessage
- */
- public PublisherDetail savePublisher(SavePublisher body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
-
- new ValidatePublish(publisher).validateSavePublisher(em, body);
-
- PublisherDetail result = new PublisherDetail();
-
- List<org.apache.juddi.api_v3.Publisher> apiPublisherList = body.getPublisher();
- for (org.apache.juddi.api_v3.Publisher apiPublisher : apiPublisherList) {
-
- org.apache.juddi.model.Publisher modelPublisher = new org.apache.juddi.model.Publisher();
-
- MappingApiToModel.mapPublisher(apiPublisher, modelPublisher);
-
- Object existingUddiEntity = em.find(modelPublisher.getClass(), modelPublisher.getAuthorizedName());
- if (existingUddiEntity != null) {
- em.remove(existingUddiEntity);
- }
-
- em.persist(modelPublisher);
-
- result.getPublisher().add(apiPublisher);
- }
-
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.SAVE_PUBLISHER,
- QueryStatus.SUCCESS, procTime);
- return result;
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.SAVE_PUBLISHER,
- QueryStatus.FAILED, procTime);
- throw drfm;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- /**
- * Deletes publisher(s) from the persistence layer. This method is
- * specific to jUDDI. Administrative privilege required. Also removes
- * all registered business entities of the user and marks all created
- * tModels as "deleted" but not does not remove the tModel from
- * persistence. All subscriptions are also destroyed
- *
- * @param body
- * @throws DispositionReportFaultMessage
- */
- @Override
- public void deletePublisher(DeletePublisher body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
-
- new ValidatePublish(publisher).validateDeletePublisher(em, body);
-
- List<String> entityKeyList = body.getPublisherId();
- List<Publisher> deletedPubs = new ArrayList<Publisher>();
- for (String entityKey : entityKeyList) {
- Publisher obj = em.find(org.apache.juddi.model.Publisher.class, entityKey);
- deletedPubs.add(obj);
- //get an authtoken for this publisher so that we can get its registeredInfo
- UDDISecurityImpl security = new UDDISecurityImpl();
- AuthToken authToken = security.getAuthToken(entityKey);
-
- GetRegisteredInfo r = new GetRegisteredInfo();
- r.setAuthInfo(authToken.getAuthInfo());
- r.setInfoSelection(InfoSelection.ALL);
-
- log.info("removing all businesses owned by publisher " + entityKey + ".");
- UDDIPublicationImpl publish = new UDDIPublicationImpl();
- RegisteredInfo registeredInfo = publish.getRegisteredInfo(r);
- BusinessInfos businessInfos = registeredInfo.getBusinessInfos();
- if (businessInfos != null && businessInfos.getBusinessInfo() != null) {
- Iterator<BusinessInfo> iter = businessInfos.getBusinessInfo().iterator();
- while (iter.hasNext()) {
- BusinessInfo businessInfo = iter.next();
- Object business = em.find(org.apache.juddi.model.BusinessEntity.class, businessInfo.getBusinessKey());
- em.remove(business);
- }
- }
-
- log.info("mark all tmodels for publisher " + entityKey + " as deleted.");
- TModelInfos tmodelInfos = registeredInfo.getTModelInfos();
- if (tmodelInfos != null && tmodelInfos.getTModelInfo() != null) {
- Iterator<TModelInfo> iter = tmodelInfos.getTModelInfo().iterator();
- while (iter.hasNext()) {
- TModelInfo tModelInfo = iter.next();
- Tmodel tmodel = (Tmodel) em.find(org.apache.juddi.model.Tmodel.class, tModelInfo.getTModelKey());
- tmodel.setDeleted(true);
- em.persist(tmodel);
- }
- }
- log.info("remove all persisted AuthTokens for publisher " + entityKey + ".");
- Query q1 = em.createQuery("DELETE FROM AuthToken auth WHERE auth.authorizedName = ?1");
- q1.setParameter(1, entityKey);
- q1.executeUpdate();
- log.info("remove all subscriptions for publisher " + entityKey + ".");
- q1 = em.createQuery("DELETE FROM Subscription s WHERE s.authorizedName = ?1");
- q1.setParameter(1, entityKey);
- q1.executeUpdate();
-
- log.info("removing publisher " + entityKey + ".");
- //delete the publisher
- em.remove(obj);
- }
-
- tx.commit();
- for (Publisher p: deletedPubs){
- USERFRIENDLYSMTPNotifier.notifyAccountDeleted(new TemporaryMailContainer(null, p, (Publisher) publisher));
- }
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.DELETE_PUBLISHER,
- QueryStatus.SUCCESS, procTime);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.DELETE_PUBLISHER,
- QueryStatus.FAILED, procTime);
- throw drfm;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- /**
- * Retrieves publisher(s) from the persistence layer. This method is
- * specific to jUDDI. Administrative privilege required.
- *
- * @param body
- * @return PublisherDetail
- * @throws DispositionReportFaultMessage
- */
- public PublisherDetail getPublisherDetail(GetPublisherDetail body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
- new ValidatePublisher(null).validateGetPublisherDetail(body);
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- this.getEntityPublisher(em, body.getAuthInfo());
-
- PublisherDetail result = new PublisherDetail();
-
- List<String> publisherIdList = body.getPublisherId();
- for (String publisherId : publisherIdList) {
- org.apache.juddi.model.Publisher modelPublisher = null;
- try {
- modelPublisher = em.find(org.apache.juddi.model.Publisher.class, publisherId);
- } catch (ClassCastException e) {
- }
- if (modelPublisher == null) {
- throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.PublisherNotFound", publisherId));
- }
-
- org.apache.juddi.api_v3.Publisher apiPublisher = new org.apache.juddi.api_v3.Publisher();
-
- MappingModelToApi.mapPublisher(modelPublisher, apiPublisher);
-
- result.getPublisher().add(apiPublisher);
- }
-
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.GET_PUBLISHER_DETAIL,
- QueryStatus.SUCCESS, procTime);
- return result;
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.GET_PUBLISHER_DETAIL,
- QueryStatus.FAILED, procTime);
- throw drfm;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
-
- }
-
- /**
- * Retrieves all publisher from the persistence layer. This method is
- * specific to jUDDI. Administrative privilege required. Use caution
- * when calling, result set is not bound. If there are many publishers,
- * it is possible to have a result set that is too large
- *
- * @param body
- * @return PublisherDetail
- * @throws DispositionReportFaultMessage
- * @throws RemoteException
- */
- @SuppressWarnings("unchecked")
- public PublisherDetail getAllPublisherDetail(GetAllPublisherDetail body)
- throws DispositionReportFaultMessage, RemoteException {
- long startTime = System.currentTimeMillis();
- new ValidatePublisher(null).validateGetAllPublisherDetail(body);
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- this.getEntityPublisher(em, body.getAuthInfo());
-
- PublisherDetail result = new PublisherDetail();
-
- Query query = em.createQuery("SELECT p from Publisher as p");
- List<Publisher> modelPublisherList = query.getResultList();
-
- for (Publisher modelPublisher : modelPublisherList) {
-
- org.apache.juddi.api_v3.Publisher apiPublisher = new org.apache.juddi.api_v3.Publisher();
-
- MappingModelToApi.mapPublisher(modelPublisher, apiPublisher);
-
- result.getPublisher().add(apiPublisher);
- }
-
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.GET_ALL_PUBLISHER_DETAIL,
- QueryStatus.SUCCESS, procTime);
- return result;
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.GET_ALL_PUBLISHER_DETAIL,
- QueryStatus.FAILED, procTime);
- throw drfm;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- /**
- * Completely deletes a tModel from the persistence layer.
- * Administrative privilege required. All entities that reference this
- * tModel will no longer be able to use the tModel if jUDDI Option
- * Enforce referential Integrity is enabled.<br>
- * Required permission, you must be am administrator
- * {@link Property#JUDDI_ENFORCE_REFERENTIAL_INTEGRITY}. In addition,
- * tModels that are owned by another node via replication cannot be
- * deleted using this method and will throw an exception
- *
- *
- * @param body
- * @throws DispositionReportFaultMessage
- */
- @Override
- public void adminDeleteTModel(DeleteTModel body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
-
- new ValidatePublish(publisher).validateAdminDeleteTModel(em, body);
-
- //TODO if referiental integrity is turned on, check to see if this is referenced anywhere and prevent the delete
- List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
- List<String> entityKeyList = body.getTModelKey();
- for (String entityKey : entityKeyList) {
- org.apache.juddi.model.Tmodel obj = em.find(org.apache.juddi.model.Tmodel.class, entityKey);
-
- if (obj == null) {
- throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.TModelNotFound", entityKey));
- }
- if (!obj.getNodeId().equals(getNode())) {
- throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.TModelNodeOwner", entityKey + " this node " + getNode() + " owning node " + obj.getNodeId()));
- }
- em.remove(obj);
- changes.add(UDDIPublicationImpl.getChangeRecord_deleteTModelDelete(entityKey, getNode(), df));
-
- }
-
- tx.commit();
- for (ChangeRecord cr : changes) {
- ReplicationNotifier.enqueue(cr);
- }
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.ADMIN_DELETE_TMODEL,
- QueryStatus.SUCCESS, procTime);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.ADMIN_DELETE_TMODEL,
- QueryStatus.FAILED, procTime);
- throw drfm;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- /**
- * Delete's a client's subscription information. This is typically used
- * for server to server subscriptions Administrative privilege required.
- *
- * @param body
- * @throws DispositionReportFaultMessage
- * @throws RemoteException
- */
- public void deleteClientSubscriptionInfo(DeleteClientSubscriptionInfo body)
- throws DispositionReportFaultMessage, RemoteException {
- long startTime = System.currentTimeMillis();
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
-
- new ValidateClientSubscriptionInfo(publisher).validateDeleteClientSubscriptionInfo(em, body);
-
- List<String> entityKeyList = body.getSubscriptionKey();
- for (String entityKey : entityKeyList) {
- Object obj = em.find(org.apache.juddi.model.ClientSubscriptionInfo.class, entityKey);
- em.remove(obj);
- }
-
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.DELETE_CLIENT_SUB,
- QueryStatus.SUCCESS, procTime);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.DELETE_CLIENT_SUB,
- QueryStatus.FAILED, procTime);
- throw drfm;
-
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
-
- }
-
- /**
- * Adds client subscription information. This effectively links a server
- * to serverr subscription to clerk Administrative privilege required.
- *
- * @param body
- * @return ClientSubscriptionInfoDetail
- * @throws DispositionReportFaultMessage
- * @throws RemoteException
- */
- public ClientSubscriptionInfoDetail saveClientSubscriptionInfo(SaveClientSubscriptionInfo body)
- throws DispositionReportFaultMessage, RemoteException {
- long startTime = System.currentTimeMillis();
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
-
- new ValidateClientSubscriptionInfo(publisher).validateSaveClientSubscriptionInfo(em, body);
-
- ClientSubscriptionInfoDetail result = new ClientSubscriptionInfoDetail();
-
- List<org.apache.juddi.api_v3.ClientSubscriptionInfo> apiClientSubscriptionInfoList = body.getClientSubscriptionInfo();
- for (org.apache.juddi.api_v3.ClientSubscriptionInfo apiClientSubscriptionInfo : apiClientSubscriptionInfoList) {
-
- org.apache.juddi.model.ClientSubscriptionInfo modelClientSubscriptionInfo = new org.apache.juddi.model.ClientSubscriptionInfo();
-
- MappingApiToModel.mapClientSubscriptionInfo(apiClientSubscriptionInfo, modelClientSubscriptionInfo);
-
- Object existingUddiEntity = em.find(modelClientSubscriptionInfo.getClass(), modelClientSubscriptionInfo.getSubscriptionKey());
- if (existingUddiEntity != null) {
- em.remove(existingUddiEntity);
- }
-
- em.persist(modelClientSubscriptionInfo);
-
- result.getClientSubscriptionInfo().add(apiClientSubscriptionInfo);
- }
-
- tx.commit();
-
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.SAVE_CLIENT_SUB,
- QueryStatus.SUCCESS, procTime);
- return result;
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.SAVE_CLIENT_SUB,
- QueryStatus.FAILED, procTime);
- throw drfm;
-
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- /**
- * Gets all client subscription information. This is used for server to
- * server subscriptions Administrative privilege required.
- *
- * @param body
- * @return ClientSubscriptionInfoDetail
- * @throws DispositionReportFaultMessage
- */
- @SuppressWarnings("unchecked")
- public ClientSubscriptionInfoDetail getAllClientSubscriptionInfoDetail(GetAllClientSubscriptionInfoDetail body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
- new ValidateClientSubscriptionInfo(null).validateGetAllClientSubscriptionDetail(body);
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- this.getEntityPublisher(em, body.getAuthInfo());
-
- ClientSubscriptionInfoDetail result = new ClientSubscriptionInfoDetail();
-
- Query query = em.createQuery("SELECT cs from ClientSubscriptionInfo as cs");
- List<org.apache.juddi.model.ClientSubscriptionInfo> modelClientSubscriptionInfoList = query.getResultList();
-
- for (ClientSubscriptionInfo modelClientSubscriptionInfo : modelClientSubscriptionInfoList) {
-
- org.apache.juddi.api_v3.ClientSubscriptionInfo apiClientSubscriptionInfo = new org.apache.juddi.api_v3.ClientSubscriptionInfo();
-
- MappingModelToApi.mapClientSubscriptionInfo(modelClientSubscriptionInfo, apiClientSubscriptionInfo, em);
-
- result.getClientSubscriptionInfo().add(apiClientSubscriptionInfo);
- }
-
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.GET_ALL_CLIENT_SUB,
- QueryStatus.SUCCESS, procTime);
- return result;
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.GET_ALL_CLIENT_SUB,
- QueryStatus.FAILED, procTime);
- throw drfm;
-
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
-
- }
-
- /**
- * Retrieves clientSubscriptionKey(s) from the persistence layer. This
- * method is specific to jUDDI. Used for server to server subscriptions
- * Administrative privilege required.
- *
- * @param body
- * @return ClientSubscriptionInfoDetail
- * @throws DispositionReportFaultMessage
- */
- public ClientSubscriptionInfoDetail getClientSubscriptionInfoDetail(GetClientSubscriptionInfoDetail body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
- new ValidateClientSubscriptionInfo(null).validateGetClientSubscriptionInfoDetail(body);
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- this.getEntityPublisher(em, body.getAuthInfo());
-
- ClientSubscriptionInfoDetail result = new ClientSubscriptionInfoDetail();
-
- List<String> subscriptionKeyList = body.getClientSubscriptionKey();
- for (String subscriptionKey : subscriptionKeyList) {
-
- org.apache.juddi.model.ClientSubscriptionInfo modelClientSubscriptionInfo = null;
-
- try {
- modelClientSubscriptionInfo = em.find(org.apache.juddi.model.ClientSubscriptionInfo.class, subscriptionKey);
- } catch (ClassCastException e) {
- }
- if (modelClientSubscriptionInfo == null) {
- throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.SubscripKeyNotFound", subscriptionKey));
- }
-
- org.apache.juddi.api_v3.ClientSubscriptionInfo apiClientSubscriptionInfo = new org.apache.juddi.api_v3.ClientSubscriptionInfo();
-
- MappingModelToApi.mapClientSubscriptionInfo(modelClientSubscriptionInfo, apiClientSubscriptionInfo, em);
-
- result.getClientSubscriptionInfo().add(apiClientSubscriptionInfo);
- }
-
- tx.commit();
-
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.GET_CLIENT_SUB,
- QueryStatus.SUCCESS, procTime);
- return result;
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.GET_CLIENT_SUB,
- QueryStatus.FAILED, procTime);
- throw drfm;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
-
- }
-
- /**
- * Saves clerk(s) to the persistence layer. This method is specific to
- * jUDDI. This is used for server to server subscriptions and for future
- * use with replication. Administrative privilege required.
- *
- * @param body
- * @return ClerkDetail
- * @throws DispositionReportFaultMessage
- */
- @Override
- public ClerkDetail saveClerk(SaveClerk body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
-
- new ValidateClerk(publisher).validateSaveClerk(em, body);
-
- ClerkDetail result = new ClerkDetail();
-
- List<org.apache.juddi.api_v3.Clerk> apiClerkList = body.getClerk();;
- for (org.apache.juddi.api_v3.Clerk apiClerk : apiClerkList) {
-
- org.apache.juddi.model.Clerk modelClerk = new org.apache.juddi.model.Clerk();
-
- MappingApiToModel.mapClerk(apiClerk, modelClerk);
- org.apache.juddi.model.Node node2 = em.find(org.apache.juddi.model.Node.class, apiClerk.getNode().getName());
- if (node2 == null) {
- //it doesn't exist yet
- node2 = new Node();
- MappingApiToModel.mapNode(apiClerk.getNode(), node2);
- em.persist(node2);
- }
-
- modelClerk.setNode(node2.getName());
- Object existingUddiEntity = em.find(modelClerk.getClass(), modelClerk.getClerkName());
- if (existingUddiEntity != null) {
-
- em.merge(modelClerk);
- } else {
- em.persist(modelClerk);
- }
-
- result.getClerk().add(apiClerk);
- }
-
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.SAVE_CLERK,
- QueryStatus.SUCCESS, procTime);
- return result;
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.SAVE_CLERK,
- QueryStatus.FAILED, procTime);
- throw drfm;
-
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- /**
- * Saves nodes(s) to the persistence layer. This method is specific to
- * jUDDI. Administrative privilege required. This is used for server to
- * server subscriptions and for future use with replication.
- * Administrative privilege required.
- *
- * @param body
- * @return NodeDetail
- * @throws DispositionReportFaultMessage
- */
- public NodeDetail saveNode(SaveNode body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
-
- new ValidateNode(publisher).validateSaveNode(em, body);
-
- NodeDetail result = new NodeDetail();
-
- List<org.apache.juddi.api_v3.Node> apiNodeList = body.getNode();
- for (org.apache.juddi.api_v3.Node apiNode : apiNodeList) {
-
- org.apache.juddi.model.Node modelNode = new org.apache.juddi.model.Node();
-
- MappingApiToModel.mapNode(apiNode, modelNode);
-
- Object existingUddiEntity = em.find(modelNode.getClass(), modelNode.getName());
- if (existingUddiEntity != null) {
- em.merge(modelNode);
- } else {
- em.persist(modelNode);
- }
-
- result.getNode().add(apiNode);
- }
-
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.SAVE_NODE,
- QueryStatus.SUCCESS, procTime);
- return result;
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.SAVE_NODE,
- QueryStatus.FAILED, procTime);
- throw drfm;
-
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- /**
- * Instructs the registry to perform a synchronous subscription
- * response.
- *
- * @param body
- * @return SyncSubscriptionDetail
- * @throws DispositionReportFaultMessage
- * @throws RemoteException
- */
- @SuppressWarnings("unchecked")
- @Override
- public SyncSubscriptionDetail invokeSyncSubscription(
- SyncSubscription body) throws DispositionReportFaultMessage,
- RemoteException {
- long startTime = System.currentTimeMillis();
- //validate
- SyncSubscriptionDetail syncSubscriptionDetail = new SyncSubscriptionDetail();
-
- Map<String, org.apache.juddi.api_v3.ClientSubscriptionInfo> clientSubscriptionInfoMap
- = new HashMap<String, org.apache.juddi.api_v3.ClientSubscriptionInfo>();
- //find the clerks to go with these subscriptions
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- this.getEntityPublisher(em, body.getAuthInfo());
- for (GetSubscriptionResults getSubscriptionResult : body.getGetSubscriptionResultsList()) {
- String subscriptionKey = getSubscriptionResult.getSubscriptionKey();
- org.apache.juddi.model.ClientSubscriptionInfo modelClientSubscriptionInfo = null;
-
- try {
- modelClientSubscriptionInfo = em.find(org.apache.juddi.model.ClientSubscriptionInfo.class, subscriptionKey);
- } catch (ClassCastException e) {
- }
- if (modelClientSubscriptionInfo == null) {
- throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.SubscripKeyNotFound", subscriptionKey));
- }
- org.apache.juddi.api_v3.ClientSubscriptionInfo apiClientSubscriptionInfo = new org.apache.juddi.api_v3.ClientSubscriptionInfo();
- MappingModelToApi.mapClientSubscriptionInfo(modelClientSubscriptionInfo, apiClientSubscriptionInfo, em);
- clientSubscriptionInfoMap.put(apiClientSubscriptionInfo.getSubscriptionKey(), apiClientSubscriptionInfo);
- }
-
- tx.commit();
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.INVOKE_SYNCSUB,
- QueryStatus.FAILED, procTime);
- throw drfm;
-
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
-
- for (GetSubscriptionResults getSubscriptionResult : body.getGetSubscriptionResultsList()) {
- try {
- String subscriptionKey = getSubscriptionResult.getSubscriptionKey();
- Clerk fromClerk = clientSubscriptionInfoMap.get(subscriptionKey).getFromClerk();
- Clerk toClerk = clientSubscriptionInfoMap.get(subscriptionKey).getToClerk();
- String clazz = fromClerk.getNode().getProxyTransport();
- Class<?> transportClass = ClassUtil.forName(clazz, this.getClass());
- Transport transport = (Transport) transportClass.getConstructor(String.class
- ).newInstance(fromClerk.getNode().getName());
- UDDISubscriptionPortType subscriptionService = transport.getUDDISubscriptionService(fromClerk.getNode().getSubscriptionUrl());
- SubscriptionResultsList list = subscriptionService.getSubscriptionResults(getSubscriptionResult);
-
- JAXBContext context = JAXBContext.newInstance(list.getClass());
- Marshaller marshaller = context.createMarshaller();
- StringWriter sw = new StringWriter();
-
- marshaller.marshal(list, sw);
-
- log.info(
- "Notification received by UDDISubscriptionListenerService : " + sw.toString());
-
- NotificationList<String> nl = NotificationList.getInstance();
-
- nl.getNotifications()
- .add(sw.toString());
-
- //update the registry with the notification list.
- XRegisterHelper.handle(fromClerk, toClerk, list);
-
- syncSubscriptionDetail.getSubscriptionResultsList()
- .add(list);
- } catch (Exception ce) {
- log.error(ce.getMessage(), ce);
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.SAVE_NODE,
- QueryStatus.FAILED, procTime);
- if (ce instanceof DispositionReportFaultMessage) {
- throw (DispositionReportFaultMessage) ce;
- }
- if (ce instanceof RemoteException) {
- DispositionReportFaultMessage x = new FatalErrorException(new ErrorMessage("errors.subscriptionnotifier.client", ce.getMessage()));
- throw x;
- }
- }
- }
- //for now sending a clean object back
-
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.INVOKE_SYNCSUB,
- QueryStatus.SUCCESS, procTime);
- return syncSubscriptionDetail;
- }
-
- @Override
- public NodeList getAllNodes(String authInfo) throws DispositionReportFaultMessage, RemoteException {
- long startTime = System.currentTimeMillis();
- NodeList r = new NodeList();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, authInfo);
-
- new ValidatePublish(publisher).validateGetAllNodes();
-
- StringBuilder sql = new StringBuilder();
- sql.append("select distinct c from Node c ");
- sql.toString();
- Query qry = em.createQuery(sql.toString());
- List<org.apache.juddi.model.Node> resultList = qry.getResultList();
- for (int i = 0; i < resultList.size(); i++) {
- org.apache.juddi.api_v3.Node api = new org.apache.juddi.api_v3.Node();
- MappingModelToApi.mapNode(resultList.get(i), api);
- r.getNode().add(api);
-
- }
-
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.GET_ALL_NODES,
- QueryStatus.SUCCESS, procTime);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.GET_ALL_NODES,
- QueryStatus.FAILED, procTime);
- throw drfm;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
-
- return r;
- }
-
- @Override
- public ClerkList getAllClerks(String authInfo) throws DispositionReportFaultMessage, RemoteException {
- long startTime = System.currentTimeMillis();
- ClerkList ret = new ClerkList();
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, authInfo);
-
- new ValidatePublish(publisher).validateGetAllNodes();
-
- StringBuilder sql = new StringBuilder();
- sql.append("select distinct c from Clerk c ");
- sql.toString();
- Query qry = em.createQuery(sql.toString());
- List<org.apache.juddi.model.Clerk> resultList = qry.getResultList();
- for (int i = 0; i < resultList.size(); i++) {
- Clerk api = new Clerk();
- MappingModelToApi.mapClerk(resultList.get(i), api, em);
- ret.getClerk().add(api);
-
- }
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.GET_ALL_CLERKS,
- QueryStatus.SUCCESS, procTime);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.GET_ALL_CLERKS,
- QueryStatus.FAILED, procTime);
- throw drfm;
-
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
-
- return ret;
-
- }
-
- @Override
- public void deleteNode(DeleteNode req) throws DispositionReportFaultMessage, RemoteException {
- long startTime = System.currentTimeMillis();
- boolean found = false;
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
- //TODO if the given node is in the replication config, prevent deletion
- UddiEntityPublisher publisher = this.getEntityPublisher(em, req.getAuthInfo());
- new ValidatePublish(publisher).validateDeleteNode(em, req, getReplicationNodes(req.getAuthInfo()));
-
- org.apache.juddi.model.Node existingUddiEntity = em.find(org.apache.juddi.model.Node.class, req.getNodeID());
- if (existingUddiEntity != null) {
-
- //cascade delete all clerks tied to this node, confirm that it works
- Query createQuery = em.createQuery("delete from Clerk c where c.node = :nodename");
- createQuery.setParameter("nodename", req.getNodeID());
- createQuery.executeUpdate();
-
- em.remove(existingUddiEntity);
- found = true;
- } else {
- throw new InvalidKeyPassedException(new ErrorMessage("errors.deleteNode.NotFound"));
- }
-
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.DELETE_NODE,
- QueryStatus.SUCCESS, procTime);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.DELETE_NODE,
- QueryStatus.FAILED, procTime);
- throw drfm;
-
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
-
- if (!found) {
-
- throw new InvalidKeyPassedException(new ErrorMessage("errors.deleteNode.NotFound", req.getNodeID()));
- }
- }
-
- @Override
- public void deleteClerk(DeleteClerk req) throws DispositionReportFaultMessage, RemoteException {
- long startTime = System.currentTimeMillis();
- boolean found = false;
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, req.getAuthInfo());
-
- new ValidatePublish(publisher).validateDeleteClerk(em, req);
-
- org.apache.juddi.model.Clerk existingUddiEntity = em.find(org.apache.juddi.model.Clerk.class, req.getClerkID());
- if (existingUddiEntity
- != null) {
- em.remove(existingUddiEntity);
- found = true;
- }
-
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.DELETE_CLERK,
- QueryStatus.SUCCESS, procTime);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.DELETE_CLERK,
- QueryStatus.FAILED, procTime);
- throw drfm;
-
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
-
- if (!found) {
- throw new InvalidKeyPassedException(new ErrorMessage("errors.deleteClerk.NotFound"));
- }
-
- }
-
- /*
- * enables tmodel owners to setup valid values for tmodel instance infos
- * to use?
- *
- * @param authInfo
- * @param values
- * @return
- * @throws DispositionReportFaultMessage
-
- @Override
- public DispositionReport setAllValidValues(String authInfo, List<ValidValues> values) throws DispositionReportFaultMessage, RemoteException {
- throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
- /* EntityManager em = PersistenceManager.getEntityManager();
- UddiEntityPublisher entityPublisher = getEntityPublisher(em, authInfo);
-
- new ValidateValueSetValidation(entityPublisher).validateSetAllValidValues(values);
-
- EntityTransaction tx = em.getTransaction();
- try {
-
- // is this tModel used anywhere?, if so, validate all instances against the new rule?
- tx.begin();
-
- //each tmodel/value set
- for (int i = 0; i < values.size(); i++) {
- //remove any existing references to the key
- ValueSetValues find = em.find(ValueSetValues.class, values.get(i).getTModekKey());
-
- if (find != null) {
- find.setValidatorClass(values.get(i).getValidationClass());
- em.persist(find);
-
- } else {
- org.apache.juddi.model.ValueSetValues vv = new ValueSetValues();
- vv.setTModelKey(values.get(i).getTModekKey());
- vv.setValidatorClass(values.get(i).getValidationClass());
- em.persist(vv);
- }
- }
-
- tx.commit();
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- DispositionReport r = new DispositionReport();
- r.getResult().add(new Result());
- return r;
- }*/
- @Override
- public void adminDeleteSubscription(String authInfo, List<String> subscriptionKey) throws DispositionReportFaultMessage, RemoteException {
-
- long startTime = System.currentTimeMillis();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher requestor = this.getEntityPublisher(em, authInfo);
- if (!((Publisher) requestor).isAdmin()) {
- throw new UserMismatchException(new ErrorMessage("errors.AdminReqd"));
- }
- //new ValidateSubscription(publisher).validateDeleteSubscription(em, body);
- List<TemporaryMailContainer> notifications = new ArrayList<TemporaryMailContainer>();
- List<String> subscriptionKeyList = subscriptionKey;
- for (String key : subscriptionKeyList) {
- if (key != null && key.length() > 0) {
- org.apache.juddi.model.Subscription obj = em.find(org.apache.juddi.model.Subscription.class, key);
- Publisher publisher = em.find(Publisher.class, obj.getAuthorizedName());
- notifications.add(new TemporaryMailContainer(obj, publisher, (Publisher) requestor));
- em.remove(obj);
- }
- }
-
- tx.commit();
- for (TemporaryMailContainer t : notifications) {
- USERFRIENDLYSMTPNotifier.notifySubscriptionDeleted(t);
- }
- notifications.clear();
- notifications = null;
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.ADMIN_DELETE_SUB,
- QueryStatus.SUCCESS, procTime);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.ADMIN_DELETE_SUB,
- QueryStatus.FAILED, procTime);
- throw drfm;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
-
- }
-
- @Override
- public DispositionReport adminSaveBusiness(String authInfo, List<AdminSaveBusinessWrapper> values) throws DispositionReportFaultMessage, RemoteException {
- long startTime = System.currentTimeMillis();
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
- UddiEntityPublisher requestor = this.getEntityPublisher(em, authInfo);
- if (!((Publisher) requestor).isAdmin()) {
- throw new UserMismatchException(new ErrorMessage("errors.AdminReqd"));
- }
-
- for (int i = 0; i < values.size(); i++) {
- //impersonate the user
- AuthToken authToken = sec.getAuthToken(values.get(i).getPublisherID());
-
- SaveBusiness stm = new SaveBusiness();
-
- stm.setAuthInfo(authToken.getAuthInfo());
- stm.getBusinessEntity().addAll(values.get(i).getBusinessEntity());
- pub.saveBusiness(stm);
- }
-
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.ADMIN_SAVE_BUSINESS,
- QueryStatus.SUCCESS, procTime);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.ADMIN_SAVE_BUSINESS,
- QueryStatus.FAILED, procTime);
- throw drfm;
-
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
-
- DispositionReport r = new DispositionReport();
- return r;
-
- }
-
- @Override
- public DispositionReport adminSaveTModel(String authInfo, List<AdminSaveTModelWrapper> values) throws DispositionReportFaultMessage, RemoteException {
- long startTime = System.currentTimeMillis();
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
- UddiEntityPublisher requestor = this.getEntityPublisher(em, authInfo);
- if (!((Publisher) requestor).isAdmin()) {
- throw new UserMismatchException(new ErrorMessage("errors.AdminReqd"));
- }
-
- for (int i = 0; i < values.size(); i++) {
- //impersonate the user
- AuthToken authToken = sec.getAuthToken(values.get(i).getPublisherID());
- SaveTModel stm = new SaveTModel();
- stm.setAuthInfo(authToken.getAuthInfo());
- stm.getTModel().addAll(values.get(i).getTModel());
- pub.saveTModel(stm);
- }
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.ADMIN_SAVE_TMODEL,
- QueryStatus.SUCCESS, procTime);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.ADMIN_SAVE_TMODEL,
- QueryStatus.FAILED, procTime);
- throw drfm;
-
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
-
- DispositionReport r = new DispositionReport();
- return r;
- }
-
- @Override
- public List<SubscriptionWrapper> getAllClientSubscriptionInfo(String authInfo) throws DispositionReportFaultMessage, RemoteException {
- long startTime = System.currentTimeMillis();
-
- List<SubscriptionWrapper> r = new ArrayList<SubscriptionWrapper>();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, authInfo);
- if (!((Publisher) publisher).isAdmin()) {
- throw new UserMismatchException(new ErrorMessage("errors.AdminReqd"));
- }
-
- StringBuilder sql = new StringBuilder();
- sql.append("select distinct c from Subscription c ");
- Query qry = em.createQuery(sql.toString());
- List<org.apache.juddi.model.Subscription> resultList = qry.getResultList();
- for (int i = 0; i < resultList.size(); i++) {
- Subscription sub = new Subscription();
- MappingModelToApi.mapSubscription(resultList.get(i), sub);
- SubscriptionWrapper x = new SubscriptionWrapper();
- x.getSubscription().add(sub);
- x.setPublisherIdOrUsername(resultList.get(i).getAuthorizedName());
- r.add(x);
- }
-
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.GET_ALL_CLIENT_SUB,
- QueryStatus.SUCCESS, procTime);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.GET_ALL_CLIENT_SUB,
- QueryStatus.FAILED, procTime);
- throw drfm;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
-
- return r;
- }
-
- @Override
- public synchronized DispositionReport setReplicationNodes(String authInfo, org.uddi.repl_v3.ReplicationConfiguration replicationConfiguration) throws DispositionReportFaultMessage, RemoteException {
- long startTime = System.currentTimeMillis();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- org.uddi.repl_v3.ReplicationConfiguration oldConfig = null;
- UddiEntityPublisher publisher = this.getEntityPublisher(em, authInfo);
- if (!((Publisher) publisher).isAdmin()) {
- throw new UserMismatchException(new ErrorMessage("errors.AdminReqd"));
- }
- new ValidateReplication(publisher).validateSetReplicationNodes(replicationConfiguration, em, getNode(), AppConfig.getConfiguration());
-
- org.apache.juddi.model.ReplicationConfiguration model = null;
- logger.info(publisher.getAuthorizedName() + " is setting the replication config from " + getRequestorsIPAddress());// + " " + sw.toString());
- try {
- model = (ReplicationConfiguration) em.createQuery("select c FROM ReplicationConfiguration c order by c.serialNumber desc").getSingleResult();
- } catch (Exception ex) {
- }
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddkkmmZ");
- if (model == null) {
- //this is a brand new configuration and we didn't have one before
- model = new ReplicationConfiguration();
- MappingApiToModel.mapReplicationConfiguration(replicationConfiguration, model, em);
- model.setSerialNumber(System.currentTimeMillis());
- model.setTimeOfConfigurationUpdate(sdf.format(new Date()));
- em.persist(model);
- //if (newReplicationNode(model)){
- //tell the replication notifier to start transfering with
- //the first change record
- //}
-
- } else {
- //a config exists, remove it, add the new one
- //spec doesn't appear to mention if recording a change history on the config is required
- //assuming we'll keep it for now, might be useful later.
- //em.remove(model);
- oldConfig = new org.uddi.repl_v3.ReplicationConfiguration();
- MappingModelToApi.mapReplicationConfiguration(model, oldConfig);
-
- ReplicationConfiguration model2 = new ReplicationConfiguration();
- MappingApiToModel.mapReplicationConfiguration(replicationConfiguration, model2, em);
- model2.setSerialNumber(System.currentTimeMillis());
-
- model2.setTimeOfConfigurationUpdate(sdf.format(new Date()));
- em.persist(model2);
-
- }
-
- tx.commit();
- UDDIReplicationImpl.notifyConfigurationChange(oldConfig, replicationConfiguration, this);
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.SET_REPLICATION_NODES,
- QueryStatus.SUCCESS, procTime);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.SET_REPLICATION_NODES,
- QueryStatus.FAILED, procTime);
- throw drfm;
- } catch (Exception ex) {
- logger.error(ex, ex);
- throw new FatalErrorException(new ErrorMessage("E_fatalError", ex.getMessage()));
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- DispositionReport d = new DispositionReport();
- Result res = new Result();
-
- d.getResult().add(res);
- return d;
- }
-
- @Override
- public synchronized org.uddi.repl_v3.ReplicationConfiguration getReplicationNodes(String authInfo) throws DispositionReportFaultMessage, RemoteException {
- long startTime = System.currentTimeMillis();
- org.uddi.repl_v3.ReplicationConfiguration r = new org.uddi.repl_v3.ReplicationConfiguration();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, authInfo);
- if (!((Publisher) publisher).isAdmin()) {
- throw new UserMismatchException(new ErrorMessage("errors.AdminReqd"));
- }
-
- StringBuilder sql = new StringBuilder();
- sql.append("select c from ReplicationConfiguration c order by c.serialNumber desc");
- //sql.toString();
- Query qry = em.createQuery(sql.toString());
- qry.setMaxResults(1);
-
- org.apache.juddi.model.ReplicationConfiguration resultList = (org.apache.juddi.model.ReplicationConfiguration) qry.getSingleResult();
- MappingModelToApi.mapReplicationConfiguration(resultList, r);
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.GET_ALL_NODES,
- QueryStatus.SUCCESS, procTime);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.GET_ALL_NODES,
- QueryStatus.FAILED, procTime);
- throw drfm;
- } catch (Exception ex) {
- //possible that there is no config to return
- logger.debug("Error caught, is there a replication config is avaiable? Returning a default config (no replication): ", ex);
-
- r.setCommunicationGraph(new CommunicationGraph());
- Operator op = new Operator();
- op.setOperatorNodeID(getNode());
- op.setSoapReplicationURL(baseUrlSSL + "replication/services/replication");
-
- op.getContact().add(new Contact());
- op.getContact().get(0).getPersonName().add(new PersonName("Unknown", null));
- op.setOperatorStatus(OperatorStatusType.NORMAL);
-
- r.getOperator().add(op);
- r.getCommunicationGraph().getNode().add(getNode());
- r.getCommunicationGraph().getControlledMessage().add("*");
- long procTime = System.currentTimeMillis() - startTime;
- r.setSerialNumber(0);
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddkkmmZ");
- r.setTimeOfConfigurationUpdate(sdf.format(new Date()));
- r.setRegistryContact(new org.uddi.repl_v3.ReplicationConfiguration.RegistryContact());
- try {
- // pull from root business
- if (!tx.isActive()) {
- tx = em.getTransaction();
- }
-
- BusinessEntity rootbiz = em.find(BusinessEntity.class, AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ROOT_BUSINESS));
- if (rootbiz != null) {
-
- for (int i = 0; i < rootbiz.getContacts().size(); i++) {
- Contact c = new Contact();
- MappingModelToApi.mapContact(rootbiz.getContacts().get(i), c);
- r.getRegistryContact().setContact(c);
- break;
- }
-
- }
- tx.rollback();
-
- } catch (Exception ex1) {
- logger.warn("unexpected error", ex1);
- }
- if (r.getRegistryContact().getContact() == null) {
- r.getRegistryContact().setContact(new Contact());
- r.getRegistryContact().getContact().getPersonName().add(new PersonName("Unknown", null));
- }
- serviceCounter.update(JUDDIQuery.GET_REPLICATION_NODES,
- QueryStatus.SUCCESS, procTime);
-
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
-
- r.setMaximumTimeToGetChanges(BigInteger.ONE);
- r.setMaximumTimeToSyncRegistry(BigInteger.ONE);
- //StringWriter sw = new StringWriter();
- //JAXB.marshal(r, sw);
- //logger.info("dumping returned replication config " + sw.toString());
- return r;
- }
-
- static UDDISubscriptionImpl sub = new UDDISubscriptionImpl();
- static UDDISecurityImpl sec = new UDDISecurityImpl();
- static UDDIPublicationImpl pub = new UDDIPublicationImpl();
-
- @Override
- public void adminSaveSubscription(String authInfo, String publisherOrUsername, Holder<List<Subscription>> subscriptions) throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
- UddiEntityPublisher requestor = this.getEntityPublisher(em, authInfo);
- if (!((Publisher) requestor).isAdmin()) {
- throw new UserMismatchException(new ErrorMessage("errors.AdminReqd"));
- }
- //impersonate the user
- AuthToken authToken = sec.getAuthToken(publisherOrUsername);
- sub.saveSubscription(authToken.getAuthInfo(), subscriptions);
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.ADMIN_SAVE_SUB,
- QueryStatus.SUCCESS, procTime);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.ADMIN_SAVE_SUB,
- QueryStatus.FAILED, procTime);
- throw drfm;
-
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
-
- }
-
- /**
- * {@inheritDoc }
- *
- * @param body
- * @return item history or null if not found
- * @throws DispositionReportFaultMessage
- * @throws RemoteException
- */
- @Override
- public GetEntityHistoryMessageResponse getEntityHistory(GetEntityHistoryMessageRequest body) throws DispositionReportFaultMessage, RemoteException {
- long startTime = System.currentTimeMillis();
- if (body == null) {
- throw new InvalidValueException(new ErrorMessage("errors.NullInput"));
- }
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
- UddiEntityPublisher requestor = this.getEntityPublisher(em, body.getAuthInfo());
- if (!((Publisher) requestor).isAdmin()) {
- throw new UserMismatchException(new ErrorMessage("errors.AdminReqd"));
- }
- if (body.getMaxRecords() <= 0) {
- body.setMaxRecords(20);
- }
- if (body.getOffset() < 0) {
- body.setOffset(0);
- }
- Query createQuery = em.createQuery("select m from ChangeRecord m where m.entityKey = :key order by m.id DESC");
- createQuery.setMaxResults((int) body.getMaxRecords());
- createQuery.setParameter("key", body.getEntityKey());
- createQuery.setFirstResult((int) body.getOffset());
- List<ChangeRecord> resultList = createQuery.getResultList();
- GetEntityHistoryMessageResponse res = new GetEntityHistoryMessageResponse();
- res.setChangeRecords(new ChangeRecords());
- for (ChangeRecord cr : resultList) {
- res.getChangeRecords().getChangeRecord().add(MappingModelToApi.mapChangeRecord(cr));
- }
-
- tx.rollback();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.ADMIN_GET_HISTORY,
- QueryStatus.SUCCESS, procTime);
- return res;
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.ADMIN_GET_HISTORY,
- QueryStatus.FAILED, procTime);
- throw drfm;
-
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- /**
- * {@inheritDoc }
- *
- * @param body
- * @return
- * @throws DispositionReportFaultMessage
- * @throws RemoteException
- */
- @Override
- public GetFailedReplicationChangeRecordsMessageResponse getFailedReplicationChangeRecords(
- GetFailedReplicationChangeRecordsMessageRequest body)
- throws DispositionReportFaultMessage, RemoteException {
- //public GetFailedReplicationChangeRecordsMessageResponse getFailedReplicationChangeRecords(GetFailedReplicationChangeRecordsMessageRequest body) throws DispositionReportFaultMessage, RemoteException {
- long startTime = System.currentTimeMillis();
- if (body == null) {
- throw new InvalidValueException(new ErrorMessage("errors.NullInput"));
- }
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
- UddiEntityPublisher requestor = this.getEntityPublisher(em, body.getAuthInfo());
- if (!((Publisher) requestor).isAdmin()) {
- throw new UserMismatchException(new ErrorMessage("errors.AdminReqd"));
- }
- if (body.getMaxRecords() <= 0) {
- body.setMaxRecords(20);
- }
- if (body.getOffset() < 0) {
- body.setOffset(0);
- }
- Query createQuery = em.createQuery("select m from ChangeRecord m where m.isAppliedLocally=false order by m.id DESC ");
- createQuery.setMaxResults((int) body.getMaxRecords());
- createQuery.setFirstResult((int) body.getOffset());
- List<ChangeRecord> resultList = createQuery.getResultList();
- GetFailedReplicationChangeRecordsMessageResponse res = new GetFailedReplicationChangeRecordsMessageResponse();
- res.setChangeRecords(new ChangeRecords());
- for (ChangeRecord cr : resultList) {
- res.getChangeRecords().getChangeRecord().add(MappingModelToApi.mapChangeRecord(cr));
- }
-
- tx.rollback();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.ADMIN_GET_FAILED_CRS,
- QueryStatus.SUCCESS, procTime);
- return res;
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(JUDDIQuery.ADMIN_GET_FAILED_CRS,
- QueryStatus.FAILED, procTime);
- throw drfm;
-
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-}
+/*
+ * Copyright 2001-2008 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.juddi.api.impl;
+
+import java.io.StringWriter;
+import java.math.BigInteger;
+import java.rmi.RemoteException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.jws.WebService;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityTransaction;
+import javax.persistence.Query;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Marshaller;
+import javax.xml.ws.Holder;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.juddi.ClassUtil;
+import static org.apache.juddi.api.impl.JUDDIApiImpl.sub;
+import org.apache.juddi.api.util.JUDDIQuery;
+import org.apache.juddi.api.util.QueryStatus;
+import org.apache.juddi.api_v3.AdminSaveBusinessWrapper;
+import org.apache.juddi.api_v3.AdminSaveTModelWrapper;
+import org.apache.juddi.api_v3.Clerk;
+import org.apache.juddi.api_v3.ClerkDetail;
+import org.apache.juddi.api_v3.ClerkList;
+import org.apache.juddi.api_v3.ClientSubscriptionInfoDetail;
+import org.apache.juddi.api_v3.DeleteClerk;
+import org.apache.juddi.api_v3.DeleteClientSubscriptionInfo;
+import org.apache.juddi.api_v3.DeleteNode;
+import org.apache.juddi.api_v3.DeletePublisher;
+import org.apache.juddi.api_v3.GetAllClientSubscriptionInfoDetail;
+import org.apache.juddi.api_v3.GetAllPublisherDetail;
+import org.apache.juddi.api_v3.GetClientSubscriptionInfoDetail;
+import org.apache.juddi.api_v3.GetEntityHistoryMessageRequest;
+import org.apache.juddi.api_v3.GetEntityHistoryMessageResponse;
+import org.apache.juddi.api_v3.GetFailedReplicationChangeRecordsMessageRequest;
+import org.apache.juddi.api_v3.GetFailedReplicationChangeRecordsMessageResponse;
+import org.apache.juddi.api_v3.GetPublisherDetail;
+import org.apache.juddi.api_v3.NodeDetail;
+import org.apache.juddi.api_v3.NodeList;
+import org.apache.juddi.api_v3.PublisherDetail;
+import org.apache.juddi.api_v3.SaveClerk;
+import org.apache.juddi.api_v3.SaveClientSubscriptionInfo;
+import org.apache.juddi.api_v3.SaveNode;
+import org.apache.juddi.api_v3.SavePublisher;
+import org.apache.juddi.api_v3.SubscriptionWrapper;
+import org.apache.juddi.api_v3.SyncSubscription;
+import org.apache.juddi.api_v3.SyncSubscriptionDetail;
+import org.apache.juddi.config.AppConfig;
+import org.apache.juddi.config.PersistenceManager;
+import org.apache.juddi.config.Property;
+import org.apache.juddi.mapping.MappingApiToModel;
+import org.apache.juddi.mapping.MappingModelToApi;
+import org.apache.juddi.model.BusinessEntity;
+import org.apache.juddi.model.ChangeRecord;
+import org.apache.juddi.model.ClientSubscriptionInfo;
+import org.apache.juddi.model.Node;
+import org.apache.juddi.model.Publisher;
+import org.apache.juddi.model.ReplicationConfiguration;
+import org.apache.juddi.model.Tmodel;
+import org.apache.juddi.model.UddiEntityPublisher;
+import org.apache.juddi.replication.ReplicationNotifier;
+import org.apache.juddi.subscription.NotificationList;
+import org.apache.juddi.subscription.notify.TemporaryMailContainer;
+import org.apache.juddi.subscription.notify.USERFRIENDLYSMTPNotifier;
+import org.apache.juddi.v3.client.transport.Transport;
+import org.apache.juddi.v3.error.ErrorMessage;
+import org.apache.juddi.v3.error.FatalErrorException;
+import org.apache.juddi.v3.error.InvalidKeyPassedException;
+import org.apache.juddi.v3.error.InvalidValueException;
+import org.apache.juddi.v3.error.UserMismatchException;
+import org.apache.juddi.v3_service.JUDDIApiPortType;
+import org.apache.juddi.validation.ValidateClerk;
+import org.apache.juddi.validation.ValidateClientSubscriptionInfo;
+import org.apache.juddi.validation.ValidateNode;
+import org.apache.juddi.validation.ValidatePublish;
+import org.apache.juddi.validation.ValidatePublisher;
+import org.apache.juddi.validation.ValidateReplication;
+import org.uddi.api_v3.AuthToken;
+import org.uddi.api_v3.BusinessInfo;
+import org.uddi.api_v3.BusinessInfos;
+import org.uddi.api_v3.Contact;
+import org.uddi.api_v3.DeleteTModel;
+import org.uddi.api_v3.DispositionReport;
+import org.uddi.api_v3.GetRegisteredInfo;
+import org.uddi.api_v3.InfoSelection;
+import org.uddi.api_v3.PersonName;
+import org.uddi.api_v3.RegisteredInfo;
+import org.uddi.api_v3.Result;
+import org.uddi.api_v3.SaveBusiness;
+import org.uddi.api_v3.SaveTModel;
+import org.uddi.api_v3.TModelInfo;
+import org.uddi.api_v3.TModelInfos;
+import org.uddi.repl_v3.ChangeRecords;
+import org.uddi.repl_v3.CommunicationGraph;
+import org.uddi.repl_v3.Operator;
+import org.uddi.repl_v3.OperatorStatusType;
+import org.uddi.sub_v3.GetSubscriptionResults;
+import org.uddi.sub_v3.Subscription;
+import org.uddi.sub_v3.SubscriptionResultsList;
+import org.uddi.v3_service.DispositionReportFaultMessage;
+import org.uddi.v3_service.UDDISubscriptionPortType;
+
+/**
+ * Implements the jUDDI API service. These methods are outside of the UDDI spec
+ * and are specific to jUDDI. They are primarily used for administrative
+ * functions.
+ *
+ * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
+ * @author <a href="mailto:kstam@apache.org">Kurt T Stam</a>
+ * @author <a href="mailto:alexoree@apache.org">Alex O'Ree</a>
+ */
+@WebService(serviceName = "JUDDIApiService",
+ endpointInterface = "org.apache.juddi.v3_service.JUDDIApiPortType",
+ targetNamespace = "urn:juddi-apache-org:v3_service"
+ //, wsdlLocation = "classpath:/juddi_api_v1.wsdl"
+)
+public class JUDDIApiImpl extends AuthenticatedService implements JUDDIApiPortType {
+
+ private Log log = LogFactory.getLog(this.getClass());
+ private UDDIServiceCounter serviceCounter = ServiceCounterLifecycleResource.getServiceCounter(this.getClass());
+
+ /**
+ * Saves publisher(s) to the persistence layer. This method is specific
+ * to jUDDI. Administrative privilege required.
+ *
+ * @param body
+ * @return PublisherDetail
+ * @throws DispositionReportFaultMessage
+ */
+ public PublisherDetail savePublisher(SavePublisher body)
+ throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
+
+ new ValidatePublish(publisher).validateSavePublisher(em, body);
+
+ PublisherDetail result = new PublisherDetail();
+
+ List<org.apache.juddi.api_v3.Publisher> apiPublisherList = body.getPublisher();
+ for (org.apache.juddi.api_v3.Publisher apiPublisher : apiPublisherList) {
+
+ org.apache.juddi.model.Publisher modelPublisher = new org.apache.juddi.model.Publisher();
+
+ MappingApiToModel.mapPublisher(apiPublisher, modelPublisher);
+
+ Object existingUddiEntity = em.find(modelPublisher.getClass(), modelPublisher.getAuthorizedName());
+ if (existingUddiEntity != null) {
+ em.remove(existingUddiEntity);
+ }
+
+ em.persist(modelPublisher);
+
+ result.getPublisher().add(apiPublisher);
+ }
+
+ tx.commit();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.SAVE_PUBLISHER,
+ QueryStatus.SUCCESS, procTime);
+ return result;
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.SAVE_PUBLISHER,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+
+ /**
+ * Deletes publisher(s) from the persistence layer. This method is
+ * specific to jUDDI. Administrative privilege required. Also removes
+ * all registered business entities of the user and marks all created
+ * tModels as "deleted" but not does not remove the tModel from
+ * persistence. All subscriptions are also destroyed
+ *
+ * @param body
+ * @throws DispositionReportFaultMessage
+ */
+ @Override
+ public void deletePublisher(DeletePublisher body)
+ throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
+
+ new ValidatePublish(publisher).validateDeletePublisher(em, body);
+
+ List<String> entityKeyList = body.getPublisherId();
+ List<Publisher> deletedPubs = new ArrayList<Publisher>();
+ for (String entityKey : entityKeyList) {
+ Publisher obj = em.find(org.apache.juddi.model.Publisher.class, entityKey);
+ deletedPubs.add(obj);
+ //get an authtoken for this publisher so that we can get its registeredInfo
+ UDDISecurityImpl security = new UDDISecurityImpl();
+ AuthToken authToken = security.getAuthToken(entityKey);
+
+ GetRegisteredInfo r = new GetRegisteredInfo();
+ r.setAuthInfo(authToken.getAuthInfo());
+ r.setInfoSelection(InfoSelection.ALL);
+
+ log.info("removing all businesses owned by publisher " + entityKey + ".");
+ UDDIPublicationImpl publish = new UDDIPublicationImpl();
+ RegisteredInfo registeredInfo = publish.getRegisteredInfo(r);
+ BusinessInfos businessInfos = registeredInfo.getBusinessInfos();
+ if (businessInfos != null && businessInfos.getBusinessInfo() != null) {
+ Iterator<BusinessInfo> iter = businessInfos.getBusinessInfo().iterator();
+ while (iter.hasNext()) {
+ BusinessInfo businessInfo = iter.next();
+ Object business = em.find(org.apache.juddi.model.BusinessEntity.class, businessInfo.getBusinessKey());
+ em.remove(business);
+ }
+ }
+
+ log.info("mark all tmodels for publisher " + entityKey + " as deleted.");
+ TModelInfos tmodelInfos = registeredInfo.getTModelInfos();
+ if (tmodelInfos != null && tmodelInfos.getTModelInfo() != null) {
+ Iterator<TModelInfo> iter = tmodelInfos.getTModelInfo().iterator();
+ while (iter.hasNext()) {
+ TModelInfo tModelInfo = iter.next();
+ Tmodel tmodel = (Tmodel) em.find(org.apache.juddi.model.Tmodel.class, tModelInfo.getTModelKey());
+ tmodel.setDeleted(true);
+ em.persist(tmodel);
+ }
+ }
+ log.info("remove all persisted AuthTokens for publisher " + entityKey + ".");
+ Query q1 = em.createQuery("DELETE FROM AuthToken auth WHERE auth.authorizedName = ?1");
+ q1.setParameter(1, entityKey);
+ q1.executeUpdate();
+ log.info("remove all subscriptions for publisher " + entityKey + ".");
+ q1 = em.createQuery("DELETE FROM Subscription s WHERE s.authorizedName = ?1");
+ q1.setParameter(1, entityKey);
+ q1.executeUpdate();
+
+ log.info("removing publisher " + entityKey + ".");
+ //delete the publisher
+ em.remove(obj);
+ }
+
+ tx.commit();
+ for (Publisher p: deletedPubs){
+ USERFRIENDLYSMTPNotifier.notifyAccountDeleted(new TemporaryMailContainer(null, p, (Publisher) publisher));
+ }
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.DELETE_PUBLISHER,
+ QueryStatus.SUCCESS, procTime);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.DELETE_PUBLISHER,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+
+ /**
+ * Retrieves publisher(s) from the persistence layer. This method is
+ * specific to jUDDI. Administrative privilege required.
+ *
+ * @param body
+ * @return PublisherDetail
+ * @throws DispositionReportFaultMessage
+ */
+ public PublisherDetail getPublisherDetail(GetPublisherDetail body)
+ throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+ new ValidatePublisher(null).validateGetPublisherDetail(body);
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ this.getEntityPublisher(em, body.getAuthInfo());
+
+ PublisherDetail result = new PublisherDetail();
+
+ List<String> publisherIdList = body.getPublisherId();
+ for (String publisherId : publisherIdList) {
+ org.apache.juddi.model.Publisher modelPublisher = null;
+ try {
+ modelPublisher = em.find(org.apache.juddi.model.Publisher.class, publisherId);
+ } catch (ClassCastException e) {
+ }
+ if (modelPublisher == null) {
+ throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.PublisherNotFound", publisherId));
+ }
+
+ org.apache.juddi.api_v3.Publisher apiPublisher = new org.apache.juddi.api_v3.Publisher();
+
+ MappingModelToApi.mapPublisher(modelPublisher, apiPublisher);
+
+ result.getPublisher().add(apiPublisher);
+ }
+
+ tx.commit();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.GET_PUBLISHER_DETAIL,
+ QueryStatus.SUCCESS, procTime);
+ return result;
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.GET_PUBLISHER_DETAIL,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+
+ }
+
+ /**
+ * Retrieves all publisher from the persistence layer. This method is
+ * specific to jUDDI. Administrative privilege required. Use caution
+ * when calling, result set is not bound. If there are many publishers,
+ * it is possible to have a result set that is too large
+ *
+ * @param body
+ * @return PublisherDetail
+ * @throws DispositionReportFaultMessage
+ * @throws RemoteException
+ */
+ @SuppressWarnings("unchecked")
+ public PublisherDetail getAllPublisherDetail(GetAllPublisherDetail body)
+ throws DispositionReportFaultMessage, RemoteException {
+ long startTime = System.currentTimeMillis();
+ new ValidatePublisher(null).validateGetAllPublisherDetail(body);
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ this.getEntityPublisher(em, body.getAuthInfo());
+
+ PublisherDetail result = new PublisherDetail();
+
+ Query query = em.createQuery("SELECT p from Publisher as p");
+ List<Publisher> modelPublisherList = query.getResultList();
+
+ for (Publisher modelPublisher : modelPublisherList) {
+
+ org.apache.juddi.api_v3.Publisher apiPublisher = new org.apache.juddi.api_v3.Publisher();
+
+ MappingModelToApi.mapPublisher(modelPublisher, apiPublisher);
+
+ result.getPublisher().add(apiPublisher);
+ }
+
+ tx.commit();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.GET_ALL_PUBLISHER_DETAIL,
+ QueryStatus.SUCCESS, procTime);
+ return result;
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.GET_ALL_PUBLISHER_DETAIL,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+
+ /**
+ * Completely deletes a tModel from the persistence layer.
+ * Administrative privilege required. All entities that reference this
+ * tModel will no longer be able to use the tModel if jUDDI Option
+ * Enforce referential Integrity is enabled.<br>
+ * Required permission, you must be am administrator
+ * {@link Property#JUDDI_ENFORCE_REFERENTIAL_INTEGRITY}. In addition,
+ * tModels that are owned by another node via replication cannot be
+ * deleted using this method and will throw an exception
+ *
+ *
+ * @param body
+ * @throws DispositionReportFaultMessage
+ */
+ @Override
+ public void adminDeleteTModel(DeleteTModel body)
+ throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
+
+ new ValidatePublish(publisher).validateAdminDeleteTModel(em, body);
+
+ //TODO if referiental integrity is turned on, check to see if this is referenced anywhere and prevent the delete
+ List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
+ List<String> entityKeyList = body.getTModelKey();
+ for (String entityKey : entityKeyList) {
+ org.apache.juddi.model.Tmodel obj = em.find(org.apache.juddi.model.Tmodel.class, entityKey);
+
+ if (obj == null) {
+ throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.TModelNotFound", entityKey));
+ }
+ if (!obj.getNodeId().equals(getNode())) {
+ throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.TModelNodeOwner", entityKey + " this node " + getNode() + " owning node " + obj.getNodeId()));
+ }
+ em.remove(obj);
+ changes.add(UDDIPublicationImpl.getChangeRecord_deleteTModelDelete(entityKey, getNode(), df));
+
+ }
+
+ tx.commit();
+ for (ChangeRecord cr : changes) {
+ ReplicationNotifier.enqueue(cr);
+ }
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.ADMIN_DELETE_TMODEL,
+ QueryStatus.SUCCESS, procTime);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.ADMIN_DELETE_TMODEL,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+
+ /**
+ * Delete's a client's subscription information. This is typically used
+ * for server to server subscriptions Administrative privilege required.
+ *
+ * @param body
+ * @throws DispositionReportFaultMessage
+ * @throws RemoteException
+ */
+ public void deleteClientSubscriptionInfo(DeleteClientSubscriptionInfo body)
+ throws DispositionReportFaultMessage, RemoteException {
+ long startTime = System.currentTimeMillis();
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
+
+ new ValidateClientSubscriptionInfo(publisher).validateDeleteClientSubscriptionInfo(em, body);
+
+ List<String> entityKeyList = body.getSubscriptionKey();
+ for (String entityKey : entityKeyList) {
+ Object obj = em.find(org.apache.juddi.model.ClientSubscriptionInfo.class, entityKey);
+ em.remove(obj);
+ }
+
+ tx.commit();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.DELETE_CLIENT_SUB,
+ QueryStatus.SUCCESS, procTime);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.DELETE_CLIENT_SUB,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+
+ }
+
+ /**
+ * Adds client subscription information. This effectively links a server
+ * to serverr subscription to clerk Administrative privilege required.
+ *
+ * @param body
+ * @return ClientSubscriptionInfoDetail
+ * @throws DispositionReportFaultMessage
+ * @throws RemoteException
+ */
+ public ClientSubscriptionInfoDetail saveClientSubscriptionInfo(SaveClientSubscriptionInfo body)
+ throws DispositionReportFaultMessage, RemoteException {
+ long startTime = System.currentTimeMillis();
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
+
+ new ValidateClientSubscriptionInfo(publisher).validateSaveClientSubscriptionInfo(em, body);
+
+ ClientSubscriptionInfoDetail result = new ClientSubscriptionInfoDetail();
+
+ List<org.apache.juddi.api_v3.ClientSubscriptionInfo> apiClientSubscriptionInfoList = body.getClientSubscriptionInfo();
+ for (org.apache.juddi.api_v3.ClientSubscriptionInfo apiClientSubscriptionInfo : apiClientSubscriptionInfoList) {
+
+ org.apache.juddi.model.ClientSubscriptionInfo modelClientSubscriptionInfo = new org.apache.juddi.model.ClientSubscriptionInfo();
+
+ MappingApiToModel.mapClientSubscriptionInfo(apiClientSubscriptionInfo, modelClientSubscriptionInfo);
+
+ Object existingUddiEntity = em.find(modelClientSubscriptionInfo.getClass(), modelClientSubscriptionInfo.getSubscriptionKey());
+ if (existingUddiEntity != null) {
+ em.remove(existingUddiEntity);
+ }
+
+ em.persist(modelClientSubscriptionInfo);
+
+ result.getClientSubscriptionInfo().add(apiClientSubscriptionInfo);
+ }
+
+ tx.commit();
+
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.SAVE_CLIENT_SUB,
+ QueryStatus.SUCCESS, procTime);
+ return result;
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.SAVE_CLIENT_SUB,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+
+ /**
+ * Gets all client subscription information. This is used for server to
+ * server subscriptions Administrative privilege required.
+ *
+ * @param body
+ * @return ClientSubscriptionInfoDetail
+ * @throws DispositionReportFaultMessage
+ */
+ @SuppressWarnings("unchecked")
+ public ClientSubscriptionInfoDetail getAllClientSubscriptionInfoDetail(GetAllClientSubscriptionInfoDetail body)
+ throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+ new ValidateClientSubscriptionInfo(null).validateGetAllClientSubscriptionDetail(body);
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ this.getEntityPublisher(em, body.getAuthInfo());
+
+ ClientSubscriptionInfoDetail result = new ClientSubscriptionInfoDetail();
+
+ Query query = em.createQuery("SELECT cs from ClientSubscriptionInfo as cs");
+ List<org.apache.juddi.model.ClientSubscriptionInfo> modelClientSubscriptionInfoList = query.getResultList();
+
+ for (ClientSubscriptionInfo modelClientSubscriptionInfo : modelClientSubscriptionInfoList) {
+
+ org.apache.juddi.api_v3.ClientSubscriptionInfo apiClientSubscriptionInfo = new org.apache.juddi.api_v3.ClientSubscriptionInfo();
+
+ MappingModelToApi.mapClientSubscriptionInfo(modelClientSubscriptionInfo, apiClientSubscriptionInfo, em);
+
+ result.getClientSubscriptionInfo().add(apiClientSubscriptionInfo);
+ }
+
+ tx.commit();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.GET_ALL_CLIENT_SUB,
+ QueryStatus.SUCCESS, procTime);
+ return result;
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.GET_ALL_CLIENT_SUB,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+
+ }
+
+ /**
+ * Retrieves clientSubscriptionKey(s) from the persistence layer. This
+ * method is specific to jUDDI. Used for server to server subscriptions
+ * Administrative privilege required.
+ *
+ * @param body
+ * @return ClientSubscriptionInfoDetail
+ * @throws DispositionReportFaultMessage
+ */
+ public ClientSubscriptionInfoDetail getClientSubscriptionInfoDetail(GetClientSubscriptionInfoDetail body)
+ throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+ new ValidateClientSubscriptionInfo(null).validateGetClientSubscriptionInfoDetail(body);
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ this.getEntityPublisher(em, body.getAuthInfo());
+
+ ClientSubscriptionInfoDetail result = new ClientSubscriptionInfoDetail();
+
+ List<String> subscriptionKeyList = body.getClientSubscriptionKey();
+ for (String subscriptionKey : subscriptionKeyList) {
+
+ org.apache.juddi.model.ClientSubscriptionInfo modelClientSubscriptionInfo = null;
+
+ try {
+ modelClientSubscriptionInfo = em.find(org.apache.juddi.model.ClientSubscriptionInfo.class, subscriptionKey);
+ } catch (ClassCastException e) {
+ }
+ if (modelClientSubscriptionInfo == null) {
+ throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.SubscripKeyNotFound", subscriptionKey));
+ }
+
+ org.apache.juddi.api_v3.ClientSubscriptionInfo apiClientSubscriptionInfo = new org.apache.juddi.api_v3.ClientSubscriptionInfo();
+
+ MappingModelToApi.mapClientSubscriptionInfo(modelClientSubscriptionInfo, apiClientSubscriptionInfo, em);
+
+ result.getClientSubscriptionInfo().add(apiClientSubscriptionInfo);
+ }
+
+ tx.commit();
+
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.GET_CLIENT_SUB,
+ QueryStatus.SUCCESS, procTime);
+ return result;
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.GET_CLIENT_SUB,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+
+ }
+
+ /**
+ * Saves clerk(s) to the persistence layer. This method is specific to
+ * jUDDI. This is used for server to server subscriptions and for future
+ * use with replication. Administrative privilege required.
+ *
+ * @param body
+ * @return ClerkDetail
+ * @throws DispositionReportFaultMessage
+ */
+ @Override
+ public ClerkDetail saveClerk(SaveClerk body)
+ throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
+
+ new ValidateClerk(publisher).validateSaveClerk(em, body);
+
+ ClerkDetail result = new ClerkDetail();
+
+ List<org.apache.juddi.api_v3.Clerk> apiClerkList = body.getClerk();;
+ for (org.apache.juddi.api_v3.Clerk apiClerk : apiClerkList) {
+
+ org.apache.juddi.model.Clerk modelClerk = new org.apache.juddi.model.Clerk();
+
+ MappingApiToModel.mapClerk(apiClerk, modelClerk);
+ org.apache.juddi.model.Node node2 = em.find(org.apache.juddi.model.Node.class, apiClerk.getNode().getName());
+ if (node2 == null) {
+ //it doesn't exist yet
+ node2 = new Node();
+ MappingApiToModel.mapNode(apiClerk.getNode(), node2);
+ em.persist(node2);
+ }
+
+ modelClerk.setNode(node2.getName());
+ Object existingUddiEntity = em.find(modelClerk.getClass(), modelClerk.getClerkName());
+ if (existingUddiEntity != null) {
+
+ em.merge(modelClerk);
+ } else {
+ em.persist(modelClerk);
+ }
+
+ result.getClerk().add(apiClerk);
+ }
+
+ tx.commit();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.SAVE_CLERK,
+ QueryStatus.SUCCESS, procTime);
+ return result;
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.SAVE_CLERK,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+
+ /**
+ * Saves nodes(s) to the persistence layer. This method is specific to
+ * jUDDI. Administrative privilege required. This is used for server to
+ * server subscriptions and for future use with replication.
+ * Administrative privilege required.
+ *
+ * @param body
+ * @return NodeDetail
+ * @throws DispositionReportFaultMessage
+ */
+ public NodeDetail saveNode(SaveNode body)
+ throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
+
+ new ValidateNode(publisher).validateSaveNode(em, body);
+
+ NodeDetail result = new NodeDetail();
+
+ List<org.apache.juddi.api_v3.Node> apiNodeList = body.getNode();
+ for (org.apache.juddi.api_v3.Node apiNode : apiNodeList) {
+
+ org.apache.juddi.model.Node modelNode = new org.apache.juddi.model.Node();
+
+ MappingApiToModel.mapNode(apiNode, modelNode);
+
+ Object existingUddiEntity = em.find(modelNode.getClass(), modelNode.getName());
+ if (existingUddiEntity != null) {
+ em.merge(modelNode);
+ } else {
+ em.persist(modelNode);
+ }
+
+ result.getNode().add(apiNode);
+ }
+
+ tx.commit();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.SAVE_NODE,
+ QueryStatus.SUCCESS, procTime);
+ return result;
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.SAVE_NODE,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+
+ /**
+ * Instructs the registry to perform a synchronous subscription
+ * response.
+ *
+ * @param body
+ * @return SyncSubscriptionDetail
+ * @throws DispositionReportFaultMessage
+ * @throws RemoteException
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public SyncSubscriptionDetail invokeSyncSubscription(
+ SyncSubscription body) throws DispositionReportFaultMessage,
+ RemoteException {
+ long startTime = System.currentTimeMillis();
+ //validate
+ SyncSubscriptionDetail syncSubscriptionDetail = new SyncSubscriptionDetail();
+
+ Map<String, org.apache.juddi.api_v3.ClientSubscriptionInfo> clientSubscriptionInfoMap
+ = new HashMap<String, org.apache.juddi.api_v3.ClientSubscriptionInfo>();
+ //find the clerks to go with these subscriptions
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ this.getEntityPublisher(em, body.getAuthInfo());
+ for (GetSubscriptionResults getSubscriptionResult : body.getGetSubscriptionResultsList()) {
+ String subscriptionKey = getSubscriptionResult.getSubscriptionKey();
+ org.apache.juddi.model.ClientSubscriptionInfo modelClientSubscriptionInfo = null;
+
+ try {
+ modelClientSubscriptionInfo = em.find(org.apache.juddi.model.ClientSubscriptionInfo.class, subscriptionKey);
+ } catch (ClassCastException e) {
+ }
+ if (modelClientSubscriptionInfo == null) {
+ throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.SubscripKeyNotFound", subscriptionKey));
+ }
+ org.apache.juddi.api_v3.ClientSubscriptionInfo apiClientSubscriptionInfo = new org.apache.juddi.api_v3.ClientSubscriptionInfo();
+ MappingModelToApi.mapClientSubscriptionInfo(modelClientSubscriptionInfo, apiClientSubscriptionInfo, em);
+ clientSubscriptionInfoMap.put(apiClientSubscriptionInfo.getSubscriptionKey(), apiClientSubscriptionInfo);
+ }
+
+ tx.commit();
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.INVOKE_SYNCSUB,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+
+ for (GetSubscriptionResults getSubscriptionResult : body.getGetSubscriptionResultsList()) {
+ try {
+ String subscriptionKey = getSubscriptionResult.getSubscriptionKey();
+ Clerk fromClerk = clientSubscriptionInfoMap.get(subscriptionKey).getFromClerk();
+ Clerk toClerk = clientSubscriptionInfoMap.get(subscriptionKey).getToClerk();
+ String clazz = fromClerk.getNode().getProxyTransport();
+ Class<?> transportClass = ClassUtil.forName(clazz, this.getClass());
+ Transport transport = (Transport) transportClass.getConstructor(String.class
+ ).newInstance(fromClerk.getNode().getName());
+ UDDISubscriptionPortType subscriptionService = transport.getUDDISubscriptionService(fromClerk.getNode().getSubscriptionUrl());
+ SubscriptionResultsList list = subscriptionService.getSubscriptionResults(getSubscriptionResult);
+
+ JAXBContext context = JAXBContext.newInstance(list.getClass());
+ Marshaller marshaller = context.createMarshaller();
+ StringWriter sw = new StringWriter();
+
+ marshaller.marshal(list, sw);
+
+ log.info(
+ "Notification received by UDDISubscriptionListenerService : " + sw.toString());
+
+ NotificationList<String> nl = NotificationList.getInstance();
+
+ nl.getNotifications()
+ .add(sw.toString());
+
+ //update the registry with the notification list.
+ XRegisterHelper.handle(fromClerk, toClerk, list);
+
+ syncSubscriptionDetail.getSubscriptionResultsList()
+ .add(list);
+ } catch (Exception ce) {
+ log.error(ce.getMessage(), ce);
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.SAVE_NODE,
+ QueryStatus.FAILED, procTime);
+ if (ce instanceof DispositionReportFaultMessage) {
+ throw (DispositionReportFaultMessage) ce;
+ }
+ if (ce instanceof RemoteException) {
+ DispositionReportFaultMessage x = new FatalErrorException(new ErrorMessage("errors.subscriptionnotifier.client", ce.getMessage()));
+ throw x;
+ }
+ }
+ }
+ //for now sending a clean object back
+
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.INVOKE_SYNCSUB,
+ QueryStatus.SUCCESS, procTime);
+ return syncSubscriptionDetail;
+ }
+
+ @Override
+ public NodeList getAllNodes(String authInfo) throws DispositionReportFaultMessage, RemoteException {
+ long startTime = System.currentTimeMillis();
+ NodeList r = new NodeList();
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ UddiEntityPublisher publisher = this.getEntityPublisher(em, authInfo);
+
+ new ValidatePublish(publisher).validateGetAllNodes();
+
+ StringBuilder sql = new StringBuilder();
+ sql.append("select distinct c from Node c ");
+ sql.toString();
+ Query qry = em.createQuery(sql.toString());
+ List<org.apache.juddi.model.Node> resultList = qry.getResultList();
+ for (int i = 0; i < resultList.size(); i++) {
+ org.apache.juddi.api_v3.Node api = new org.apache.juddi.api_v3.Node();
+ MappingModelToApi.mapNode(resultList.get(i), api);
+ r.getNode().add(api);
+
+ }
+
+ tx.commit();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.GET_ALL_NODES,
+ QueryStatus.SUCCESS, procTime);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.GET_ALL_NODES,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+
+ return r;
+ }
+
+ @Override
+ public ClerkList getAllClerks(String authInfo) throws DispositionReportFaultMessage, RemoteException {
+ long startTime = System.currentTimeMillis();
+ ClerkList ret = new ClerkList();
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ UddiEntityPublisher publisher = this.getEntityPublisher(em, authInfo);
+
+ new ValidatePublish(publisher).validateGetAllNodes();
+
+ StringBuilder sql = new StringBuilder();
+ sql.append("select distinct c from Clerk c ");
+ sql.toString();
+ Query qry = em.createQuery(sql.toString());
+ List<org.apache.juddi.model.Clerk> resultList = qry.getResultList();
+ for (int i = 0; i < resultList.size(); i++) {
+ Clerk api = new Clerk();
+ MappingModelToApi.mapClerk(resultList.get(i), api, em);
+ ret.getClerk().add(api);
+
+ }
+ tx.commit();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.GET_ALL_CLERKS,
+ QueryStatus.SUCCESS, procTime);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.GET_ALL_CLERKS,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+
+ return ret;
+
+ }
+
+ @Override
+ public void deleteNode(DeleteNode req) throws DispositionReportFaultMessage, RemoteException {
+ long startTime = System.currentTimeMillis();
+ boolean found = false;
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+ //TODO if the given node is in the replication config, prevent deletion
+ UddiEntityPublisher publisher = this.getEntityPublisher(em, req.getAuthInfo());
+ new ValidatePublish(publisher).validateDeleteNode(em, req, getReplicationNodes(req.getAuthInfo()));
+
+ org.apache.juddi.model.Node existingUddiEntity = em.find(org.apache.juddi.model.Node.class, req.getNodeID());
+ if (existingUddiEntity != null) {
+
+ //cascade delete all clerks tied to this node, confirm that it works
+ Query createQuery = em.createQuery("delete from Clerk c where c.node = :nodename");
+ createQuery.setParameter("nodename", req.getNodeID());
+ createQuery.executeUpdate();
+
+ em.remove(existingUddiEntity);
+ found = true;
+ } else {
+ throw new InvalidKeyPassedException(new ErrorMessage("errors.deleteNode.NotFound"));
+ }
+
+ tx.commit();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.DELETE_NODE,
+ QueryStatus.SUCCESS, procTime);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.DELETE_NODE,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+
+ if (!found) {
+
+ throw new InvalidKeyPassedException(new ErrorMessage("errors.deleteNode.NotFound", req.getNodeID()));
+ }
+ }
+
+ @Override
+ public void deleteClerk(DeleteClerk req) throws DispositionReportFaultMessage, RemoteException {
+ long startTime = System.currentTimeMillis();
+ boolean found = false;
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ UddiEntityPublisher publisher = this.getEntityPublisher(em, req.getAuthInfo());
+
+ new ValidatePublish(publisher).validateDeleteClerk(em, req);
+
+ org.apache.juddi.model.Clerk existingUddiEntity = em.find(org.apache.juddi.model.Clerk.class, req.getClerkID());
+ if (existingUddiEntity
+ != null) {
+ em.remove(existingUddiEntity);
+ found = true;
+ }
+
+ tx.commit();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.DELETE_CLERK,
+ QueryStatus.SUCCESS, procTime);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.DELETE_CLERK,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+
+ if (!found) {
+ throw new InvalidKeyPassedException(new ErrorMessage("errors.deleteClerk.NotFound"));
+ }
+
+ }
+
+ /*
+ * enables tmodel owners to setup valid values for tmodel instance infos
+ * to use?
+ *
+ * @param authInfo
+ * @param values
+ * @return
+ * @throws DispositionReportFaultMessage
+
+ @Override
+ public DispositionReport setAllValidValues(String authInfo, List<ValidValues> values) throws DispositionReportFaultMessage, RemoteException {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ /* EntityManager em = PersistenceManager.getEntityManager();
+ UddiEntityPublisher entityPublisher = getEntityPublisher(em, authInfo);
+
+ new ValidateValueSetValidation(entityPublisher).validateSetAllValidValues(values);
+
+ EntityTransaction tx = em.getTransaction();
+ try {
+
+ // is this tModel used anywhere?, if so, validate all instances against the new rule?
+ tx.begin();
+
+ //each tmodel/value set
+ for (int i = 0; i < values.size(); i++) {
+ //remove any existing references to the key
+ ValueSetValues find = em.find(ValueSetValues.class, values.get(i).getTModekKey());
+
+ if (find != null) {
+ find.setValidatorClass(values.get(i).getValidationClass());
+ em.persist(find);
+
+ } else {
+ org.apache.juddi.model.ValueSetValues vv = new ValueSetValues();
+ vv.setTModelKey(values.get(i).getTModekKey());
+ vv.setValidatorClass(values.get(i).getValidationClass());
+ em.persist(vv);
+ }
+ }
+
+ tx.commit();
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ DispositionReport r = new DispositionReport();
+ r.getResult().add(new Result());
+ return r;
+ }*/
+ @Override
+ public void adminDeleteSubscription(String authInfo, List<String> subscriptionKey) throws DispositionReportFaultMessage, RemoteException {
+
+ long startTime = System.currentTimeMillis();
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ UddiEntityPublisher requestor = this.getEntityPublisher(em, authInfo);
+ if (!((Publisher) requestor).isAdmin()) {
+ throw new UserMismatchException(new ErrorMessage("errors.AdminReqd"));
+ }
+ //new ValidateSubscription(publisher).validateDeleteSubscription(em, body);
+ List<TemporaryMailContainer> notifications = new ArrayList<TemporaryMailContainer>();
+ List<String> subscriptionKeyList = subscriptionKey;
+ for (String key : subscriptionKeyList) {
+ if (key != null && key.length() > 0) {
+ org.apache.juddi.model.Subscription obj = em.find(org.apache.juddi.model.Subscription.class, key);
+ Publisher publisher = em.find(Publisher.class, obj.getAuthorizedName());
+ notifications.add(new TemporaryMailContainer(obj, publisher, (Publisher) requestor));
+ em.remove(obj);
+ }
+ }
+
+ tx.commit();
+ for (TemporaryMailContainer t : notifications) {
+ USERFRIENDLYSMTPNotifier.notifySubscriptionDeleted(t);
+ }
+ notifications.clear();
+ notifications = null;
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.ADMIN_DELETE_SUB,
+ QueryStatus.SUCCESS, procTime);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.ADMIN_DELETE_SUB,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+
+ }
+
+ @Override
+ public DispositionReport adminSaveBusiness(String authInfo, List<AdminSaveBusinessWrapper> values) throws DispositionReportFaultMessage, RemoteException {
+ long startTime = System.currentTimeMillis();
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+ UddiEntityPublisher requestor = this.getEntityPublisher(em, authInfo);
+ if (!((Publisher) requestor).isAdmin()) {
+ throw new UserMismatchException(new ErrorMessage("errors.AdminReqd"));
+ }
+
+ for (int i = 0; i < values.size(); i++) {
+ //impersonate the user
+ AuthToken authToken = sec.getAuthToken(values.get(i).getPublisherID());
+
+ SaveBusiness stm = new SaveBusiness();
+
+ stm.setAuthInfo(authToken.getAuthInfo());
+ stm.getBusinessEntity().addAll(values.get(i).getBusinessEntity());
+ pub.saveBusiness(stm);
+ }
+
+ tx.commit();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.ADMIN_SAVE_BUSINESS,
+ QueryStatus.SUCCESS, procTime);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.ADMIN_SAVE_BUSINESS,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+
+ DispositionReport r = new DispositionReport();
+ return r;
+
+ }
+
+ @Override
+ public DispositionReport adminSaveTModel(String authInfo, List<AdminSaveTModelWrapper> values) throws DispositionReportFaultMessage, RemoteException {
+ long startTime = System.currentTimeMillis();
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+ UddiEntityPublisher requestor = this.getEntityPublisher(em, authInfo);
+ if (!((Publisher) requestor).isAdmin()) {
+ throw new UserMismatchException(new ErrorMessage("errors.AdminReqd"));
+ }
+
+ for (int i = 0; i < values.size(); i++) {
+ //impersonate the user
+ AuthToken authToken = sec.getAuthToken(values.get(i).getPublisherID());
+ SaveTModel stm = new SaveTModel();
+ stm.setAuthInfo(authToken.getAuthInfo());
+ stm.getTModel().addAll(values.get(i).getTModel());
+ pub.saveTModel(stm);
+ }
+ tx.commit();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.ADMIN_SAVE_TMODEL,
+ QueryStatus.SUCCESS, procTime);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.ADMIN_SAVE_TMODEL,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+
+ DispositionReport r = new DispositionReport();
+ return r;
+ }
+
+ @Override
+ public List<SubscriptionWrapper> getAllClientSubscriptionInfo(String authInfo) throws DispositionReportFaultMessage, RemoteException {
+ long startTime = System.currentTimeMillis();
+
+ List<SubscriptionWrapper> r = new ArrayList<SubscriptionWrapper>();
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ UddiEntityPublisher publisher = this.getEntityPublisher(em, authInfo);
+ if (!((Publisher) publisher).isAdmin()) {
+ throw new UserMismatchException(new ErrorMessage("errors.AdminReqd"));
+ }
+
+ StringBuilder sql = new StringBuilder();
+ sql.append("select distinct c from Subscription c ");
+ Query qry = em.createQuery(sql.toString());
+ List<org.apache.juddi.model.Subscription> resultList = qry.getResultList();
+ for (int i = 0; i < resultList.size(); i++) {
+ Subscription sub = new Subscription();
+ MappingModelToApi.mapSubscription(resultList.get(i), sub);
+ SubscriptionWrapper x = new SubscriptionWrapper();
+ x.getSubscription().add(sub);
+ x.setPublisherIdOrUsername(resultList.get(i).getAuthorizedName());
+ r.add(x);
+ }
+
+ tx.commit();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.GET_ALL_CLIENT_SUB,
+ QueryStatus.SUCCESS, procTime);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.GET_ALL_CLIENT_SUB,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+
+ return r;
+ }
+
+ @Override
+ public synchronized DispositionReport setReplicationNodes(String authInfo, org.uddi.repl_v3.ReplicationConfiguration replicationConfiguration) throws DispositionReportFaultMessage, RemoteException {
+ long startTime = System.currentTimeMillis();
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ org.uddi.repl_v3.ReplicationConfiguration oldConfig = null;
+ UddiEntityPublisher publisher = this.getEntityPublisher(em, authInfo);
+ if (!((Publisher) publisher).isAdmin()) {
+ throw new UserMismatchException(new ErrorMessage("errors.AdminReqd"));
+ }
+ new ValidateReplication(publisher).validateSetReplicationNodes(replicationConfiguration, em, getNode(), AppConfig.getConfiguration());
+
+ org.apache.juddi.model.ReplicationConfiguration model = null;
+ logger.info(publisher.getAuthorizedName() + " is setting the replication config from " + getRequestorsIPAddress());// + " " + sw.toString());
+ try {
+ model = (ReplicationConfiguration) em.createQuery("select c FROM ReplicationConfiguration c order by c.serialNumber desc").getSingleResult();
+ } catch (Exception ex) {
+ }
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddkkmmZ");
+ if (model == null) {
+ //this is a brand new configuration and we didn't have one before
+ model = new ReplicationConfiguration();
+ MappingApiToModel.mapReplicationConfiguration(replicationConfiguration, model, em);
+ model.setSerialNumber(System.currentTimeMillis());
+ model.setTimeOfConfigurationUpdate(sdf.format(new Date()));
+ em.persist(model);
+ //if (newReplicationNode(model)){
+ //tell the replication notifier to start transfering with
+ //the first change record
+ //}
+
+ } else {
+ //a config exists, remove it, add the new one
+ //spec doesn't appear to mention if recording a change history on the config is required
+ //assuming we'll keep it for now, might be useful later.
+ //em.remove(model);
+ oldConfig = new org.uddi.repl_v3.ReplicationConfiguration();
+ MappingModelToApi.mapReplicationConfiguration(model, oldConfig);
+
+ ReplicationConfiguration model2 = new ReplicationConfiguration();
+ MappingApiToModel.mapReplicationConfiguration(replicationConfiguration, model2, em);
+ model2.setSerialNumber(System.currentTimeMillis());
+
+ model2.setTimeOfConfigurationUpdate(sdf.format(new Date()));
+ em.persist(model2);
+
+ }
+
+ tx.commit();
+ UDDIReplicationImpl.notifyConfigurationChange(oldConfig, replicationConfiguration, this);
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.SET_REPLICATION_NODES,
+ QueryStatus.SUCCESS, procTime);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.SET_REPLICATION_NODES,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+ } catch (Exception ex) {
+ logger.error(ex, ex);
+ throw new FatalErrorException(new ErrorMessage("E_fatalError", ex.getMessage()));
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ DispositionReport d = new DispositionReport();
+ Result res = new Result();
+
+ d.getResult().add(res);
+ return d;
+ }
+
+ @Override
+ public synchronized org.uddi.repl_v3.ReplicationConfiguration getReplicationNodes(String authInfo) throws DispositionReportFaultMessage, RemoteException {
+ long startTime = System.currentTimeMillis();
+ org.uddi.repl_v3.ReplicationConfiguration r = new org.uddi.repl_v3.ReplicationConfiguration();
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ UddiEntityPublisher publisher = this.getEntityPublisher(em, authInfo);
+ if (!((Publisher) publisher).isAdmin()) {
+ throw new UserMismatchException(new ErrorMessage("errors.AdminReqd"));
+ }
+
+ StringBuilder sql = new StringBuilder();
+ sql.append("select c from ReplicationConfiguration c order by c.serialNumber desc");
+ //sql.toString();
+ Query qry = em.createQuery(sql.toString());
+ qry.setMaxResults(1);
+
+ org.apache.juddi.model.ReplicationConfiguration resultList = (org.apache.juddi.model.ReplicationConfiguration) qry.getSingleResult();
+ MappingModelToApi.mapReplicationConfiguration(resultList, r);
+ tx.commit();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.GET_ALL_NODES,
+ QueryStatus.SUCCESS, procTime);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.GET_ALL_NODES,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+ } catch (Exception ex) {
+ //possible that there is no config to return
+ logger.debug("Error caught, is there a replication config is avaiable? Returning a default config (no replication): ", ex);
+
+ r.setCommunicationGraph(new CommunicationGraph());
+ Operator op = new Operator();
+ op.setOperatorNodeID(getNode());
+ op.setSoapReplicationURL(baseUrlSSL + "replication/services/replication");
+
+ op.getContact().add(new Contact());
+ op.getContact().get(0).getPersonName().add(new PersonName("Unknown", null));
+ op.setOperatorStatus(OperatorStatusType.NORMAL);
+
+ r.getOperator().add(op);
+ r.getCommunicationGraph().getNode().add(getNode());
+ r.getCommunicationGraph().getControlledMessage().add("*");
+ long procTime = System.currentTimeMillis() - startTime;
+ r.setSerialNumber(0);
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddkkmmZ");
+ r.setTimeOfConfigurationUpdate(sdf.format(new Date()));
+ r.setRegistryContact(new org.uddi.repl_v3.ReplicationConfiguration.RegistryContact());
+ try {
+ // pull from root business
+ if (!tx.isActive()) {
+ tx = em.getTransaction();
+ }
+
+ BusinessEntity rootbiz = em.find(BusinessEntity.class, AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ROOT_BUSINESS));
+ if (rootbiz != null) {
+
+ for (int i = 0; i < rootbiz.getContacts().size(); i++) {
+ Contact c = new Contact();
+ MappingModelToApi.mapContact(rootbiz.getContacts().get(i), c);
+ r.getRegistryContact().setContact(c);
+ break;
+ }
+
+ }
+ tx.rollback();
+
+ } catch (Exception ex1) {
+ logger.warn("unexpected error", ex1);
+ }
+ if (r.getRegistryContact().getContact() == null) {
+ r.getRegistryContact().setContact(new Contact());
+ r.getRegistryContact().getContact().getPersonName().add(new PersonName("Unknown", null));
+ }
+ serviceCounter.update(JUDDIQuery.GET_REPLICATION_NODES,
+ QueryStatus.SUCCESS, procTime);
+
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+
+ r.setMaximumTimeToGetChanges(BigInteger.ONE);
+ r.setMaximumTimeToSyncRegistry(BigInteger.ONE);
+ //StringWriter sw = new StringWriter();
+ //JAXB.marshal(r, sw);
+ //logger.info("dumping returned replication config " + sw.toString());
+ return r;
+ }
+
+ static UDDISubscriptionImpl sub = new UDDISubscriptionImpl();
+ static UDDISecurityImpl sec = new UDDISecurityImpl();
+ static UDDIPublicationImpl pub = new UDDIPublicationImpl();
+
+ @Override
+ public void adminSaveSubscription(String authInfo, String publisherOrUsername, Holder<List<Subscription>> subscriptions) throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+ UddiEntityPublisher requestor = this.getEntityPublisher(em, authInfo);
+ if (!((Publisher) requestor).isAdmin()) {
+ throw new UserMismatchException(new ErrorMessage("errors.AdminReqd"));
+ }
+ //impersonate the user
+ AuthToken authToken = sec.getAuthToken(publisherOrUsername);
+ sub.saveSubscription(authToken.getAuthInfo(), subscriptions);
+ tx.commit();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.ADMIN_SAVE_SUB,
+ QueryStatus.SUCCESS, procTime);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.ADMIN_SAVE_SUB,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+
+ }
+
+ /**
+ * {@inheritDoc }
+ *
+ * @param body
+ * @return item history or null if not found
+ * @throws DispositionReportFaultMessage
+ * @throws RemoteException
+ */
+ @Override
+ public GetEntityHistoryMessageResponse getEntityHistory(GetEntityHistoryMessageRequest body) throws DispositionReportFaultMessage, RemoteException {
+ long startTime = System.currentTimeMillis();
+ if (body == null) {
+ throw new InvalidValueException(new ErrorMessage("errors.NullInput"));
+ }
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+ UddiEntityPublisher requestor = this.getEntityPublisher(em, body.getAuthInfo());
+ if (!((Publisher) requestor).isAdmin()) {
+ throw new UserMismatchException(new ErrorMessage("errors.AdminReqd"));
+ }
+ if (body.getMaxRecords() <= 0) {
+ body.setMaxRecords(20);
+ }
+ if (body.getOffset() < 0) {
+ body.setOffset(0);
+ }
+ Query createQuery = em.createQuery("select m from ChangeRecord m where m.entityKey = :key order by m.id DESC");
+ createQuery.setMaxResults((int) body.getMaxRecords());
+ createQuery.setParameter("key", body.getEntityKey());
+ createQuery.setFirstResult((int) body.getOffset());
+ List<ChangeRecord> resultList = createQuery.getResultList();
+ GetEntityHistoryMessageResponse res = new GetEntityHistoryMessageResponse();
+ res.setChangeRecords(new ChangeRecords());
+ for (ChangeRecord cr : resultList) {
+ res.getChangeRecords().getChangeRecord().add(MappingModelToApi.mapChangeRecord(cr));
+ }
+
+ tx.rollback();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.ADMIN_GET_HISTORY,
+ QueryStatus.SUCCESS, procTime);
+ return res;
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.ADMIN_GET_HISTORY,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+
+ /**
+ * {@inheritDoc }
+ *
+ * @param body
+ * @return
+ * @throws DispositionReportFaultMessage
+ * @throws RemoteException
+ */
+ @Override
+ public GetFailedReplicationChangeRecordsMessageResponse getFailedReplicationChangeRecords(
+ GetFailedReplicationChangeRecordsMessageRequest body)
+ throws DispositionReportFaultMessage, RemoteException {
+ //public GetFailedReplicationChangeRecordsMessageResponse getFailedReplicationChangeRecords(GetFailedReplicationChangeRecordsMessageRequest body) throws DispositionReportFaultMessage, RemoteException {
+ long startTime = System.currentTimeMillis();
+ if (body == null) {
+ throw new InvalidValueException(new ErrorMessage("errors.NullInput"));
+ }
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+ UddiEntityPublisher requestor = this.getEntityPublisher(em, body.getAuthInfo());
+ if (!((Publisher) requestor).isAdmin()) {
+ throw new UserMismatchException(new ErrorMessage("errors.AdminReqd"));
+ }
+ if (body.getMaxRecords() <= 0) {
+ body.setMaxRecords(20);
+ }
+ if (body.getOffset() < 0) {
+ body.setOffset(0);
+ }
+ Query createQuery = em.createQuery("select m from ChangeRecord m where m.isAppliedLocally=false order by m.id DESC ");
+ createQuery.setMaxResults((int) body.getMaxRecords());
+ createQuery.setFirstResult((int) body.getOffset());
+ List<ChangeRecord> resultList = createQuery.getResultList();
+ GetFailedReplicationChangeRecordsMessageResponse res = new GetFailedReplicationChangeRecordsMessageResponse();
+ res.setChangeRecords(new ChangeRecords());
+ for (ChangeRecord cr : resultList) {
+ res.getChangeRecords().getChangeRecord().add(MappingModelToApi.mapChangeRecord(cr));
+ }
+
+ tx.rollback();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.ADMIN_GET_FAILED_CRS,
+ QueryStatus.SUCCESS, procTime);
+ return res;
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(JUDDIQuery.ADMIN_GET_FAILED_CRS,
+ QueryStatus.FAILED, procTime);
+ throw drfm;
+
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+}
diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/PublicationHelper.java b/juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/PublicationHelper.java
similarity index 97%
rename from juddi-core/src/main/java/org/apache/juddi/api/impl/PublicationHelper.java
rename to juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/PublicationHelper.java
index d2589abb0..aa0c48c22 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/PublicationHelper.java
+++ b/juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/PublicationHelper.java
@@ -1,62 +1,62 @@
-/*
- * Copyright 2001-2008 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.juddi.api.impl;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.persistence.EntityManager;
-
-import org.apache.juddi.mapping.MappingModelToApi;
-import org.apache.juddi.model.UddiEntityPublisher;
-import org.apache.juddi.query.FindBusinessByPublisherQuery;
-import org.apache.juddi.query.FindPublisherAssertionByBusinessQuery;
-import org.uddi.api_v3.AssertionStatusItem;
-import org.uddi.api_v3.CompletionStatus;
-import org.uddi.v3_service.DispositionReportFaultMessage;
-
-/**
- * Used to factor out publication functionality that is used in more than one spot.
- *
- * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
- */
-public class PublicationHelper {
-
- public static List<AssertionStatusItem> getAssertionStatusItemList(UddiEntityPublisher publisher, CompletionStatus completionStatus, EntityManager em) throws DispositionReportFaultMessage {
- List<org.uddi.api_v3.AssertionStatusItem> result = new ArrayList<org.uddi.api_v3.AssertionStatusItem>(0);
-
- List<?> businessKeysFound = null;
- businessKeysFound = FindBusinessByPublisherQuery.select(em, null, publisher, businessKeysFound);
-
- List<org.apache.juddi.model.PublisherAssertion> pubAssertionList = FindPublisherAssertionByBusinessQuery.select(em, businessKeysFound, completionStatus);
- if (pubAssertionList==null)
- return result;
- for(org.apache.juddi.model.PublisherAssertion modelPubAssertion : pubAssertionList) {
- org.uddi.api_v3.AssertionStatusItem apiAssertionStatusItem = new org.uddi.api_v3.AssertionStatusItem();
-
- MappingModelToApi.mapAssertionStatusItem(modelPubAssertion, apiAssertionStatusItem, businessKeysFound);
-
- result.add(apiAssertionStatusItem);
- }
-
- return result;
- }
-
-
-
-}
+/*
+ * Copyright 2001-2008 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.juddi.api.impl;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+
+import org.apache.juddi.mapping.MappingModelToApi;
+import org.apache.juddi.model.UddiEntityPublisher;
+import org.apache.juddi.query.FindBusinessByPublisherQuery;
+import org.apache.juddi.query.FindPublisherAssertionByBusinessQuery;
+import org.uddi.api_v3.AssertionStatusItem;
+import org.uddi.api_v3.CompletionStatus;
+import org.uddi.v3_service.DispositionReportFaultMessage;
+
+/**
+ * Used to factor out publication functionality that is used in more than one spot.
+ *
+ * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
+ */
+public class PublicationHelper {
+
+ public static List<AssertionStatusItem> getAssertionStatusItemList(UddiEntityPublisher publisher, CompletionStatus completionStatus, EntityManager em) throws DispositionReportFaultMessage {
+ List<org.uddi.api_v3.AssertionStatusItem> result = new ArrayList<org.uddi.api_v3.AssertionStatusItem>(0);
+
+ List<?> businessKeysFound = null;
+ businessKeysFound = FindBusinessByPublisherQuery.select(em, null, publisher, businessKeysFound);
+
+ List<org.apache.juddi.model.PublisherAssertion> pubAssertionList = FindPublisherAssertionByBusinessQuery.select(em, businessKeysFound, completionStatus);
+ if (pubAssertionList==null)
+ return result;
+ for(org.apache.juddi.model.PublisherAssertion modelPubAssertion : pubAssertionList) {
+ org.uddi.api_v3.AssertionStatusItem apiAssertionStatusItem = new org.uddi.api_v3.AssertionStatusItem();
+
+ MappingModelToApi.mapAssertionStatusItem(modelPubAssertion, apiAssertionStatusItem, businessKeysFound);
+
+ result.add(apiAssertionStatusItem);
+ }
+
+ return result;
+ }
+
+
+
+}
diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/ServiceCounterLifecycleResource.java b/juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/ServiceCounterLifecycleResource.java
similarity index 100%
rename from juddi-core/src/main/java/org/apache/juddi/api/impl/ServiceCounterLifecycleResource.java
rename to juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/ServiceCounterLifecycleResource.java
diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDICustodyTransferImpl.java b/juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/UDDICustodyTransferImpl.java
similarity index 98%
rename from juddi-core/src/main/java/org/apache/juddi/api/impl/UDDICustodyTransferImpl.java
rename to juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/UDDICustodyTransferImpl.java
index bec809a07..b8919330e 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDICustodyTransferImpl.java
+++ b/juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/UDDICustodyTransferImpl.java
@@ -1,471 +1,471 @@
-/*
- * Copyright 2001-2008 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.juddi.api.impl;
-
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.List;
-import java.util.UUID;
-import java.util.Vector;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.jws.WebService;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityTransaction;
-import javax.persistence.Query;
-import javax.xml.datatype.DatatypeConfigurationException;
-import javax.xml.datatype.DatatypeFactory;
-import javax.xml.datatype.XMLGregorianCalendar;
-import javax.xml.ws.BindingProvider;
-import javax.xml.ws.Holder;
-
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.juddi.api.util.CustodyTransferQuery;
-import org.apache.juddi.api.util.QueryStatus;
-import org.apache.juddi.config.AppConfig;
-import org.apache.juddi.config.PersistenceManager;
-import org.apache.juddi.config.Property;
-import org.apache.juddi.mapping.MappingApiToModel;
-import org.apache.juddi.mapping.MappingModelToApi;
-import org.apache.juddi.model.BindingTemplate;
-import org.apache.juddi.model.BusinessEntity;
-import org.apache.juddi.model.BusinessService;
-import org.apache.juddi.model.Operator;
-import org.apache.juddi.model.Tmodel;
-import org.apache.juddi.model.TransferTokenKey;
-import org.apache.juddi.model.UddiEntity;
-import org.apache.juddi.model.UddiEntityPublisher;
-import org.apache.juddi.query.util.DynamicQuery;
-import org.apache.juddi.replication.ReplicationNotifier;
-import org.apache.juddi.v3.client.UDDIService;
-import org.apache.juddi.v3.error.ErrorMessage;
-import org.apache.juddi.v3.error.FatalErrorException;
-import org.apache.juddi.v3.error.InvalidValueException;
-import org.apache.juddi.v3.error.TransferNotAllowedException;
-import org.apache.juddi.validation.ValidateCustodyTransfer;
-import org.uddi.api_v3.OperationalInfo;
-import org.uddi.custody_v3.DiscardTransferToken;
-import org.uddi.custody_v3.KeyBag;
-import org.uddi.custody_v3.TransferEntities;
-import org.uddi.custody_v3.TransferOperationalInfo;
-import org.uddi.repl_v3.ChangeRecord;
-import org.uddi.repl_v3.ChangeRecordIDType;
-import org.uddi.repl_v3.ChangeRecordNewData;
-import org.uddi.repl_v3.TransferCustody;
-import org.uddi.v3_service.DispositionReportFaultMessage;
-import org.uddi.v3_service.UDDICustodyTransferPortType;
-import org.uddi.v3_service.UDDIReplicationPortType;
-
-/**
- * This implements the UDDI v3 Custody Transfer API web service
- *
- */
-@WebService(serviceName = "UDDICustodyTransferService",
- endpointInterface = "org.uddi.v3_service.UDDICustodyTransferPortType",
- targetNamespace = "urn:uddi-org:v3_service")
-public class UDDICustodyTransferImpl extends AuthenticatedService implements UDDICustodyTransferPortType {
-
- public static final String TRANSFER_TOKEN_PREFIX = "transfertoken:";
- public static final int DEFAULT_TRANSFEREXPIRATION_DAYS = 3;
-
- private static Log logger = LogFactory.getLog(UDDICustodyTransferImpl.class);
-
- private static DatatypeFactory df = null;
- private UDDIServiceCounter serviceCounter;
-
- public UDDICustodyTransferImpl() {
- super();
- serviceCounter = ServiceCounterLifecycleResource.getServiceCounter(this.getClass());
- init();
- }
-
- private static synchronized void init() {
- if (df == null) {
- try {
- df = DatatypeFactory.newInstance();
- } catch (DatatypeConfigurationException ex) {
- Logger.getLogger(UDDICustodyTransferImpl.class.getName()).log(Level.SEVERE, null, ex);
- }
- }
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public void discardTransferToken(DiscardTransferToken body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
-
- new ValidateCustodyTransfer(publisher).validateDiscardTransferToken(em, body);
-
- org.uddi.custody_v3.TransferToken apiTransferToken = body.getTransferToken();
- if (apiTransferToken != null) {
- String transferTokenId;
- try {
- transferTokenId = new String(apiTransferToken.getOpaqueToken(), UTF8);
- } catch (UnsupportedEncodingException ex) {
- throw new InvalidValueException(new ErrorMessage("errors.stringEncoding"));
- }
- org.apache.juddi.model.TransferToken modelTransferToken = em.find(org.apache.juddi.model.TransferToken.class, transferTokenId);
- if (modelTransferToken != null) {
- em.remove(modelTransferToken);
- }
- }
-
- KeyBag keyBag = body.getKeyBag();
- if (keyBag != null) {
- List<String> keyList = keyBag.getKey();
- Vector<DynamicQuery.Parameter> params = new Vector<DynamicQuery.Parameter>(0);
- for (String key : keyList) {
- // Creating parameters for key-checking query
- DynamicQuery.Parameter param = new DynamicQuery.Parameter("UPPER(ttk.entityKey)",
- key.toUpperCase(),
- DynamicQuery.PREDICATE_EQUALS);
-
- params.add(param);
- }
-
- // Find the associated transfer tokens and remove them.
- DynamicQuery getTokensQry = new DynamicQuery();
- getTokensQry.append("select distinct ttk.transferToken from TransferTokenKey ttk").pad();
- getTokensQry.WHERE().pad().appendGroupedOr(params.toArray(new DynamicQuery.Parameter[0]));
-
- Query qry = getTokensQry.buildJPAQuery(em);
- List<org.apache.juddi.model.TransferToken> tokensToDelete = qry.getResultList();
- if (tokensToDelete != null && tokensToDelete.size() > 0) {
- for (org.apache.juddi.model.TransferToken tt : tokensToDelete) {
- em.remove(tt);
- }
- }
- }
-
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(CustodyTransferQuery.DISCARD_TRANSFERTOKEN,
- QueryStatus.SUCCESS, procTime);
-
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- @Override
- public void getTransferToken(String authInfo, KeyBag keyBag,
- Holder<String> nodeID, Holder<XMLGregorianCalendar> expirationTime,
- Holder<byte[]> opaqueToken) throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, authInfo);
-
- new ValidateCustodyTransfer(publisher).validateGetTransferToken(em, keyBag);
-
- int transferExpirationDays = DEFAULT_TRANSFEREXPIRATION_DAYS;
- try {
- transferExpirationDays = AppConfig.getConfiguration().getInt(Property.JUDDI_TRANSFER_EXPIRATION_DAYS);
- // For output
- nodeID.value = AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID);
- } catch (ConfigurationException ce) {
- throw new FatalErrorException(new ErrorMessage("errors.configuration.Retrieval"));
- }
-
- String transferKey = TRANSFER_TOKEN_PREFIX + UUID.randomUUID();
- org.apache.juddi.model.TransferToken transferToken = new org.apache.juddi.model.TransferToken();
- transferToken.setTransferToken(transferKey);
- try {
- // For output
- opaqueToken.value = transferKey.getBytes(UTF8);
- } catch (UnsupportedEncodingException ex) {
- throw new InvalidValueException(new ErrorMessage("errors.stringEncoding"));
- }
-
- GregorianCalendar gc = new GregorianCalendar();
- gc.add(GregorianCalendar.DAY_OF_MONTH, transferExpirationDays);
-
- transferToken.setExpirationDate(gc.getTime());
-
- try {
- DatatypeFactory df = DatatypeFactory.newInstance();
- // For output
- expirationTime.value = df.newXMLGregorianCalendar(gc);
- } catch (DatatypeConfigurationException ce) {
- throw new FatalErrorException(new ErrorMessage("errors.Unspecified"));
- }
-
- List<String> keyList = keyBag.getKey();
- for (String key : keyList) {
- TransferTokenKey tokenKey = new TransferTokenKey(transferToken, key);
- transferToken.getTransferKeys().add(tokenKey);
- }
-
- em.persist(transferToken);
-
- tx.commit();
-
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(CustodyTransferQuery.GET_TRANSFERTOKEN,
- QueryStatus.SUCCESS, procTime);
-
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- @Override
- public void transferEntities(TransferEntities body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
-
- ValidateCustodyTransfer verifier = new ValidateCustodyTransfer(publisher);
-
- //if the destination transfer is to a different node,
- if (!verifier.validateTransferEntities(em, body)) {
- //i don't own these entities, so tell the owner to transfer to me.
-
- //look up the replication config endpoint for that node and trigger the transfer, then return
- //ok this is a node to node transfer, first up a replication client to the destination node
- String sourceNode = null;
- try {
- KeyBag keyBag = body.getKeyBag();
- List<String> keyList = keyBag.getKey();
- for (String key : keyList) {
- UddiEntity uddiEntity = em.find(UddiEntity.class, key);
-
- if (uddiEntity!=null) {
- uddiEntity.setIsTransferInProgress(true);
- sourceNode = uddiEntity.getNodeId();
- em.merge(uddiEntity);
- //save the fact we are expecting a transfer
- }
- else
- {
- logger.warn("couldn't find a record for key " + key);
- }
- }
- if (sourceNode==null){
- logger.warn("unable to process transfer, could not locate the source node, perhaps it hasn't been replicated to this node yet?")
- ;
- throw new Exception("unable to process transfer, could not locate the source node for any of the specific keys, perhaps it hasn't been replicated to this node yet?");
- }
-
- UDDIReplicationPortType replicationClient = getReplicationClient(sourceNode);
- if (replicationClient == null) {
- throw new Exception("Unknown node. is it in the replication graph?" + sourceNode);
- }
- TransferCustody transferCustody = new TransferCustody();
- transferCustody.setTransferToken(body.getTransferToken());
- transferCustody.setKeyBag(body.getKeyBag());
- transferCustody.setTransferOperationalInfo(new TransferOperationalInfo());
- transferCustody.getTransferOperationalInfo().setAuthorizedName(publisher.getAuthorizedName());
- transferCustody.getTransferOperationalInfo().setNodeID(getNode());
-
- //and trigger the transfer
- logger.info("AUDIT, transfering " + transferCustody.getKeyBag().getKey().size() + " entities to " + publisher.getAuthorizedName() + " at node " + getNode() + " from source " + sourceNode);
- replicationClient.transferCustody(transferCustody);
- } catch (DispositionReportFaultMessage df) {
- logger.error("Unable to transfer entities from " + sourceNode + " to node " + getNode() + " to user " + publisher.getAuthorizedName(), df);
- throw new TransferNotAllowedException(new ErrorMessage("E_transferBlocked", df.getMessage()));
- } catch (Exception ex) {
- logger.error("Unable to transfer entities from " + sourceNode + " to node " + getNode() + " to user " + publisher.getAuthorizedName(), ex);
- throw new TransferNotAllowedException(new ErrorMessage("E_transferBlocked", ex.getMessage()));
- }
-
- } else {
- changes.addAll(executeTransfer(body, em, publisher.getAuthorizedName(), getNode()));
- //all of the items to be transfer are owned locally by *this node.
-
- }
- tx.commit();
- //we need to do something for replication purposes here
- //enqueue notifications and storage of the changed records
- for (ChangeRecord c : changes) {
- try {
- c.setChangeID(new ChangeRecordIDType());
- c.getChangeID().setNodeID(getNode());
- c.getChangeID().setOriginatingUSN(null);
- ReplicationNotifier.enqueue(MappingApiToModel.mapChangeRecord(c));
- } catch (UnsupportedEncodingException ex) {
- logger.error("", ex);
- }
- }
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(CustodyTransferQuery.TRANSFER_ENTITIES,
- QueryStatus.SUCCESS, procTime);
-
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
-
- }
-
- private synchronized UDDIReplicationPortType getReplicationClient(String node) {
-
- UDDIService svc = new UDDIService();
- UDDIReplicationPortType replicationClient = svc.getUDDIReplicationPort();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- StringBuilder sql = new StringBuilder();
- sql.append("select c from ReplicationConfiguration c order by c.serialNumber desc");
- sql.toString();
- Query qry = em.createQuery(sql.toString());
- qry.setMaxResults(1);
-
- org.apache.juddi.model.ReplicationConfiguration resultList = (org.apache.juddi.model.ReplicationConfiguration) qry.getSingleResult();
- for (Operator o : resultList.getOperator()) {
- if (o.getOperatorNodeID().equalsIgnoreCase(node)) {
- ((BindingProvider) replicationClient).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, o.getSoapReplicationURL());
-
- return replicationClient;
- }
- }
- tx.rollback();
-
- } catch (Exception ex) {
- logger.fatal("Node not found (or there isn't a replication config)!" + node, ex);
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- //em.close();
- return null;
-
- }
-
- /**
- * used to factor out the actual execution of custody transfer, used by
- * both this service and the replication service.
- *
- * @since 3.3
- * @param body
- * @param em
- * @param transferToPublisher
- * @param transferToNode
- * @return
- * @throws DispositionReportFaultMessage
- */
- protected List<ChangeRecord> executeTransfer(TransferEntities body, EntityManager em, String transferToPublisher, String transferToNode) throws DispositionReportFaultMessage {
- // Once validated, the ownership transfer is as simple as switching the publisher
- List<ChangeRecord> changes = new ArrayList<ChangeRecord>();;
- KeyBag keyBag = body.getKeyBag();
- List<String> keyList = keyBag.getKey();
- //used for the change journal
-
- for (String key : keyList) {
- UddiEntity uddiEntity = em.find(UddiEntity.class, key);
- uddiEntity.setAuthorizedName(transferToPublisher);
- uddiEntity.setNodeId(transferToNode);
- Date now = new Date();
- uddiEntity.setModified(now);
- uddiEntity.setModifiedIncludingChildren(now);
-
- if (uddiEntity instanceof BusinessEntity) {
- BusinessEntity be = (BusinessEntity) uddiEntity;
-
- List<BusinessService> bsList = be.getBusinessServices();
- for (BusinessService bs : bsList) {
- bs.setAuthorizedName(transferToPublisher);
- bs.setNodeId(transferToNode);
- bs.setModified(now);
- bs.setModifiedIncludingChildren(now);
-
- List<BindingTemplate> btList = bs.getBindingTemplates();
- for (BindingTemplate bt : btList) {
- bt.setAuthorizedName(transferToPublisher);
- bt.setNodeId(transferToNode);
- bt.setModified(now);
- bt.setModifiedIncludingChildren(now);
-
- }
- }
- }
- ChangeRecord cr = new ChangeRecord();
- cr.setChangeRecordNewData(new ChangeRecordNewData());
- cr.getChangeRecordNewData().setOperationalInfo(new OperationalInfo());
- cr.getChangeRecordNewData().getOperationalInfo().setAuthorizedName(transferToPublisher);
- cr.getChangeRecordNewData().getOperationalInfo().setEntityKey(uddiEntity.getEntityKey());
- cr.getChangeRecordNewData().getOperationalInfo().setNodeID(transferToNode);
- GregorianCalendar gcal = new GregorianCalendar();
- gcal.setTime(uddiEntity.getCreated());
- cr.getChangeRecordNewData().getOperationalInfo().setCreated(df.newXMLGregorianCalendar(gcal));
- gcal = new GregorianCalendar();
- gcal.setTime(now);
- cr.getChangeRecordNewData().getOperationalInfo().setModified(df.newXMLGregorianCalendar(gcal));
- cr.getChangeRecordNewData().getOperationalInfo().setModifiedIncludingChildren(df.newXMLGregorianCalendar(gcal));
- cr.getChangeRecordNewData().getOperationalInfo().setEntityKey(uddiEntity.getEntityKey());
-
- if (uddiEntity instanceof BusinessEntity) {
- cr.getChangeRecordNewData().setBusinessEntity(new org.uddi.api_v3.BusinessEntity());
- MappingModelToApi.mapBusinessEntity((BusinessEntity) uddiEntity, cr.getChangeRecordNewData().getBusinessEntity());
- }
- if (uddiEntity instanceof Tmodel) {
- cr.getChangeRecordNewData().setTModel(new org.uddi.api_v3.TModel());
- MappingModelToApi.mapTModel((Tmodel) uddiEntity, cr.getChangeRecordNewData().getTModel());
- }
- changes.add(cr);
- em.persist(uddiEntity);
-
- }
-
- // After transfer is finished, the token can be removed
- org.uddi.custody_v3.TransferToken apiTransferToken = body.getTransferToken();
- String transferTokenId;
- try {
- transferTokenId = new String(apiTransferToken.getOpaqueToken(), UTF8);
- } catch (UnsupportedEncodingException ex) {
- throw new InvalidValueException(new ErrorMessage("errors.stringEncoding"));
- }
- org.apache.juddi.model.TransferToken modelTransferToken = em.find(org.apache.juddi.model.TransferToken.class, transferTokenId);
- em.remove(modelTransferToken);
- return changes;
- }
-}
+/*
+ * Copyright 2001-2008 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.juddi.api.impl;
+
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.List;
+import java.util.UUID;
+import java.util.Vector;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.jws.WebService;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityTransaction;
+import javax.persistence.Query;
+import javax.xml.datatype.DatatypeConfigurationException;
+import javax.xml.datatype.DatatypeFactory;
+import javax.xml.datatype.XMLGregorianCalendar;
+import javax.xml.ws.BindingProvider;
+import javax.xml.ws.Holder;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.juddi.api.util.CustodyTransferQuery;
+import org.apache.juddi.api.util.QueryStatus;
+import org.apache.juddi.config.AppConfig;
+import org.apache.juddi.config.PersistenceManager;
+import org.apache.juddi.config.Property;
+import org.apache.juddi.mapping.MappingApiToModel;
+import org.apache.juddi.mapping.MappingModelToApi;
+import org.apache.juddi.model.BindingTemplate;
+import org.apache.juddi.model.BusinessEntity;
+import org.apache.juddi.model.BusinessService;
+import org.apache.juddi.model.Operator;
+import org.apache.juddi.model.Tmodel;
+import org.apache.juddi.model.TransferTokenKey;
+import org.apache.juddi.model.UddiEntity;
+import org.apache.juddi.model.UddiEntityPublisher;
+import org.apache.juddi.query.util.DynamicQuery;
+import org.apache.juddi.replication.ReplicationNotifier;
+import org.apache.juddi.v3.client.UDDIService;
+import org.apache.juddi.v3.error.ErrorMessage;
+import org.apache.juddi.v3.error.FatalErrorException;
+import org.apache.juddi.v3.error.InvalidValueException;
+import org.apache.juddi.v3.error.TransferNotAllowedException;
+import org.apache.juddi.validation.ValidateCustodyTransfer;
+import org.uddi.api_v3.OperationalInfo;
+import org.uddi.custody_v3.DiscardTransferToken;
+import org.uddi.custody_v3.KeyBag;
+import org.uddi.custody_v3.TransferEntities;
+import org.uddi.custody_v3.TransferOperationalInfo;
+import org.uddi.repl_v3.ChangeRecord;
+import org.uddi.repl_v3.ChangeRecordIDType;
+import org.uddi.repl_v3.ChangeRecordNewData;
+import org.uddi.repl_v3.TransferCustody;
+import org.uddi.v3_service.DispositionReportFaultMessage;
+import org.uddi.v3_service.UDDICustodyTransferPortType;
+import org.uddi.v3_service.UDDIReplicationPortType;
+
+/**
+ * This implements the UDDI v3 Custody Transfer API web service
+ *
+ */
+@WebService(serviceName = "UDDICustodyTransferService",
+ endpointInterface = "org.uddi.v3_service.UDDICustodyTransferPortType",
+ targetNamespace = "urn:uddi-org:v3_service")
+public class UDDICustodyTransferImpl extends AuthenticatedService implements UDDICustodyTransferPortType {
+
+ public static final String TRANSFER_TOKEN_PREFIX = "transfertoken:";
+ public static final int DEFAULT_TRANSFEREXPIRATION_DAYS = 3;
+
+ private static Log logger = LogFactory.getLog(UDDICustodyTransferImpl.class);
+
+ private static DatatypeFactory df = null;
+ private UDDIServiceCounter serviceCounter;
+
+ public UDDICustodyTransferImpl() {
+ super();
+ serviceCounter = ServiceCounterLifecycleResource.getServiceCounter(this.getClass());
+ init();
+ }
+
+ private static synchronized void init() {
+ if (df == null) {
+ try {
+ df = DatatypeFactory.newInstance();
+ } catch (DatatypeConfigurationException ex) {
+ Logger.getLogger(UDDICustodyTransferImpl.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public void discardTransferToken(DiscardTransferToken body)
+ throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
+
+ new ValidateCustodyTransfer(publisher).validateDiscardTransferToken(em, body);
+
+ org.uddi.custody_v3.TransferToken apiTransferToken = body.getTransferToken();
+ if (apiTransferToken != null) {
+ String transferTokenId;
+ try {
+ transferTokenId = new String(apiTransferToken.getOpaqueToken(), UTF8);
+ } catch (UnsupportedEncodingException ex) {
+ throw new InvalidValueException(new ErrorMessage("errors.stringEncoding"));
+ }
+ org.apache.juddi.model.TransferToken modelTransferToken = em.find(org.apache.juddi.model.TransferToken.class, transferTokenId);
+ if (modelTransferToken != null) {
+ em.remove(modelTransferToken);
+ }
+ }
+
+ KeyBag keyBag = body.getKeyBag();
+ if (keyBag != null) {
+ List<String> keyList = keyBag.getKey();
+ Vector<DynamicQuery.Parameter> params = new Vector<DynamicQuery.Parameter>(0);
+ for (String key : keyList) {
+ // Creating parameters for key-checking query
+ DynamicQuery.Parameter param = new DynamicQuery.Parameter("UPPER(ttk.entityKey)",
+ key.toUpperCase(),
+ DynamicQuery.PREDICATE_EQUALS);
+
+ params.add(param);
+ }
+
+ // Find the associated transfer tokens and remove them.
+ DynamicQuery getTokensQry = new DynamicQuery();
+ getTokensQry.append("select distinct ttk.transferToken from TransferTokenKey ttk").pad();
+ getTokensQry.WHERE().pad().appendGroupedOr(params.toArray(new DynamicQuery.Parameter[0]));
+
+ Query qry = getTokensQry.buildJPAQuery(em);
+ List<org.apache.juddi.model.TransferToken> tokensToDelete = qry.getResultList();
+ if (tokensToDelete != null && tokensToDelete.size() > 0) {
+ for (org.apache.juddi.model.TransferToken tt : tokensToDelete) {
+ em.remove(tt);
+ }
+ }
+ }
+
+ tx.commit();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(CustodyTransferQuery.DISCARD_TRANSFERTOKEN,
+ QueryStatus.SUCCESS, procTime);
+
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+
+ @Override
+ public void getTransferToken(String authInfo, KeyBag keyBag,
+ Holder<String> nodeID, Holder<XMLGregorianCalendar> expirationTime,
+ Holder<byte[]> opaqueToken) throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ UddiEntityPublisher publisher = this.getEntityPublisher(em, authInfo);
+
+ new ValidateCustodyTransfer(publisher).validateGetTransferToken(em, keyBag);
+
+ int transferExpirationDays = DEFAULT_TRANSFEREXPIRATION_DAYS;
+ try {
+ transferExpirationDays = AppConfig.getConfiguration().getInt(Property.JUDDI_TRANSFER_EXPIRATION_DAYS);
+ // For output
+ nodeID.value = AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID);
+ } catch (ConfigurationException ce) {
+ throw new FatalErrorException(new ErrorMessage("errors.configuration.Retrieval"));
+ }
+
+ String transferKey = TRANSFER_TOKEN_PREFIX + UUID.randomUUID();
+ org.apache.juddi.model.TransferToken transferToken = new org.apache.juddi.model.TransferToken();
+ transferToken.setTransferToken(transferKey);
+ try {
+ // For output
+ opaqueToken.value = transferKey.getBytes(UTF8);
+ } catch (UnsupportedEncodingException ex) {
+ throw new InvalidValueException(new ErrorMessage("errors.stringEncoding"));
+ }
+
+ GregorianCalendar gc = new GregorianCalendar();
+ gc.add(GregorianCalendar.DAY_OF_MONTH, transferExpirationDays);
+
+ transferToken.setExpirationDate(gc.getTime());
+
+ try {
+ DatatypeFactory df = DatatypeFactory.newInstance();
+ // For output
+ expirationTime.value = df.newXMLGregorianCalendar(gc);
+ } catch (DatatypeConfigurationException ce) {
+ throw new FatalErrorException(new ErrorMessage("errors.Unspecified"));
+ }
+
+ List<String> keyList = keyBag.getKey();
+ for (String key : keyList) {
+ TransferTokenKey tokenKey = new TransferTokenKey(transferToken, key);
+ transferToken.getTransferKeys().add(tokenKey);
+ }
+
+ em.persist(transferToken);
+
+ tx.commit();
+
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(CustodyTransferQuery.GET_TRANSFERTOKEN,
+ QueryStatus.SUCCESS, procTime);
+
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+
+ @Override
+ public void transferEntities(TransferEntities body)
+ throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
+ try {
+ tx.begin();
+
+ UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
+
+ ValidateCustodyTransfer verifier = new ValidateCustodyTransfer(publisher);
+
+ //if the destination transfer is to a different node,
+ if (!verifier.validateTransferEntities(em, body)) {
+ //i don't own these entities, so tell the owner to transfer to me.
+
+ //look up the replication config endpoint for that node and trigger the transfer, then return
+ //ok this is a node to node transfer, first up a replication client to the destination node
+ String sourceNode = null;
+ try {
+ KeyBag keyBag = body.getKeyBag();
+ List<String> keyList = keyBag.getKey();
+ for (String key : keyList) {
+ UddiEntity uddiEntity = em.find(UddiEntity.class, key);
+
+ if (uddiEntity!=null) {
+ uddiEntity.setIsTransferInProgress(true);
+ sourceNode = uddiEntity.getNodeId();
+ em.merge(uddiEntity);
+ //save the fact we are expecting a transfer
+ }
+ else
+ {
+ logger.warn("couldn't find a record for key " + key);
+ }
+ }
+ if (sourceNode==null){
+ logger.warn("unable to process transfer, could not locate the source node, perhaps it hasn't been replicated to this node yet?")
+ ;
+ throw new Exception("unable to process transfer, could not locate the source node for any of the specific keys, perhaps it hasn't been replicated to this node yet?");
+ }
+
+ UDDIReplicationPortType replicationClient = getReplicationClient(sourceNode);
+ if (replicationClient == null) {
+ throw new Exception("Unknown node. is it in the replication graph?" + sourceNode);
+ }
+ TransferCustody transferCustody = new TransferCustody();
+ transferCustody.setTransferToken(body.getTransferToken());
+ transferCustody.setKeyBag(body.getKeyBag());
+ transferCustody.setTransferOperationalInfo(new TransferOperationalInfo());
+ transferCustody.getTransferOperationalInfo().setAuthorizedName(publisher.getAuthorizedName());
+ transferCustody.getTransferOperationalInfo().setNodeID(getNode());
+
+ //and trigger the transfer
+ logger.info("AUDIT, transfering " + transferCustody.getKeyBag().getKey().size() + " entities to " + publisher.getAuthorizedName() + " at node " + getNode() + " from source " + sourceNode);
+ replicationClient.transferCustody(transferCustody);
+ } catch (DispositionReportFaultMessage df) {
+ logger.error("Unable to transfer entities from " + sourceNode + " to node " + getNode() + " to user " + publisher.getAuthorizedName(), df);
+ throw new TransferNotAllowedException(new ErrorMessage("E_transferBlocked", df.getMessage()));
+ } catch (Exception ex) {
+ logger.error("Unable to transfer entities from " + sourceNode + " to node " + getNode() + " to user " + publisher.getAuthorizedName(), ex);
+ throw new TransferNotAllowedException(new ErrorMessage("E_transferBlocked", ex.getMessage()));
+ }
+
+ } else {
+ changes.addAll(executeTransfer(body, em, publisher.getAuthorizedName(), getNode()));
+ //all of the items to be transfer are owned locally by *this node.
+
+ }
+ tx.commit();
+ //we need to do something for replication purposes here
+ //enqueue notifications and storage of the changed records
+ for (ChangeRecord c : changes) {
+ try {
+ c.setChangeID(new ChangeRecordIDType());
+ c.getChangeID().setNodeID(getNode());
+ c.getChangeID().setOriginatingUSN(null);
+ ReplicationNotifier.enqueue(MappingApiToModel.mapChangeRecord(c));
+ } catch (UnsupportedEncodingException ex) {
+ logger.error("", ex);
+ }
+ }
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(CustodyTransferQuery.TRANSFER_ENTITIES,
+ QueryStatus.SUCCESS, procTime);
+
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+
+ }
+
+ private synchronized UDDIReplicationPortType getReplicationClient(String node) {
+
+ UDDIService svc = new UDDIService();
+ UDDIReplicationPortType replicationClient = svc.getUDDIReplicationPort();
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ StringBuilder sql = new StringBuilder();
+ sql.append("select c from ReplicationConfiguration c order by c.serialNumber desc");
+ sql.toString();
+ Query qry = em.createQuery(sql.toString());
+ qry.setMaxResults(1);
+
+ org.apache.juddi.model.ReplicationConfiguration resultList = (org.apache.juddi.model.ReplicationConfiguration) qry.getSingleResult();
+ for (Operator o : resultList.getOperator()) {
+ if (o.getOperatorNodeID().equalsIgnoreCase(node)) {
+ ((BindingProvider) replicationClient).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, o.getSoapReplicationURL());
+
+ return replicationClient;
+ }
+ }
+ tx.rollback();
+
+ } catch (Exception ex) {
+ logger.fatal("Node not found (or there isn't a replication config)!" + node, ex);
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ //em.close();
+ return null;
+
+ }
+
+ /**
+ * used to factor out the actual execution of custody transfer, used by
+ * both this service and the replication service.
+ *
+ * @since 3.3
+ * @param body
+ * @param em
+ * @param transferToPublisher
+ * @param transferToNode
+ * @return
+ * @throws DispositionReportFaultMessage
+ */
+ protected List<ChangeRecord> executeTransfer(TransferEntities body, EntityManager em, String transferToPublisher, String transferToNode) throws DispositionReportFaultMessage {
+ // Once validated, the ownership transfer is as simple as switching the publisher
+ List<ChangeRecord> changes = new ArrayList<ChangeRecord>();;
+ KeyBag keyBag = body.getKeyBag();
+ List<String> keyList = keyBag.getKey();
+ //used for the change journal
+
+ for (String key : keyList) {
+ UddiEntity uddiEntity = em.find(UddiEntity.class, key);
+ uddiEntity.setAuthorizedName(transferToPublisher);
+ uddiEntity.setNodeId(transferToNode);
+ Date now = new Date();
+ uddiEntity.setModified(now);
+ uddiEntity.setModifiedIncludingChildren(now);
+
+ if (uddiEntity instanceof BusinessEntity) {
+ BusinessEntity be = (BusinessEntity) uddiEntity;
+
+ List<BusinessService> bsList = be.getBusinessServices();
+ for (BusinessService bs : bsList) {
+ bs.setAuthorizedName(transferToPublisher);
+ bs.setNodeId(transferToNode);
+ bs.setModified(now);
+ bs.setModifiedIncludingChildren(now);
+
+ List<BindingTemplate> btList = bs.getBindingTemplates();
+ for (BindingTemplate bt : btList) {
+ bt.setAuthorizedName(transferToPublisher);
+ bt.setNodeId(transferToNode);
+ bt.setModified(now);
+ bt.setModifiedIncludingChildren(now);
+
+ }
+ }
+ }
+ ChangeRecord cr = new ChangeRecord();
+ cr.setChangeRecordNewData(new ChangeRecordNewData());
+ cr.getChangeRecordNewData().setOperationalInfo(new OperationalInfo());
+ cr.getChangeRecordNewData().getOperationalInfo().setAuthorizedName(transferToPublisher);
+ cr.getChangeRecordNewData().getOperationalInfo().setEntityKey(uddiEntity.getEntityKey());
+ cr.getChangeRecordNewData().getOperationalInfo().setNodeID(transferToNode);
+ GregorianCalendar gcal = new GregorianCalendar();
+ gcal.setTime(uddiEntity.getCreated());
+ cr.getChangeRecordNewData().getOperationalInfo().setCreated(df.newXMLGregorianCalendar(gcal));
+ gcal = new GregorianCalendar();
+ gcal.setTime(now);
+ cr.getChangeRecordNewData().getOperationalInfo().setModified(df.newXMLGregorianCalendar(gcal));
+ cr.getChangeRecordNewData().getOperationalInfo().setModifiedIncludingChildren(df.newXMLGregorianCalendar(gcal));
+ cr.getChangeRecordNewData().getOperationalInfo().setEntityKey(uddiEntity.getEntityKey());
+
+ if (uddiEntity instanceof BusinessEntity) {
+ cr.getChangeRecordNewData().setBusinessEntity(new org.uddi.api_v3.BusinessEntity());
+ MappingModelToApi.mapBusinessEntity((BusinessEntity) uddiEntity, cr.getChangeRecordNewData().getBusinessEntity());
+ }
+ if (uddiEntity instanceof Tmodel) {
+ cr.getChangeRecordNewData().setTModel(new org.uddi.api_v3.TModel());
+ MappingModelToApi.mapTModel((Tmodel) uddiEntity, cr.getChangeRecordNewData().getTModel());
+ }
+ changes.add(cr);
+ em.persist(uddiEntity);
+
+ }
+
+ // After transfer is finished, the token can be removed
+ org.uddi.custody_v3.TransferToken apiTransferToken = body.getTransferToken();
+ String transferTokenId;
+ try {
+ transferTokenId = new String(apiTransferToken.getOpaqueToken(), UTF8);
+ } catch (UnsupportedEncodingException ex) {
+ throw new InvalidValueException(new ErrorMessage("errors.stringEncoding"));
+ }
+ org.apache.juddi.model.TransferToken modelTransferToken = em.find(org.apache.juddi.model.TransferToken.class, transferTokenId);
+ em.remove(modelTransferToken);
+ return changes;
+ }
+}
diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java b/juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java
similarity index 97%
rename from juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java
rename to juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java
index 701f5f834..29a2cf495 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java
+++ b/juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java
@@ -1,630 +1,630 @@
-/*
- * Copyright 2001-2008 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.juddi.api.impl;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import javax.jws.WebService;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityTransaction;
-import javax.xml.bind.JAXB;
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.juddi.api.util.InquiryQuery;
-import org.apache.juddi.api.util.QueryStatus;
-import org.apache.juddi.config.AppConfig;
-import org.apache.juddi.config.PersistenceManager;
-import org.apache.juddi.config.Property;
-import org.apache.juddi.mapping.MappingModelToApi;
-import org.apache.juddi.v3.error.ErrorMessage;
-import org.apache.juddi.v3.error.InvalidKeyPassedException;
-import org.apache.juddi.validation.ValidateInquiry;
-import org.uddi.api_v3.BindingDetail;
-import org.uddi.api_v3.BusinessDetail;
-import org.uddi.api_v3.BusinessList;
-import org.uddi.api_v3.FindBinding;
-import org.uddi.api_v3.FindBusiness;
-import org.uddi.api_v3.FindRelatedBusinesses;
-import org.uddi.api_v3.FindService;
-import org.uddi.api_v3.FindTModel;
-import org.uddi.api_v3.GetBindingDetail;
-import org.uddi.api_v3.GetBusinessDetail;
-import org.uddi.api_v3.GetOperationalInfo;
-import org.uddi.api_v3.GetServiceDetail;
-import org.uddi.api_v3.GetTModelDetail;
-import org.uddi.api_v3.OperationalInfos;
-import org.uddi.api_v3.RelatedBusinessesList;
-import org.uddi.api_v3.ServiceDetail;
-import org.uddi.api_v3.ServiceList;
-import org.uddi.api_v3.TModelDetail;
-import org.uddi.api_v3.TModelList;
-import org.uddi.v3_service.DispositionReportFaultMessage;
-import org.uddi.v3_service.UDDIInquiryPortType;
-
-
-/**
- * This implements the UDDI v3 Inquiry API web service
- * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
- */
-@WebService(serviceName="UDDIInquiryService",
- endpointInterface="org.uddi.v3_service.UDDIInquiryPortType",
- targetNamespace = "urn:uddi-org:api_v3_portType")
-public class UDDIInquiryImpl extends AuthenticatedService implements UDDIInquiryPortType {
-
-
- private static Log log = LogFactory.getLog(UDDIInquiryImpl.class);
-
- private static boolean isLogRequestPayloads() {
- boolean result = false;
- try {
- result = AppConfig.getConfiguration().getBoolean(Property.JUDDI_LOGGING_FindApiCalls, false);
- } catch (ConfigurationException e) {
- log.error("Configuration exception occurred retrieving: " + Property.JUDDI_LOGGING_FindApiCalls, e);
- }
- return result;
- }
- private UDDIServiceCounter serviceCounter;
-
- public UDDIInquiryImpl() {
- super();
- serviceCounter = ServiceCounterLifecycleResource.getServiceCounter(UDDIInquiryImpl.class);
- }
-
-
- private static void LogFindRelatedBusinessRequest(FindRelatedBusinesses request) {
- request.setAuthInfo(null);
- LogRequest(request);
- }
- private static void LogFindBindingRequest(FindBinding request) {
- request.setAuthInfo(null);
- LogRequest(request);
- }
- private static void LogFindTModelRequest(FindTModel request) {
- request.setAuthInfo(null);
- LogRequest(request);
- }
- private static void LogFindServiceRequest(FindService request) {
- request.setAuthInfo(null);
- LogRequest(request);
- }
- private static void LogFindBusinessRequest(FindBusiness request) {
- request.setAuthInfo(null);
- LogRequest(request);
- }
- private static synchronized void LogRequest(Object request) {
- if (isLogRequestPayloads())
- try {
- File f = new File(System.currentTimeMillis()+".xml");
- FileOutputStream fos = new FileOutputStream(f);
- JAXB.marshal(request, fos);
- fos.close();
- f = null;
- } catch (Exception ex) {
- logger.warn("Unable to log request payload", ex);
- }
- }
-
-
- public BindingDetail findBinding(FindBinding body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
- try {
- new ValidateInquiry(null).validateFindBinding(body);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(InquiryQuery.FIND_BINDING, QueryStatus.FAILED, procTime);
- throw drfm;
- }
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- if (isAuthenticated())
- this.getEntityPublisher(em, body.getAuthInfo());
-
- LogFindBindingRequest(body);
- if (body.getServiceKey() != null && body.getServiceKey().length() > 0) {
- // Check that we were passed a valid serviceKey per
- // 5.1.12.4 of the UDDI v3 spec
- String serviceKey = body.getServiceKey();
- org.apache.juddi.model.BusinessService modelBusinessService = null;
- try {
- modelBusinessService=em.find(org.apache.juddi.model.BusinessService.class, serviceKey);
- } catch (Exception e) {
- log.debug(e.getMessage(), e);
- }
- if (modelBusinessService == null)
- throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ServiceNotFound", serviceKey));
- }
-
- org.apache.juddi.query.util.FindQualifiers findQualifiers = new org.apache.juddi.query.util.FindQualifiers();
- findQualifiers.mapApiFindQualifiers(body.getFindQualifiers());
-
- List<?> keysFound = InquiryHelper.findBinding(body, findQualifiers, em);
-
- BindingDetail result = InquiryHelper.getBindingDetailFromKeys(body, findQualifiers, em, keysFound);
- tx.rollback();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(InquiryQuery.FIND_BINDING, QueryStatus.SUCCESS, procTime);
-
- return result;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
-
- public BusinessList findBusiness(FindBusiness body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
- try {
- new ValidateInquiry(null).validateFindBusiness(body);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(InquiryQuery.FIND_BUSINESS, QueryStatus.FAILED, procTime);
- throw drfm;
- }
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- try {
- //AppConfig.reloadConfig();
- logger.info("FindBusiness with tModel bag filtering is enabled: " +
- AppConfig.getConfiguration().getBoolean(Property.JUDDI_ENABLE_FIND_BUSINESS_TMODEL_BAG_FILTERING,true)
- + " loaded from " + AppConfig.getConfigFileURL());
- } catch (ConfigurationException ex) {
- ex.printStackTrace();
- }
- tx.begin();
-
- if (isAuthenticated())
- this.getEntityPublisher(em, body.getAuthInfo());
- LogFindBusinessRequest(body);
- org.apache.juddi.query.util.FindQualifiers findQualifiers = new org.apache.juddi.query.util.FindQualifiers();
- findQualifiers.mapApiFindQualifiers(body.getFindQualifiers());
-
- List<?> keysFound = InquiryHelper.findBusiness(body, findQualifiers, em);
-
- BusinessList result = InquiryHelper.getBusinessListFromKeys(body, findQualifiers, em, keysFound);
-
- tx.rollback();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(InquiryQuery.FIND_BUSINESS, QueryStatus.SUCCESS, procTime);
-
- return result;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
-
- public RelatedBusinessesList findRelatedBusinesses(FindRelatedBusinesses body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
- try {
- new ValidateInquiry(null).validateFindRelatedBusinesses(body, false);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(InquiryQuery.FIND_RELATEDBUSINESSES, QueryStatus.FAILED, procTime);
- throw drfm;
- }
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- if (isAuthenticated())
- this.getEntityPublisher(em, body.getAuthInfo());
- LogFindRelatedBusinessRequest(body);
-
- // TODO: findQualifiers aren't really used for this call, except maybe for sorting. Sorting must be done in Java due to the retrieval method used. Right now
- // no sorting is performed.
- org.apache.juddi.query.util.FindQualifiers findQualifiers = new org.apache.juddi.query.util.FindQualifiers();
- findQualifiers.mapApiFindQualifiers(body.getFindQualifiers());
-
- RelatedBusinessesList result = InquiryHelper.getRelatedBusinessesList(body, em);
-
- tx.rollback();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(InquiryQuery.FIND_RELATEDBUSINESSES, QueryStatus.SUCCESS, procTime);
-
- return result;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
-
- public ServiceList findService(FindService body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
- try {
- new ValidateInquiry(null).validateFindService(body);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(InquiryQuery.FIND_SERVICE, QueryStatus.FAILED, procTime);
- throw drfm;
- }
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- if (isAuthenticated())
- this.getEntityPublisher(em, body.getAuthInfo());
- LogFindServiceRequest(body);
- org.apache.juddi.query.util.FindQualifiers findQualifiers = new org.apache.juddi.query.util.FindQualifiers();
- findQualifiers.mapApiFindQualifiers(body.getFindQualifiers());
-
- List<?> keysFound = InquiryHelper.findService(body, findQualifiers, em);
-
- if (keysFound.size() == 0) {
- if (body.getBusinessKey() != null) {
- // Check that we were passed a valid businessKey per
- // 5.1.12.4 of the UDDI v3 spec
- String businessKey = body.getBusinessKey();
- org.apache.juddi.model.BusinessEntity modelBusinessEntity = null;
- try {
- modelBusinessEntity = em.find(org.apache.juddi.model.BusinessEntity.class, businessKey);
- } catch (ClassCastException e) {}
- if (modelBusinessEntity == null) {
- throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.BusinessNotFound", businessKey));
- }
- }
- }
-
- ServiceList result = InquiryHelper.getServiceListFromKeys(body, findQualifiers, em, keysFound);
-
- tx.rollback();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(InquiryQuery.FIND_SERVICE, QueryStatus.SUCCESS, procTime);
-
- return result;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
-
- public TModelList findTModel(FindTModel body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
- try {
- new ValidateInquiry(null).validateFindTModel(body, false);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(InquiryQuery.FIND_TMODEL, QueryStatus.FAILED, procTime);
- throw drfm;
- }
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- if (isAuthenticated())
- this.getEntityPublisher(em, body.getAuthInfo());
- LogFindTModelRequest(body);
- org.apache.juddi.query.util.FindQualifiers findQualifiers = new org.apache.juddi.query.util.FindQualifiers();
- findQualifiers.mapApiFindQualifiers(body.getFindQualifiers());
-
- List<?> keysFound = InquiryHelper.findTModel(body, findQualifiers, em);
-
- TModelList result = InquiryHelper.getTModelListFromKeys(body, findQualifiers, em, keysFound);
-
- tx.rollback();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(InquiryQuery.FIND_TMODEL, QueryStatus.SUCCESS, procTime);
-
- return result;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
-
- public BindingDetail getBindingDetail(GetBindingDetail body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
- try {
- new ValidateInquiry(null).validateGetBindingDetail(body);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(InquiryQuery.FIND_TMODEL, QueryStatus.FAILED, procTime);
- throw drfm;
- }
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- if (isAuthenticated())
- this.getEntityPublisher(em, body.getAuthInfo());
-
- BindingDetail result = new BindingDetail();
-
- List<String> bindingKeyList = body.getBindingKey();
- for (String bindingKey : bindingKeyList) {
- org.apache.juddi.model.BindingTemplate modelBindingTemplate = null;
- try {
- modelBindingTemplate = em.find(org.apache.juddi.model.BindingTemplate.class, bindingKey);
- } catch (ClassCastException e) {}
- if (modelBindingTemplate == null)
- throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.BindingTemplateNotFound", bindingKey));
-
- org.uddi.api_v3.BindingTemplate apiBindingTemplate = new org.uddi.api_v3.BindingTemplate();
-
- MappingModelToApi.mapBindingTemplate(modelBindingTemplate, apiBindingTemplate);
-
- result.getBindingTemplate().add(apiBindingTemplate);
- }
-
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(InquiryQuery.GET_BINDINGDETAIL, QueryStatus.SUCCESS, procTime);
-
- return result;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
-
- public BusinessDetail getBusinessDetail(GetBusinessDetail body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
- try {
- new ValidateInquiry(null).validateGetBusinessDetail(body);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(InquiryQuery.GET_BUSINESSDETAIL, QueryStatus.FAILED, procTime);
- throw drfm;
- }
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- if (isAuthenticated())
- this.getEntityPublisher(em, body.getAuthInfo());
-
- BusinessDetail result = new BusinessDetail();
-
- List<String> businessKeyList = body.getBusinessKey();
- for (String businessKey : businessKeyList) {
- org.apache.juddi.model.BusinessEntity modelBusinessEntity = null;
- try {
- modelBusinessEntity = em.find(org.apache.juddi.model.BusinessEntity.class, businessKey);
- } catch (ClassCastException e) {}
- if (modelBusinessEntity == null)
- throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.BusinessNotFound", businessKey));
-
- org.uddi.api_v3.BusinessEntity apiBusinessEntity = new org.uddi.api_v3.BusinessEntity();
-
- MappingModelToApi.mapBusinessEntity(modelBusinessEntity, apiBusinessEntity);
-
- result.getBusinessEntity().add(apiBusinessEntity);
- }
-
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(InquiryQuery.GET_BUSINESSDETAIL, QueryStatus.SUCCESS, procTime);
-
- return result;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
-
- public OperationalInfos getOperationalInfo(GetOperationalInfo body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
- try {
- new ValidateInquiry(null).validateGetOperationalInfo(body);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(InquiryQuery.GET_OPERATIONALINFO, QueryStatus.FAILED, procTime);
- throw drfm;
- }
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- if (isAuthenticated())
- this.getEntityPublisher(em, body.getAuthInfo());
-
- OperationalInfos result = new OperationalInfos();
-
- List<String> entityKeyList = body.getEntityKey();
- for (String entityKey : entityKeyList) {
- org.apache.juddi.model.UddiEntity modelUddiEntity = null;
- try {
- modelUddiEntity = em.find(org.apache.juddi.model.UddiEntity.class, entityKey);
- } catch (ClassCastException e) {}
- if (modelUddiEntity == null)
- throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.EntityNotFound", entityKey));
-
- org.uddi.api_v3.OperationalInfo apiOperationalInfo = new org.uddi.api_v3.OperationalInfo();
-
- MappingModelToApi.mapOperationalInfo(modelUddiEntity, apiOperationalInfo);
-
- result.getOperationalInfo().add(apiOperationalInfo);
- }
-
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(InquiryQuery.GET_OPERATIONALINFO, QueryStatus.SUCCESS, procTime);
-
- return result;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
-
- public ServiceDetail getServiceDetail(GetServiceDetail body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
- try {
- new ValidateInquiry(null).validateGetServiceDetail(body);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(InquiryQuery.GET_SERVICEDETAIL, QueryStatus.FAILED, procTime);
- throw drfm;
- }
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- if (isAuthenticated())
- this.getEntityPublisher(em, body.getAuthInfo());
-
- ServiceDetail result = new ServiceDetail();
-
- List<String> serviceKeyList = body.getServiceKey();
- for (String serviceKey : serviceKeyList) {
- org.apache.juddi.model.BusinessService modelBusinessService = null;
- try {
- modelBusinessService = em.find(org.apache.juddi.model.BusinessService.class, serviceKey);
- } catch (ClassCastException e){}
- if (modelBusinessService == null)
- throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ServiceNotFound", serviceKey));
-
- org.uddi.api_v3.BusinessService apiBusinessService = new org.uddi.api_v3.BusinessService();
-
- MappingModelToApi.mapBusinessService(modelBusinessService, apiBusinessService);
-
- result.getBusinessService().add(apiBusinessService);
- }
-
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(InquiryQuery.GET_SERVICEDETAIL, QueryStatus.SUCCESS, procTime);
-
- return result;
-
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
-
- public TModelDetail getTModelDetail(GetTModelDetail body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
- try {
- new ValidateInquiry(null).validateGetTModelDetail(body);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(InquiryQuery.GET_TMODELDETAIL, QueryStatus.FAILED, procTime);
- throw drfm;
- }
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- if (isAuthenticated())
- this.getEntityPublisher(em, body.getAuthInfo());
-
- TModelDetail result = new TModelDetail();
-
- List<String> tmodelKeyList = body.getTModelKey();
- for (String tmodelKey : tmodelKeyList) {
- org.apache.juddi.model.Tmodel modelTModel = null;
- try {
- modelTModel = em.find(org.apache.juddi.model.Tmodel.class, tmodelKey);
- } catch (ClassCastException e) {}
- if (modelTModel == null)
- throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.TModelNotFound", tmodelKey));
-
- org.uddi.api_v3.TModel apiTModel = new org.uddi.api_v3.TModel();
-
- MappingModelToApi.mapTModel(modelTModel, apiTModel);
-
- result.getTModel().add(apiTModel);
- }
-
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(InquiryQuery.GET_TMODELDETAIL, QueryStatus.SUCCESS, procTime);
-
- return result;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- private boolean isAuthenticated() {
- boolean result = false;
- try {
- result = AppConfig.getConfiguration().getBoolean(Property.JUDDI_AUTHENTICATE_INQUIRY);
- } catch (ConfigurationException e) {
- log.error("Configuration exception occurred retrieving: " + Property.JUDDI_AUTHENTICATE_INQUIRY, e);
- }
- return result;
- }
-
-}
+/*
+ * Copyright 2001-2008 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.juddi.api.impl;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.jws.WebService;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityTransaction;
+import javax.xml.bind.JAXB;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.juddi.api.util.InquiryQuery;
+import org.apache.juddi.api.util.QueryStatus;
+import org.apache.juddi.config.AppConfig;
+import org.apache.juddi.config.PersistenceManager;
+import org.apache.juddi.config.Property;
+import org.apache.juddi.mapping.MappingModelToApi;
+import org.apache.juddi.v3.error.ErrorMessage;
+import org.apache.juddi.v3.error.InvalidKeyPassedException;
+import org.apache.juddi.validation.ValidateInquiry;
+import org.uddi.api_v3.BindingDetail;
+import org.uddi.api_v3.BusinessDetail;
+import org.uddi.api_v3.BusinessList;
+import org.uddi.api_v3.FindBinding;
+import org.uddi.api_v3.FindBusiness;
+import org.uddi.api_v3.FindRelatedBusinesses;
+import org.uddi.api_v3.FindService;
+import org.uddi.api_v3.FindTModel;
+import org.uddi.api_v3.GetBindingDetail;
+import org.uddi.api_v3.GetBusinessDetail;
+import org.uddi.api_v3.GetOperationalInfo;
+import org.uddi.api_v3.GetServiceDetail;
+import org.uddi.api_v3.GetTModelDetail;
+import org.uddi.api_v3.OperationalInfos;
+import org.uddi.api_v3.RelatedBusinessesList;
+import org.uddi.api_v3.ServiceDetail;
+import org.uddi.api_v3.ServiceList;
+import org.uddi.api_v3.TModelDetail;
+import org.uddi.api_v3.TModelList;
+import org.uddi.v3_service.DispositionReportFaultMessage;
+import org.uddi.v3_service.UDDIInquiryPortType;
+
+
+/**
+ * This implements the UDDI v3 Inquiry API web service
+ * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
+ */
+@WebService(serviceName="UDDIInquiryService",
+ endpointInterface="org.uddi.v3_service.UDDIInquiryPortType",
+ targetNamespace = "urn:uddi-org:api_v3_portType")
+public class UDDIInquiryImpl extends AuthenticatedService implements UDDIInquiryPortType {
+
+
+ private static Log log = LogFactory.getLog(UDDIInquiryImpl.class);
+
+ private static boolean isLogRequestPayloads() {
+ boolean result = false;
+ try {
+ result = AppConfig.getConfiguration().getBoolean(Property.JUDDI_LOGGING_FindApiCalls, false);
+ } catch (ConfigurationException e) {
+ log.error("Configuration exception occurred retrieving: " + Property.JUDDI_LOGGING_FindApiCalls, e);
+ }
+ return result;
+ }
+ private UDDIServiceCounter serviceCounter;
+
+ public UDDIInquiryImpl() {
+ super();
+ serviceCounter = ServiceCounterLifecycleResource.getServiceCounter(UDDIInquiryImpl.class);
+ }
+
+
+ private static void LogFindRelatedBusinessRequest(FindRelatedBusinesses request) {
+ request.setAuthInfo(null);
+ LogRequest(request);
+ }
+ private static void LogFindBindingRequest(FindBinding request) {
+ request.setAuthInfo(null);
+ LogRequest(request);
+ }
+ private static void LogFindTModelRequest(FindTModel request) {
+ request.setAuthInfo(null);
+ LogRequest(request);
+ }
+ private static void LogFindServiceRequest(FindService request) {
+ request.setAuthInfo(null);
+ LogRequest(request);
+ }
+ private static void LogFindBusinessRequest(FindBusiness request) {
+ request.setAuthInfo(null);
+ LogRequest(request);
+ }
+ private static synchronized void LogRequest(Object request) {
+ if (isLogRequestPayloads())
+ try {
+ File f = new File(System.currentTimeMillis()+".xml");
+ FileOutputStream fos = new FileOutputStream(f);
+ JAXB.marshal(request, fos);
+ fos.close();
+ f = null;
+ } catch (Exception ex) {
+ logger.warn("Unable to log request payload", ex);
+ }
+ }
+
+
+ public BindingDetail findBinding(FindBinding body)
+ throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+ try {
+ new ValidateInquiry(null).validateFindBinding(body);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(InquiryQuery.FIND_BINDING, QueryStatus.FAILED, procTime);
+ throw drfm;
+ }
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ if (isAuthenticated())
+ this.getEntityPublisher(em, body.getAuthInfo());
+
+ LogFindBindingRequest(body);
+ if (body.getServiceKey() != null && body.getServiceKey().length() > 0) {
+ // Check that we were passed a valid serviceKey per
+ // 5.1.12.4 of the UDDI v3 spec
+ String serviceKey = body.getServiceKey();
+ org.apache.juddi.model.BusinessService modelBusinessService = null;
+ try {
+ modelBusinessService=em.find(org.apache.juddi.model.BusinessService.class, serviceKey);
+ } catch (Exception e) {
+ log.debug(e.getMessage(), e);
+ }
+ if (modelBusinessService == null)
+ throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ServiceNotFound", serviceKey));
+ }
+
+ org.apache.juddi.query.util.FindQualifiers findQualifiers = new org.apache.juddi.query.util.FindQualifiers();
+ findQualifiers.mapApiFindQualifiers(body.getFindQualifiers());
+
+ List<?> keysFound = InquiryHelper.findBinding(body, findQualifiers, em);
+
+ BindingDetail result = InquiryHelper.getBindingDetailFromKeys(body, findQualifiers, em, keysFound);
+ tx.rollback();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(InquiryQuery.FIND_BINDING, QueryStatus.SUCCESS, procTime);
+
+ return result;
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+
+
+ public BusinessList findBusiness(FindBusiness body)
+ throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+ try {
+ new ValidateInquiry(null).validateFindBusiness(body);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(InquiryQuery.FIND_BUSINESS, QueryStatus.FAILED, procTime);
+ throw drfm;
+ }
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ try {
+ //AppConfig.reloadConfig();
+ logger.info("FindBusiness with tModel bag filtering is enabled: " +
+ AppConfig.getConfiguration().getBoolean(Property.JUDDI_ENABLE_FIND_BUSINESS_TMODEL_BAG_FILTERING,true)
+ + " loaded from " + AppConfig.getConfigFileURL());
+ } catch (ConfigurationException ex) {
+ ex.printStackTrace();
+ }
+ tx.begin();
+
+ if (isAuthenticated())
+ this.getEntityPublisher(em, body.getAuthInfo());
+ LogFindBusinessRequest(body);
+ org.apache.juddi.query.util.FindQualifiers findQualifiers = new org.apache.juddi.query.util.FindQualifiers();
+ findQualifiers.mapApiFindQualifiers(body.getFindQualifiers());
+
+ List<?> keysFound = InquiryHelper.findBusiness(body, findQualifiers, em);
+
+ BusinessList result = InquiryHelper.getBusinessListFromKeys(body, findQualifiers, em, keysFound);
+
+ tx.rollback();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(InquiryQuery.FIND_BUSINESS, QueryStatus.SUCCESS, procTime);
+
+ return result;
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+
+
+ public RelatedBusinessesList findRelatedBusinesses(FindRelatedBusinesses body)
+ throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+ try {
+ new ValidateInquiry(null).validateFindRelatedBusinesses(body, false);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(InquiryQuery.FIND_RELATEDBUSINESSES, QueryStatus.FAILED, procTime);
+ throw drfm;
+ }
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ if (isAuthenticated())
+ this.getEntityPublisher(em, body.getAuthInfo());
+ LogFindRelatedBusinessRequest(body);
+
+ // TODO: findQualifiers aren't really used for this call, except maybe for sorting. Sorting must be done in Java due to the retrieval method used. Right now
+ // no sorting is performed.
+ org.apache.juddi.query.util.FindQualifiers findQualifiers = new org.apache.juddi.query.util.FindQualifiers();
+ findQualifiers.mapApiFindQualifiers(body.getFindQualifiers());
+
+ RelatedBusinessesList result = InquiryHelper.getRelatedBusinessesList(body, em);
+
+ tx.rollback();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(InquiryQuery.FIND_RELATEDBUSINESSES, QueryStatus.SUCCESS, procTime);
+
+ return result;
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+
+
+ public ServiceList findService(FindService body)
+ throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+ try {
+ new ValidateInquiry(null).validateFindService(body);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(InquiryQuery.FIND_SERVICE, QueryStatus.FAILED, procTime);
+ throw drfm;
+ }
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ if (isAuthenticated())
+ this.getEntityPublisher(em, body.getAuthInfo());
+ LogFindServiceRequest(body);
+ org.apache.juddi.query.util.FindQualifiers findQualifiers = new org.apache.juddi.query.util.FindQualifiers();
+ findQualifiers.mapApiFindQualifiers(body.getFindQualifiers());
+
+ List<?> keysFound = InquiryHelper.findService(body, findQualifiers, em);
+
+ if (keysFound.size() == 0) {
+ if (body.getBusinessKey() != null) {
+ // Check that we were passed a valid businessKey per
+ // 5.1.12.4 of the UDDI v3 spec
+ String businessKey = body.getBusinessKey();
+ org.apache.juddi.model.BusinessEntity modelBusinessEntity = null;
+ try {
+ modelBusinessEntity = em.find(org.apache.juddi.model.BusinessEntity.class, businessKey);
+ } catch (ClassCastException e) {}
+ if (modelBusinessEntity == null) {
+ throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.BusinessNotFound", businessKey));
+ }
+ }
+ }
+
+ ServiceList result = InquiryHelper.getServiceListFromKeys(body, findQualifiers, em, keysFound);
+
+ tx.rollback();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(InquiryQuery.FIND_SERVICE, QueryStatus.SUCCESS, procTime);
+
+ return result;
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+
+
+ public TModelList findTModel(FindTModel body)
+ throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+ try {
+ new ValidateInquiry(null).validateFindTModel(body, false);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(InquiryQuery.FIND_TMODEL, QueryStatus.FAILED, procTime);
+ throw drfm;
+ }
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ if (isAuthenticated())
+ this.getEntityPublisher(em, body.getAuthInfo());
+ LogFindTModelRequest(body);
+ org.apache.juddi.query.util.FindQualifiers findQualifiers = new org.apache.juddi.query.util.FindQualifiers();
+ findQualifiers.mapApiFindQualifiers(body.getFindQualifiers());
+
+ List<?> keysFound = InquiryHelper.findTModel(body, findQualifiers, em);
+
+ TModelList result = InquiryHelper.getTModelListFromKeys(body, findQualifiers, em, keysFound);
+
+ tx.rollback();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(InquiryQuery.FIND_TMODEL, QueryStatus.SUCCESS, procTime);
+
+ return result;
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+
+
+ public BindingDetail getBindingDetail(GetBindingDetail body)
+ throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+ try {
+ new ValidateInquiry(null).validateGetBindingDetail(body);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(InquiryQuery.FIND_TMODEL, QueryStatus.FAILED, procTime);
+ throw drfm;
+ }
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ if (isAuthenticated())
+ this.getEntityPublisher(em, body.getAuthInfo());
+
+ BindingDetail result = new BindingDetail();
+
+ List<String> bindingKeyList = body.getBindingKey();
+ for (String bindingKey : bindingKeyList) {
+ org.apache.juddi.model.BindingTemplate modelBindingTemplate = null;
+ try {
+ modelBindingTemplate = em.find(org.apache.juddi.model.BindingTemplate.class, bindingKey);
+ } catch (ClassCastException e) {}
+ if (modelBindingTemplate == null)
+ throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.BindingTemplateNotFound", bindingKey));
+
+ org.uddi.api_v3.BindingTemplate apiBindingTemplate = new org.uddi.api_v3.BindingTemplate();
+
+ MappingModelToApi.mapBindingTemplate(modelBindingTemplate, apiBindingTemplate);
+
+ result.getBindingTemplate().add(apiBindingTemplate);
+ }
+
+ tx.commit();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(InquiryQuery.GET_BINDINGDETAIL, QueryStatus.SUCCESS, procTime);
+
+ return result;
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+
+
+ public BusinessDetail getBusinessDetail(GetBusinessDetail body)
+ throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+ try {
+ new ValidateInquiry(null).validateGetBusinessDetail(body);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(InquiryQuery.GET_BUSINESSDETAIL, QueryStatus.FAILED, procTime);
+ throw drfm;
+ }
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ if (isAuthenticated())
+ this.getEntityPublisher(em, body.getAuthInfo());
+
+ BusinessDetail result = new BusinessDetail();
+
+ List<String> businessKeyList = body.getBusinessKey();
+ for (String businessKey : businessKeyList) {
+ org.apache.juddi.model.BusinessEntity modelBusinessEntity = null;
+ try {
+ modelBusinessEntity = em.find(org.apache.juddi.model.BusinessEntity.class, businessKey);
+ } catch (ClassCastException e) {}
+ if (modelBusinessEntity == null)
+ throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.BusinessNotFound", businessKey));
+
+ org.uddi.api_v3.BusinessEntity apiBusinessEntity = new org.uddi.api_v3.BusinessEntity();
+
+ MappingModelToApi.mapBusinessEntity(modelBusinessEntity, apiBusinessEntity);
+
+ result.getBusinessEntity().add(apiBusinessEntity);
+ }
+
+ tx.commit();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(InquiryQuery.GET_BUSINESSDETAIL, QueryStatus.SUCCESS, procTime);
+
+ return result;
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+
+
+ public OperationalInfos getOperationalInfo(GetOperationalInfo body)
+ throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+ try {
+ new ValidateInquiry(null).validateGetOperationalInfo(body);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(InquiryQuery.GET_OPERATIONALINFO, QueryStatus.FAILED, procTime);
+ throw drfm;
+ }
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ if (isAuthenticated())
+ this.getEntityPublisher(em, body.getAuthInfo());
+
+ OperationalInfos result = new OperationalInfos();
+
+ List<String> entityKeyList = body.getEntityKey();
+ for (String entityKey : entityKeyList) {
+ org.apache.juddi.model.UddiEntity modelUddiEntity = null;
+ try {
+ modelUddiEntity = em.find(org.apache.juddi.model.UddiEntity.class, entityKey);
+ } catch (ClassCastException e) {}
+ if (modelUddiEntity == null)
+ throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.EntityNotFound", entityKey));
+
+ org.uddi.api_v3.OperationalInfo apiOperationalInfo = new org.uddi.api_v3.OperationalInfo();
+
+ MappingModelToApi.mapOperationalInfo(modelUddiEntity, apiOperationalInfo);
+
+ result.getOperationalInfo().add(apiOperationalInfo);
+ }
+
+ tx.commit();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(InquiryQuery.GET_OPERATIONALINFO, QueryStatus.SUCCESS, procTime);
+
+ return result;
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+
+
+ public ServiceDetail getServiceDetail(GetServiceDetail body)
+ throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+ try {
+ new ValidateInquiry(null).validateGetServiceDetail(body);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(InquiryQuery.GET_SERVICEDETAIL, QueryStatus.FAILED, procTime);
+ throw drfm;
+ }
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ if (isAuthenticated())
+ this.getEntityPublisher(em, body.getAuthInfo());
+
+ ServiceDetail result = new ServiceDetail();
+
+ List<String> serviceKeyList = body.getServiceKey();
+ for (String serviceKey : serviceKeyList) {
+ org.apache.juddi.model.BusinessService modelBusinessService = null;
+ try {
+ modelBusinessService = em.find(org.apache.juddi.model.BusinessService.class, serviceKey);
+ } catch (ClassCastException e){}
+ if (modelBusinessService == null)
+ throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ServiceNotFound", serviceKey));
+
+ org.uddi.api_v3.BusinessService apiBusinessService = new org.uddi.api_v3.BusinessService();
+
+ MappingModelToApi.mapBusinessService(modelBusinessService, apiBusinessService);
+
+ result.getBusinessService().add(apiBusinessService);
+ }
+
+ tx.commit();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(InquiryQuery.GET_SERVICEDETAIL, QueryStatus.SUCCESS, procTime);
+
+ return result;
+
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+
+
+ public TModelDetail getTModelDetail(GetTModelDetail body)
+ throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+ try {
+ new ValidateInquiry(null).validateGetTModelDetail(body);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(InquiryQuery.GET_TMODELDETAIL, QueryStatus.FAILED, procTime);
+ throw drfm;
+ }
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ if (isAuthenticated())
+ this.getEntityPublisher(em, body.getAuthInfo());
+
+ TModelDetail result = new TModelDetail();
+
+ List<String> tmodelKeyList = body.getTModelKey();
+ for (String tmodelKey : tmodelKeyList) {
+ org.apache.juddi.model.Tmodel modelTModel = null;
+ try {
+ modelTModel = em.find(org.apache.juddi.model.Tmodel.class, tmodelKey);
+ } catch (ClassCastException e) {}
+ if (modelTModel == null)
+ throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.TModelNotFound", tmodelKey));
+
+ org.uddi.api_v3.TModel apiTModel = new org.uddi.api_v3.TModel();
+
+ MappingModelToApi.mapTModel(modelTModel, apiTModel);
+
+ result.getTModel().add(apiTModel);
+ }
+
+ tx.commit();
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(InquiryQuery.GET_TMODELDETAIL, QueryStatus.SUCCESS, procTime);
+
+ return result;
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+
+ private boolean isAuthenticated() {
+ boolean result = false;
+ try {
+ result = AppConfig.getConfiguration().getBoolean(Property.JUDDI_AUTHENTICATE_INQUIRY);
+ } catch (ConfigurationException e) {
+ log.error("Configuration exception occurred retrieving: " + Property.JUDDI_AUTHENTICATE_INQUIRY, e);
+ }
+ return result;
+ }
+
+}
diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIPublicationImpl.java b/juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/UDDIPublicationImpl.java
similarity index 98%
rename from juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIPublicationImpl.java
rename to juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/UDDIPublicationImpl.java
index b6ace8199..0595ecf60 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIPublicationImpl.java
+++ b/juddi-core-openjpa/src/main/java/org/apache/juddi/api/impl/UDDIPublicationImpl.java
@@ -1,1603 +1,1603 @@
-/*
- * Copyright 2001-2008 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.juddi.api.impl;
-
-import java.io.StringWriter;
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.List;
-import javax.jws.WebService;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityTransaction;
-import javax.persistence.Query;
-import javax.xml.bind.JAXB;
-import javax.xml.datatype.DatatypeConfigurationException;
-import javax.xml.datatype.DatatypeFactory;
-import javax.xml.ws.Holder;
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.juddi.api.util.PublicationQuery;
-import org.apache.juddi.api.util.QueryStatus;
-import org.apache.juddi.config.AppConfig;
-import org.apache.juddi.config.PersistenceManager;
-import org.apache.juddi.config.Property;
-import org.apache.juddi.mapping.MappingApiToModel;
-import org.apache.juddi.mapping.MappingModelToApi;
-import org.apache.juddi.model.BindingTemplate;
-import org.apache.juddi.model.BusinessEntity;
-import org.apache.juddi.model.BusinessService;
-import org.apache.juddi.model.ChangeRecord;
-import org.apache.juddi.model.Signature;
-import org.apache.juddi.model.Tmodel;
-import org.apache.juddi.model.UddiEntityPublisher;
-import org.apache.juddi.query.FetchBusinessEntitiesQuery;
-import org.apache.juddi.query.FetchTModelsQuery;
-import org.apache.juddi.query.FindBusinessByPublisherQuery;
-import org.apache.juddi.query.FindPublisherAssertionByBusinessQuery;
-import org.apache.juddi.query.FindTModelByPublisherQuery;
-import org.apache.juddi.query.TModelQuery;
-import org.apache.juddi.query.util.DynamicQuery;
-import org.apache.juddi.query.util.FindQualifiers;
-import org.apache.juddi.replication.ReplicationNotifier;
-import org.apache.juddi.v3.error.ErrorMessage;
-import org.apache.juddi.v3.error.FatalErrorException;
-import org.apache.juddi.v3.error.InvalidValueException;
-import org.apache.juddi.validation.ValidatePublish;
-import org.uddi.api_v3.AddPublisherAssertions;
-import org.uddi.api_v3.AssertionStatusItem;
-import org.uddi.api_v3.BindingDetail;
-import org.uddi.api_v3.BusinessDetail;
-import org.uddi.api_v3.CompletionStatus;
-import org.uddi.api_v3.DeleteBinding;
-import org.uddi.api_v3.DeleteBusiness;
-import org.uddi.api_v3.DeletePublisherAssertions;
-import org.uddi.api_v3.DeleteService;
-import org.uddi.api_v3.DeleteTModel;
-import org.uddi.api_v3.GetRegisteredInfo;
-import org.uddi.api_v3.InfoSelection;
-import org.uddi.api_v3.ListDescription;
-import org.uddi.api_v3.OperationalInfo;
-import org.uddi.api_v3.PublisherAssertion;
-import org.uddi.api_v3.RegisteredInfo;
-import org.uddi.api_v3.SaveBinding;
-import org.uddi.api_v3.SaveBusiness;
-import org.uddi.api_v3.SaveService;
-import org.uddi.api_v3.SaveTModel;
-import org.uddi.api_v3.ServiceDetail;
-import org.uddi.api_v3.TModel;
-import org.uddi.api_v3.TModelDetail;
-import org.uddi.repl_v3.ChangeRecordDelete;
-import org.uddi.repl_v3.ChangeRecordDeleteAssertion;
-import org.uddi.repl_v3.ChangeRecordHide;
-import org.uddi.repl_v3.ChangeRecordIDType;
-import org.uddi.repl_v3.ChangeRecordNewData;
-import org.uddi.repl_v3.ChangeRecordNewDataConditional;
-import org.uddi.repl_v3.ChangeRecordPublisherAssertion;
-import org.uddi.v3_service.DispositionReportFaultMessage;
-import org.uddi.v3_service.UDDIPublicationPortType;
-
-/**
- * This class implements the UDDI Publication Service
- *
- * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a> (and many others)
- * @author <a href="mailto:alexoree@apache.org">Alex O'Ree</a> added support for
- * replication and several bug fixes
- */
-@WebService(serviceName = "UDDIPublicationService",
- endpointInterface = "org.uddi.v3_service.UDDIPublicationPortType",
- targetNamespace = "urn:uddi-org:api_v3_portType")
-public class UDDIPublicationImpl extends AuthenticatedService implements UDDIPublicationPortType {
-
- private static Log log = LogFactory.getLog(UDDIInquiryImpl.class);
- private UDDIServiceCounter serviceCounter;
-
-
- public UDDIPublicationImpl() {
- super();
- serviceCounter = ServiceCounterLifecycleResource.getServiceCounter(UDDIPublicationImpl.class);
-
- }
-
- @Override
- public void addPublisherAssertions(AddPublisherAssertions body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
-
- new ValidatePublish(publisher).validateAddPublisherAssertions(em, body);
-
- List<org.uddi.api_v3.PublisherAssertion> apiPubAssertionList = body.getPublisherAssertion();
- List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
- for (org.uddi.api_v3.PublisherAssertion apiPubAssertion : apiPubAssertionList) {
-
- org.apache.juddi.model.PublisherAssertion modelPubAssertion = new org.apache.juddi.model.PublisherAssertion();
-
- MappingApiToModel.mapPublisherAssertion(apiPubAssertion, modelPubAssertion);
-
- org.apache.juddi.model.PublisherAssertion existingPubAssertion = em.find(modelPubAssertion.getClass(), modelPubAssertion.getId());
- boolean persistNewAssertion = true;
- if (existingPubAssertion != null) {
- if (modelPubAssertion.getTmodelKey().equalsIgnoreCase(existingPubAssertion.getTmodelKey())
- && modelPubAssertion.getKeyName().equalsIgnoreCase(existingPubAssertion.getKeyName())
- && modelPubAssertion.getKeyValue().equalsIgnoreCase(existingPubAssertion.getKeyValue())) {
- // This pub assertion is already been "asserted". Simply need to set the "check" value on the existing (and persistent) assertion
- if (publisher.isOwner(existingPubAssertion.getBusinessEntityByFromKey())) {
- existingPubAssertion.setFromCheck("true");
- }
- if (publisher.isOwner(existingPubAssertion.getBusinessEntityByToKey())) {
- existingPubAssertion.setToCheck("true");
- }
- //it's also possible that the signatures have changed
- removeExistingPublisherAssertionSignatures(existingPubAssertion.getBusinessEntityByFromKey().getEntityKey(), existingPubAssertion.getBusinessEntityByToKey().getEntityKey(), em);
- savePushliserAssertionSignatures(existingPubAssertion.getBusinessEntityByFromKey().getEntityKey(), existingPubAssertion.getBusinessEntityByToKey().getEntityKey(), modelPubAssertion.getSignatures(), em);
-
- em.merge(existingPubAssertion);
- persistNewAssertion = false;
- changes.add(getChangeRecord_deletePublisherAssertion(apiPubAssertion, getNode(), existingPubAssertion.getToCheck().equalsIgnoreCase("false"), existingPubAssertion.getFromCheck().equalsIgnoreCase("false"), System.currentTimeMillis()));
- } else {
- // Otherwise, it is a new relationship between these entities. Remove the old one so the new one can be added.
- // TODO: the model only seems to allow one assertion per two business (primary key is fromKey and toKey). Spec seems to imply as
- // many relationships as desired (the differentiator would be the keyedRef values).
- removeExistingPublisherAssertionSignatures(existingPubAssertion.getBusinessEntityByFromKey().getEntityKey(), existingPubAssertion.getBusinessEntityByToKey().getEntityKey(), em);
- em.remove(existingPubAssertion);
- changes.add(getChangeRecord_deletePublisherAssertion(apiPubAssertion, getNode(), true, true, System.currentTimeMillis()));
- }
- }
-
- if (persistNewAssertion) {
- org.apache.juddi.model.BusinessEntity beFrom = em.find(org.apache.juddi.model.BusinessEntity.class, modelPubAssertion.getId().getFromKey());
- org.apache.juddi.model.BusinessEntity beTo = em.find(org.apache.juddi.model.BusinessEntity.class, modelPubAssertion.getId().getToKey());
- modelPubAssertion.setBusinessEntityByFromKey(beFrom);
- modelPubAssertion.setBusinessEntityByToKey(beTo);
-
- modelPubAssertion.setFromCheck("false");
- modelPubAssertion.setToCheck("false");
-
- if (publisher.isOwner(modelPubAssertion.getBusinessEntityByFromKey())) {
- modelPubAssertion.setFromCheck("true");
- }
- if (publisher.isOwner(modelPubAssertion.getBusinessEntityByToKey())) {
- modelPubAssertion.setToCheck("true");
- }
- modelPubAssertion.setModified(new Date());
- savePushliserAssertionSignatures(modelPubAssertion.getBusinessEntityByFromKey().getEntityKey(), modelPubAssertion.getBusinessEntityByToKey().getEntityKey(), modelPubAssertion.getSignatures(), em);
-
- em.persist(modelPubAssertion);
-
- changes.add(getChangeRecord_NewAssertion(apiPubAssertion, modelPubAssertion, getNode()));
-
- }
-
- }
-
- tx.commit();
- for (int i = 0; i < changes.size(); i++) {
- ReplicationNotifier.enqueue(changes.get(i));
- }
-
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.ADD_PUBLISHERASSERTIONS,
- QueryStatus.SUCCESS, procTime);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.ADD_PUBLISHERASSERTIONS, QueryStatus.FAILED, procTime);
- throw drfm;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- public void deleteBinding(DeleteBinding body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
-
- new ValidatePublish(publisher).validateDeleteBinding(em, body);
-
- List<String> entityKeyList = body.getBindingKey();
- List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
- for (String entityKey : entityKeyList) {
- deleteBinding(entityKey, em);
- changes.add(getChangeRecord_deleteBinding(entityKey, getNode()));
- }
- tx.commit();
- for (int i = 0; i < changes.size(); i++) {
- ReplicationNotifier.enqueue(changes.get(i));
- }
-
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.DELETE_BINDING,
- QueryStatus.SUCCESS, procTime);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.DELETE_BINDING, QueryStatus.FAILED, procTime);
- throw drfm;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- /**
- * deletes the referenced object, assuming authorization rules are
- * already processed and there is already an open transaction
- *
- * @param entityKey
- * @param em
- * @throws DispositionReportFaultMessage
- */
- protected void deleteBinding(String entityKey, EntityManager em) throws DispositionReportFaultMessage {
-
- Object obj = em.find(org.apache.juddi.model.BindingTemplate.class, entityKey);
-
- ((org.apache.juddi.model.BindingTemplate) obj).getBusinessService().setModifiedIncludingChildren(new Date());
- // JUDDI-421: now the businessEntity parent will have it's modifiedIncludingChildren set
- ((org.apache.juddi.model.BindingTemplate) obj).getBusinessService().getBusinessEntity().setModifiedIncludingChildren(new Date());
-
- em.remove(obj);
-
- }
-
- public void deleteBusiness(DeleteBusiness body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
-
- new ValidatePublish(publisher).validateDeleteBusiness(em, body);
-
- List<String> entityKeyList = body.getBusinessKey();
- List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
- for (String entityKey : entityKeyList) {
- deleteBusiness(entityKey, em);
- changes.add(getChangeRecord_deleteBusiness(entityKey, getNode()));
- }
-
- tx.commit();
- for (int i = 0; i < changes.size(); i++) {
- ReplicationNotifier.enqueue(changes.get(i));
- }
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.DELETE_BUSINESS, QueryStatus.SUCCESS, procTime);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.DELETE_BUSINESS, QueryStatus.FAILED, procTime);
- throw drfm;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- /**
- * deletes the referenced object, assuming authorization rules are
- * already processed and there is already an open transaction
- *
- * @param entityKey
- * @param em
- * @throws DispositionReportFaultMessage
- */
- protected void deleteBusiness(String key, EntityManager em) throws DispositionReportFaultMessage {
- Object obj = em.find(org.apache.juddi.model.BusinessEntity.class, key);
- em.remove(obj);
- }
-
- public void deletePublisherAssertions(DeletePublisherAssertions body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
-
- new ValidatePublish(publisher).validateDeletePublisherAssertions(em, body);
-
- List<org.uddi.api_v3.PublisherAssertion> entityList = body.getPublisherAssertion();
- List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
- for (org.uddi.api_v3.PublisherAssertion entity : entityList) {
- org.apache.juddi.model.PublisherAssertion modelPubAssertion = new org.apache.juddi.model.PublisherAssertion();
-
- MappingApiToModel.mapPublisherAssertion(entity, modelPubAssertion);
-
- org.apache.juddi.model.PublisherAssertion existingPubAssertion = em.find(org.apache.juddi.model.PublisherAssertion.class,
- modelPubAssertion.getId());
- if (existingPubAssertion == null) {
- throw new InvalidValueException(new ErrorMessage("E_assertionNotFound"));
- }
-
- boolean fromkey = publisher.isOwner(em.find(BusinessEntity.class, entity.getFromKey()));
- boolean tokey = publisher.isOwner(em.find(BusinessEntity.class, entity.getToKey()));
- if (fromkey) {
- existingPubAssertion.setFromCheck("false");
- }
- if (tokey) {
- existingPubAssertion.setToCheck("false");
- }
- if ("false".equalsIgnoreCase(existingPubAssertion.getToCheck())
- && "false".equalsIgnoreCase(existingPubAssertion.getFromCheck())) {
- logger.info("Publisher assertion updated database via replication");
- removeExistingPublisherAssertionSignatures(existingPubAssertion.getBusinessEntityByFromKey().getEntityKey(), existingPubAssertion.getBusinessEntityByToKey().getEntityKey(), em);
- em.remove(existingPubAssertion);
- } else {
- existingPubAssertion.setModified(new Date());
- logger.info("Publisher assertion updated database via replication");
- removeExistingPublisherAssertionSignatures(existingPubAssertion.getBusinessEntityByFromKey().getEntityKey(), existingPubAssertion.getBusinessEntityByToKey().getEntityKey(), em);
- savePushliserAssertionSignatures(existingPubAssertion.getBusinessEntityByFromKey().getEntityKey(),
- existingPubAssertion.getBusinessEntityByToKey().getEntityKey(), modelPubAssertion.getSignatures(), em);
- em.persist(existingPubAssertion);
- }
-
- changes.add(getChangeRecord_deletePublisherAssertion(entity, getNode(), tokey, fromkey, existingPubAssertion.getModified().getTime()));
- }
-
- tx.commit();
- for (int i = 0; i < changes.size(); i++) {
- ReplicationNotifier.enqueue(changes.get(i));
- }
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.DELETE_PUBLISHERASSERTIONS,
- QueryStatus.SUCCESS, procTime);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.DELETE_PUBLISHERASSERTIONS, QueryStatus.FAILED, procTime);
- throw drfm;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- /**
- * deletes the referenced object, assuming authorization rules are
- * already processed and there is already an open transaction. this is
- * primarily used to support replication calls, i.e. another node just
- * changed a PA record and let us know
- *
- * @param entityKey
- * @param em
- * @throws DispositionReportFaultMessage
- */
- protected void deletePublisherAssertion(org.uddi.repl_v3.ChangeRecordDeleteAssertion entity, EntityManager em) throws DispositionReportFaultMessage {
-
- org.apache.juddi.model.PublisherAssertion modelPubAssertion = new org.apache.juddi.model.PublisherAssertion();
-
- MappingApiToModel.mapPublisherAssertion(entity.getPublisherAssertion(), modelPubAssertion);
-
- org.apache.juddi.model.PublisherAssertion existingPubAssertion = em.find(org.apache.juddi.model.PublisherAssertion.class,
- modelPubAssertion.getId());
-
- if (existingPubAssertion == null) {
- throw new FatalErrorException(new ErrorMessage("E_assertionNotFound"));
- }
- boolean fromkey = entity.isFromBusinessCheck();// publisher.isOwner(em.find(BusinessEntity.class, entity.getFromKey()));
- boolean tokey = entity.isToBusinessCheck();// publisher.isOwner(em.find(BusinessEntity.class, entity.getToKey()));
- if (fromkey) {
- existingPubAssertion.setFromCheck("false");
- }
- if (tokey) {
- existingPubAssertion.setToCheck("false");
- }
- if ("false".equalsIgnoreCase(existingPubAssertion.getToCheck())
- && "false".equalsIgnoreCase(existingPubAssertion.getFromCheck())) {
- logger.info("Deletion of publisher assertion from database via replication");
- removeExistingPublisherAssertionSignatures(existingPubAssertion.getBusinessEntityByFromKey().getEntityKey(), existingPubAssertion.getBusinessEntityByToKey().getEntityKey(), em);
- em.remove(existingPubAssertion);
- } else {
- existingPubAssertion.setModified(new Date());
- logger.info("Publisher assertion updated database via replication");
- removeExistingPublisherAssertionSignatures(existingPubAssertion.getBusinessEntityByFromKey().getEntityKey(), existingPubAssertion.getBusinessEntityByToKey().getEntityKey(), em);
- savePushliserAssertionSignatures(existingPubAssertion.getBusinessEntityByFromKey().getEntityKey(),
- existingPubAssertion.getBusinessEntityByToKey().getEntityKey(), modelPubAssertion.getSignatures(), em);
- em.persist(existingPubAssertion);
- }
-
- }
-
- public void deleteService(DeleteService body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
-
- new ValidatePublish(publisher).validateDeleteService(em, body);
-
- List<String> entityKeyList = body.getServiceKey();
- List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
- for (String entityKey : entityKeyList) {
- deleteService(entityKey, em);
- changes.add(getChangeRecord_deleteService(entityKey, getNode()));
- }
-
- tx.commit();
- for (int i = 0; i < changes.size(); i++) {
- ReplicationNotifier.enqueue(changes.get(i));
- }
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.DELETE_SERVICE,
- QueryStatus.SUCCESS, procTime);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.DELETE_SERVICE, QueryStatus.FAILED, procTime);
- throw drfm;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- /**
- * deletes the referenced object, assuming authorization rules are
- * already processed and there is already an open transaction
- *
- * @param entityKey
- * @param em
- * @throws DispositionReportFaultMessage
- */
- protected void deleteService(String key, EntityManager em) throws DispositionReportFaultMessage {
- Object obj = em.find(org.apache.juddi.model.BusinessService.class, key);
- //((org.apache.juddi.model.BusinessService) obj).getBusinessEntity().setModifiedIncludingChildren(new Date());
- if (obj != null) {
- em.remove(obj);
- } else {
- logger.warn("Unable to remove service with the key '" + key + "', it doesn't exist in the database");
- }
- }
-
- /**
- * {@inheritDoc }
- */
- @Override
- public void deleteTModel(DeleteTModel body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
-
- new ValidatePublish(publisher).validateDeleteTModel(em, body);
-
- // tModels are only lazily deleted!
- List<String> entityKeyList = body.getTModelKey();
- List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
- for (String entityKey : entityKeyList) {
- deleteTModel(entityKey, em);
- changes.add(getChangeRecord_deleteTModelHide(entityKey, getNode()));
- }
-
- tx.commit();
-
- for (int i = 0; i < changes.size(); i++) {
- ReplicationNotifier.enqueue(changes.get(i));
- }
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.DELETE_TMODEL, QueryStatus.SUCCESS, procTime);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.DELETE_TMODEL, QueryStatus.FAILED, procTime);
- throw drfm;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- /**
- * deletes the referenced object, assuming authorization rules are
- * already processed and there is already an open transaction
- *
- * @param entityKey
- * @param em
- * @throws DispositionReportFaultMessage
- */
- protected void deleteTModel(String key, EntityManager em) {
- Object obj = em.find(org.apache.juddi.model.Tmodel.class, key);
- ((org.apache.juddi.model.Tmodel) obj).setDeleted(true);
- }
-
- /**
- * {@inheritDoc }
- */
- @Override
- public List<AssertionStatusItem> getAssertionStatusReport(String authInfo,
- CompletionStatus completionStatus)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, authInfo);
-
- List<org.uddi.api_v3.AssertionStatusItem> result = PublicationHelper.getAssertionStatusItemList(publisher, completionStatus, em);
-
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.GET_ASSERTIONSTATUSREPORT,
- QueryStatus.SUCCESS, procTime);
-
- return result;
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.GET_ASSERTIONSTATUSREPORT, QueryStatus.FAILED, procTime);
- throw drfm;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- public List<PublisherAssertion> getPublisherAssertions(String authInfo)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, authInfo);
-
- List<org.uddi.api_v3.PublisherAssertion> result = new ArrayList<org.uddi.api_v3.PublisherAssertion>(0);
-
- List<?> businessKeysFound = null;
- businessKeysFound = FindBusinessByPublisherQuery.select(em, null, publisher, businessKeysFound);
-
- List<org.apache.juddi.model.PublisherAssertion> pubAssertionList = FindPublisherAssertionByBusinessQuery.select(em, businessKeysFound, null);
- if (pubAssertionList != null) {
- for (org.apache.juddi.model.PublisherAssertion modelPubAssertion : pubAssertionList) {
- org.uddi.api_v3.PublisherAssertion apiPubAssertion = new org.uddi.api_v3.PublisherAssertion();
-
- MappingModelToApi.mapPublisherAssertion(modelPubAssertion, apiPubAssertion);
-
- result.add(apiPubAssertion);
- }
- }
-
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.GET_PUBLISHERASSERTIONS,
- QueryStatus.SUCCESS, procTime);
- return result;
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.GET_PUBLISHERASSERTIONS,
- QueryStatus.FAILED, procTime);
- throw drfm;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- /**
- * {@inheritdoc}
- *
- */
- public RegisteredInfo getRegisteredInfo(GetRegisteredInfo body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
-
- new ValidatePublish(publisher).validateRegisteredInfo(body);
-
- List<?> businessKeysFound = null;
- businessKeysFound = FindBusinessByPublisherQuery.select(em, null, publisher, businessKeysFound);
-
- List<?> tmodelKeysFound = null;
-
- if (body.getInfoSelection().equals(InfoSelection.HIDDEN)) {
- tmodelKeysFound = FindTModelByPublisherQuery.select(em, null, publisher, tmodelKeysFound, new DynamicQuery.Parameter(TModelQuery.ENTITY_ALIAS + ".deleted", Boolean.TRUE, DynamicQuery.PREDICATE_EQUALS));
- } else if (body.getInfoSelection().equals(InfoSelection.VISIBLE)) {
- tmodelKeysFound = FindTModelByPublisherQuery.select(em, null, publisher, tmodelKeysFound, new DynamicQuery.Parameter(TModelQuery.ENTITY_ALIAS + ".deleted", Boolean.FALSE, DynamicQuery.PREDICATE_EQUALS));
- } else {
- tmodelKeysFound = FindTModelByPublisherQuery.select(em, null, publisher, tmodelKeysFound);
- }
-
- RegisteredInfo result = new RegisteredInfo();
-
- // Sort and retrieve the final results
- List<?> queryResults = FetchBusinessEntitiesQuery.select(em, new FindQualifiers(), businessKeysFound, null, null, null);
- if (queryResults.size() > 0) {
- result.setBusinessInfos(new org.uddi.api_v3.BusinessInfos());
-
- for (Object item : queryResults) {
- org.apache.juddi.model.BusinessEntity modelBusinessEntity = (org.apache.juddi.model.BusinessEntity) item;
- org.uddi.api_v3.BusinessInfo apiBusinessInfo = new org.uddi.api_v3.BusinessInfo();
-
- MappingModelToApi.mapBusinessInfo(modelBusinessEntity, apiBusinessInfo);
-
- result.getBusinessInfos().getBusinessInfo().add(apiBusinessInfo);
- }
- }
-
- // Sort and retrieve the final results
- queryResults = FetchTModelsQuery.select(em, new FindQualifiers(), tmodelKeysFound, null, null, null);
- if (queryResults.size() > 0) {
- result.setTModelInfos(new org.uddi.api_v3.TModelInfos());
-
- for (Object item : queryResults) {
- org.apache.juddi.model.Tmodel modelTModel = (org.apache.juddi.model.Tmodel) item;
- org.uddi.api_v3.TModelInfo apiTModelInfo = new org.uddi.api_v3.TModelInfo();
-
- MappingModelToApi.mapTModelInfo(modelTModel, apiTModelInfo);
-
- result.getTModelInfos().getTModelInfo().add(apiTModelInfo);
- }
- }
-
- tx.commit();
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.GET_REGISTEREDINFO,
- QueryStatus.SUCCESS, procTime);
-
- return result;
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.GET_REGISTEREDINFO,
- QueryStatus.FAILED, procTime);
- throw drfm;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- /**
- * {@inheritdoc}
- *
- */
- public BindingDetail saveBinding(SaveBinding body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
- publisher.populateKeyGeneratorKeys(em);
- ValidatePublish validator = new ValidatePublish(publisher);
- validator.validateSaveBinding(em, body, null, publisher);
-
- BindingDetail result = new BindingDetail();
- result.setListDescription(new ListDescription());
- List<org.uddi.api_v3.BindingTemplate> apiBindingTemplateList = body.getBindingTemplate();
- List<org.apache.juddi.model.ChangeRecord> changes = new ArrayList<ChangeRecord>();
-
- for (org.uddi.api_v3.BindingTemplate apiBindingTemplate : apiBindingTemplateList) {
-
- org.apache.juddi.model.BindingTemplate modelBindingTemplate = new org.apache.juddi.model.BindingTemplate();
-
- org.apache.juddi.model.BusinessService modelBusinessService = new org.apache.juddi.model.BusinessService();
- modelBusinessService.setEntityKey(apiBindingTemplate.getServiceKey());
-
- MappingApiToModel.mapBindingTemplate(apiBindingTemplate, modelBindingTemplate, modelBusinessService);
-
- setOperationalInfo(em, modelBindingTemplate, publisher, true);
-
- em.persist(modelBindingTemplate);
-
- result.getBindingTemplate().add(apiBindingTemplate);
- result.getListDescription().setActualCount(result.getListDescription().getActualCount() + 1);
- result.getListDescription().setIncludeCount(result.getListDescription().getIncludeCount() + 1);
- validator.validateSaveBindingMax(em, modelBindingTemplate.getBusinessService().getEntityKey());
- changes.add(getChangeRecord(modelBindingTemplate, apiBindingTemplate, getNode()));
- }
-
- tx.commit();
- for (int i = 0; i < changes.size(); i++) {
- ReplicationNotifier.enqueue(changes.get(i));
- }
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.SAVE_BINDING,
- QueryStatus.SUCCESS, procTime);
-
- return result;
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.SAVE_BINDING,
- QueryStatus.FAILED, procTime);
- throw drfm;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- /**
- * {@inheritdoc}
- *
- */
- public BusinessDetail saveBusiness(SaveBusiness body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
- publisher.populateKeyGeneratorKeys(em);
- ValidatePublish validator = new ValidatePublish(publisher);
- validator.validateSaveBusiness(em, body, null, publisher);
-
- BusinessDetail result = new BusinessDetail();
-
- List<org.uddi.api_v3.BusinessEntity> apiBusinessEntityList = body.getBusinessEntity();
- List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
-
- for (org.uddi.api_v3.BusinessEntity apiBusinessEntity : apiBusinessEntityList) {
-
- org.apache.juddi.model.BusinessEntity modelBusinessEntity = new org.apache.juddi.model.BusinessEntity();
-
- MappingApiToModel.mapBusinessEntity(apiBusinessEntity, modelBusinessEntity);
-
- setOperationalInfo(em, modelBusinessEntity, publisher);
- log.debug("Saving business " + modelBusinessEntity.getEntityKey());
-
- em.persist(modelBusinessEntity);
- changes.add(getChangeRecord(modelBusinessEntity, apiBusinessEntity, getNode()));
- result.getBusinessEntity().add(apiBusinessEntity);
- }
-
- //check how many business this publisher owns.
- validator.validateSaveBusinessMax(em);
-
- tx.commit();
- for (int i = 0; i < changes.size(); i++) {
- ReplicationNotifier.enqueue(changes.get(i));
- }
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.SAVE_BUSINESS,
- QueryStatus.SUCCESS, procTime);
-
- return result;
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.SAVE_BUSINESS,
- QueryStatus.FAILED, procTime);
- throw drfm;
- } catch (Exception ex) {
- StringWriter sw = new StringWriter();
- if (body != null) {
- JAXB.marshal(body, sw);
- }
- log.fatal("unexpected error!" + sw.toString(), ex);
- throw new FatalErrorException(new ErrorMessage("E_fatalError", ex.getMessage()));
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- /**
- * {@inheritdoc}
- *
- */
- public ServiceDetail saveService(SaveService body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
- publisher.populateKeyGeneratorKeys(em);
- ValidatePublish validator = new ValidatePublish(publisher);
- validator.validateSaveService(em, body, null, publisher);
-
- ServiceDetail result = new ServiceDetail();
-
- List<org.uddi.api_v3.BusinessService> apiBusinessServiceList = body.getBusinessService();
- List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
- for (org.uddi.api_v3.BusinessService apiBusinessService : apiBusinessServiceList) {
-
- org.apache.juddi.model.BusinessService modelBusinessService = new org.apache.juddi.model.BusinessService();
- org.apache.juddi.model.BusinessEntity modelBusinessEntity = new org.apache.juddi.model.BusinessEntity();
- modelBusinessEntity.setEntityKey(apiBusinessService.getBusinessKey());
-
- MappingApiToModel.mapBusinessService(apiBusinessService, modelBusinessService, modelBusinessEntity);
-
- setOperationalInfo(em, modelBusinessService, publisher, false);
-
- em.persist(modelBusinessService);
-
- result.getBusinessService().add(apiBusinessService);
-
- validator.validateSaveServiceMax(em, modelBusinessService.getBusinessEntity().getEntityKey());
- changes.add(getChangeRecord(modelBusinessService, apiBusinessService, getNode()));
- }
-
- tx.commit();
- for (int i = 0; i < changes.size(); i++) {
- ReplicationNotifier.enqueue(changes.get(i));
- }
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.SAVE_SERVICE,
- QueryStatus.SUCCESS, procTime);
-
- return result;
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.SAVE_SERVICE,
- QueryStatus.FAILED, procTime);
- throw drfm;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- /**
- * {@inheritdoc}
- *
- */
- @Override
- public TModelDetail saveTModel(SaveTModel body)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
- publisher.populateKeyGeneratorKeys(em);
- new ValidatePublish(publisher).validateSaveTModel(em, body, null, publisher);
-
- TModelDetail result = new TModelDetail();
-
- List<org.uddi.api_v3.TModel> apiTModelList = body.getTModel();
- List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
- for (org.uddi.api_v3.TModel apiTModel : apiTModelList) {
-
- // Object obj=em.find( org.apache.juddi.model.Tmodel.class, apiTModel.getTModelKey());
- //just making changes to an existing tModel, no worries
- org.apache.juddi.model.Tmodel modelTModel = new org.apache.juddi.model.Tmodel();
-
- MappingApiToModel.mapTModel(apiTModel, modelTModel);
-
- setOperationalInfo(em, modelTModel, publisher);
-
- em.persist(modelTModel);
-
- result.getTModel().add(apiTModel);
- changes.add(getChangeRecord(modelTModel, apiTModel, getNode()));
- /*
- //TODO JUDDI-915
- if (obj != null) {
-
- changes.add(getChangeRecord(modelTModel, apiTModel, node));
- } else {
- //special case for replication, must setup a new data conditional change record
- changes.add(getChangeRecordConditional(modelTModel, apiTModel, node));
- }*/
-
- }
-
- tx.commit();
- for (int i = 0; i < changes.size(); i++) {
- ReplicationNotifier.enqueue(changes.get(i));
- }
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.SAVE_TMODEL,
- QueryStatus.SUCCESS, procTime);
-
- return result;
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.SAVE_TMODEL,
- QueryStatus.FAILED, procTime);
- throw drfm;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- /**
- * {@inheritdoc}
- *
- */
- @Override
- public void setPublisherAssertions(String authInfo,
- Holder<List<PublisherAssertion>> publisherAssertion)
- throws DispositionReportFaultMessage {
- long startTime = System.currentTimeMillis();
-
- EntityManager em = PersistenceManager.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
- try {
- tx.begin();
-
- UddiEntityPublisher publisher = this.getEntityPublisher(em, authInfo);
-
- new ValidatePublish(publisher).validateSetPublisherAssertions(em, publisherAssertion);
-
- List<?> businessKeysFound = null;
- businessKeysFound = FindBusinessByPublisherQuery.select(em, null, publisher, businessKeysFound);
-
- //TODO this has to be reworked to record what was deleted.
- // First, identify all previous assertions that need to be removed
- List<org.apache.juddi.model.PublisherAssertion> existingAssertions = FindPublisherAssertionByBusinessQuery.select(em, businessKeysFound, null);
-
- logger.debug(">>>> Existing assertions " + existingAssertions.size() + ", inbound set " + publisherAssertion.value.size());
- List<org.apache.juddi.model.PublisherAssertion> deleteMe = diff(publisherAssertion.value, existingAssertions);
- logger.debug(">>>> DIFF size is " + deleteMe.size());
- for (org.apache.juddi.model.PublisherAssertion del : deleteMe) {
- logger.debug(">>>> PROCESSING " + del.getBusinessEntityByFromKey().getEntityKey() + " " + del.getBusinessEntityByToKey().getEntityKey());
- boolean from = false;
- if (del.getFromCheck() != null) {
- del.getFromCheck().equalsIgnoreCase("true");
- }
- boolean to = false;
- if (del.getToCheck() != null) {
- del.getToCheck().equalsIgnoreCase("true");
- }
- if (publisher.isOwner(del.getBusinessEntityByFromKey())) {
- from = false;
- }
- if (publisher.isOwner(del.getBusinessEntityByToKey())) {
- to = false;
- }
- PublisherAssertion api = new PublisherAssertion();
- MappingModelToApi.mapPublisherAssertion(del, api);
-
- if (!to && !from) {
- logger.debug(">>>> DELETE ME " + del.getBusinessEntityByFromKey().getEntityKey() + " " + del.getBusinessEntityByToKey().getEntityKey());
- em.remove(del);
- } else {
- logger.debug(">>>> MERGING ME " + del.getBusinessEntityByFromKey().getEntityKey() + " " + del.getBusinessEntityByToKey().getEntityKey());
- del.setFromCheck(from ? "true" : "false");
- del.setToCheck(to ? "true" : "false");
- del.setModified(new Date());
- em.merge(del);
- }
- changes.add(getChangeRecord_deletePublisherAssertion(api, getNode(), to, from, System.currentTimeMillis()));
- }
- //DeletePublisherAssertionByBusinessQuery.delete(em, businessKeysFound);
-
- // Slate is clean for all assertions involving this publisher, now we simply need to add the new ones (and they will all be "new").
- /*List<org.uddi.api_v3.PublisherAssertion> apiPubAssertionList = publisherAssertion.value;
-
-
- for (org.uddi.api_v3.PublisherAssertion apiPubAssertion : apiPubAssertionList) {
-
- org.apache.juddi.model.PublisherAssertion modelPubAssertion = new org.apache.juddi.model.PublisherAssertion();
-
- MappingApiToModel.mapPublisherAssertion(apiPubAssertion, modelPubAssertion);
-
- org.apache.juddi.model.BusinessEntity beFrom = em.find(org.apache.juddi.model.BusinessEntity.class, modelPubAssertion.getId().getFromKey());
- org.apache.juddi.model.BusinessEntity beTo = em.find(org.apache.juddi.model.BusinessEntity.class, modelPubAssertion.getId().getToKey());
- modelPubAssertion.setBusinessEntityByFromKey(beFrom);
- modelPubAssertion.setBusinessEntityByToKey(beTo);
-
- modelPubAssertion.setFromCheck("false");
- modelPubAssertion.setToCheck("false");
-
- if (publisher.isOwner(modelPubAssertion.getBusinessEntityByFromKey())) {
- modelPubAssertion.setFromCheck("true");
- }
- if (publisher.isOwner(modelPubAssertion.getBusinessEntityByToKey())) {
- modelPubAssertion.setToCheck("true");
- }
- em.persist(modelPubAssertion);
-
- changes.add(getChangeRecord_NewAssertion(apiPubAssertion, modelPubAssertion, node));
-
- }*/
- tx.commit();
- if (!publisherAssertion.value.isEmpty()) {
- AddPublisherAssertions addPublisherAssertions = new AddPublisherAssertions();
- addPublisherAssertions.setAuthInfo(authInfo);
- addPublisherAssertions.getPublisherAssertion().addAll(publisherAssertion.value);
- addPublisherAssertions(addPublisherAssertions);
- }
- for (int i = 0; i < changes.size(); i++) {
- ReplicationNotifier.enqueue(changes.get(i));
- }
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.SET_PUBLISHERASSERTIONS,
- QueryStatus.SUCCESS, procTime);
- } catch (DispositionReportFaultMessage drfm) {
- long procTime = System.currentTimeMillis() - startTime;
- serviceCounter.update(PublicationQuery.SET_PUBLISHERASSERTIONS,
- QueryStatus.FAILED, procTime);
- throw drfm;
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- em.close();
- }
- }
-
- private void setOperationalInfo(EntityManager em, org.apache.juddi.model.BusinessEntity uddiEntity, UddiEntityPublisher publisher) throws DispositionReportFaultMessage {
-
- uddiEntity.setAuthorizedName(publisher.getAuthorizedName());
-
- Date now = new Date();
- uddiEntity.setModified(now);
- uddiEntity.setModifiedIncludingChildren(now);
-
- String nodeId = "";
- try {
- nodeId = AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID);
- } catch (ConfigurationException ce) {
- throw new FatalErrorException(new ErrorMessage("errors.configuration.Retrieval", Property.JUDDI_NODE_ID));
- }
- uddiEntity.setNodeId(nodeId);
-
- org.apache.juddi.model.BusinessEntity existingUddiEntity = em.find(uddiEntity.getClass(), uddiEntity.getEntityKey());
- if (existingUddiEntity != null) {
- uddiEntity.setCreated(existingUddiEntity.getCreated());
- } else {
- uddiEntity.setCreated(now);
- }
-
- List<org.apache.juddi.model.BusinessService> serviceList = uddiEntity.getBusinessServices();
- for (org.apache.juddi.model.BusinessService service : serviceList) {
- setOperationalInfo(em, service, publisher, true);
- }
-
- if (existingUddiEntity != null) {
- em.remove(existingUddiEntity);
- }
-
- }
-
- private void setOperationalInfo(EntityManager em, org.apache.juddi.model.BusinessService uddiEntity, UddiEntityPublisher publisher, boolean isChild) throws DispositionReportFaultMessage {
-
- uddiEntity.setAuthorizedName(publisher.getAuthorizedName());
-
- Date now = new Date();
- uddiEntity.setModified(now);
- uddiEntity.setModifiedIncludingChildren(now);
-
- if (!isChild) {
- org.apache.juddi.model.BusinessEntity parent = em.find(org.apache.juddi.model.BusinessEntity.class, uddiEntity.getBusinessEntity().getEntityKey());
- parent.setModifiedIncludingChildren(now);
- em.persist(parent);
- }
-
- String nodeId = "";
- try {
- nodeId = AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID);
- } catch (ConfigurationException ce) {
- throw new FatalErrorException(new ErrorMessage("errors.configuration.Retrieval", Property.JUDDI_NODE_ID));
- }
- uddiEntity.setNodeId(nodeId);
-
- org.apache.juddi.model.BusinessService existingUddiEntity = em.find(uddiEntity.getClass(), uddiEntity.getEntityKey());
- if (existingUddiEntity != null) {
- uddiEntity.setCreated(existingUddiEntity.getCreated());
- } else {
- uddiEntity.setCreated(now);
- }
-
- List<org.apache.juddi.model.BindingTemplate> bindingList = uddiEntity.getBindingTemplates();
- for (org.apache.juddi.model.BindingTemplate binding : bindingList) {
- setOperationalInfo(em, binding, publisher, true);
- }
-
- if (existingUddiEntity != null) {
- em.remove(existingUddiEntity);
- }
-
- }
-
- private void setOperationalInfo(EntityManager em, org.apache.juddi.model.BindingTemplate uddiEntity, UddiEntityPublisher publisher, boolean isChild) throws DispositionReportFaultMessage {
-
- uddiEntity.setAuthorizedName(publisher.getAuthorizedName());
-
- Date now = new Date();
- uddiEntity.setModified(now);
- uddiEntity.setModifiedIncludingChildren(now);
-
- //if (!isChild) {
- org.apache.juddi.model.BusinessService parent = em.find(org.apache.juddi.model.BusinessService.class, uddiEntity.getBusinessService().getEntityKey());
- if (parent != null) {
- parent.setModifiedIncludingChildren(now);
- em.persist(parent);
-
- // JUDDI-421: now the businessEntity parent will have it's modifiedIncludingChildren set
- org.apache.juddi.model.BusinessEntity businessParent = em.find(org.apache.juddi.model.BusinessEntity.class, parent.getBusinessEntity().getEntityKey());
- if (businessParent != null) {
- businessParent.setModifiedIncludingChildren(now);
- em.persist(businessParent);
- } else {
- logger.debug("Parent business is null for saved binding template!");
- }
- } else {
- logger.debug("Parent service is null for saved binding template!");
- }
- // }
-
- String nodeId = "";
- try {
- nodeId = AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID);
- } catch (ConfigurationException ce) {
- throw new FatalErrorException(new ErrorMessage("errors.configuration.Retrieval", Property.JUDDI_NODE_ID));
- }
- uddiEntity.setNodeId(nodeId);
-
- org.apache.juddi.model.BindingTemplate existingUddiEntity = em.find(uddiEntity.getClass(), uddiEntity.getEntityKey());
- if (existingUddiEntity != null) {
- uddiEntity.setCreated(existingUddiEntity.getCreated());
- } else {
- uddiEntity.setCreated(now);
- }
-
- if (existingUddiEntity != null) {
- em.remove(existingUddiEntity);
- }
-
- }
-
- private void setOperationalInfo(EntityManager em, org.apache.juddi.model.Tmodel uddiEntity, UddiEntityPublisher publisher) throws DispositionReportFaultMessage {
-
- uddiEntity.setAuthorizedName(publisher.getAuthorizedName());
-
- Date now = new Date();
- uddiEntity.setModified(now);
- uddiEntity.setModifiedIncludingChildren(now);
-
- String nodeId = "";
- try {
- nodeId = AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID);
- } catch (ConfigurationException ce) {
- throw new FatalErrorException(new ErrorMessage("errors.configuration.Retrieval", Property.JUDDI_NODE_ID));
- }
- uddiEntity.setNodeId(nodeId);
-
- org.apache.juddi.model.Tmodel existingUddiEntity = em.find(uddiEntity.getClass(), uddiEntity.getEntityKey());
- if (existingUddiEntity != null) {
- uddiEntity.setCreated(existingUddiEntity.getCreated());
- } else {
- uddiEntity.setCreated(now);
- }
-
- if (existingUddiEntity != null) {
- em.remove(existingUddiEntity);
- }
-
- }
-
- public static ChangeRecord getChangeRecord(BindingTemplate modelBindingTemplate, org.uddi.api_v3.BindingTemplate api, String node) throws DispositionReportFaultMessage {
- ChangeRecord cr = new ChangeRecord();
- cr.setEntityKey(modelBindingTemplate.getEntityKey());
- cr.setNodeID(node);
-
- cr.setRecordType(ChangeRecord.RecordType.ChangeRecordNewData);
- org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
- crapi.setChangeID(new ChangeRecordIDType(node, -1L));
- crapi.setChangeRecordNewData(new ChangeRecordNewData());
- crapi.getChangeRecordNewData().setBindingTemplate(api);
- crapi.getChangeRecordNewData().setOperationalInfo(new OperationalInfo());
- MappingModelToApi.mapOperationalInfo(modelBindingTemplate, crapi.getChangeRecordNewData().getOperationalInfo());
- StringWriter sw = new StringWriter();
- JAXB.marshal(crapi, sw);
- try {
- cr.setContents(sw.toString().getBytes("UTF8"));
- } catch (UnsupportedEncodingException ex) {
- logger.error(ex);
- }
- return cr;
- }
-
- public static ChangeRecord getChangeRecord(BusinessService model, org.uddi.api_v3.BusinessService api, String node) throws DispositionReportFaultMessage {
- ChangeRecord cr = new ChangeRecord();
- cr.setEntityKey(model.getEntityKey());
- cr.setNodeID(node);
-
- cr.setRecordType(ChangeRecord.RecordType.ChangeRecordNewData);
- org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
- crapi.setChangeID(new ChangeRecordIDType(node, -1L));
- crapi.setChangeRecordNewData(new ChangeRecordNewData());
- crapi.getChangeRecordNewData().setBusinessService(api);
- crapi.getChangeRecordNewData().setOperationalInfo(new OperationalInfo());
- MappingModelToApi.mapOperationalInfo(model, crapi.getChangeRecordNewData().getOperationalInfo());
- StringWriter sw = new StringWriter();
- JAXB.marshal(crapi, sw);
- try {
- cr.setContents(sw.toString().getBytes("UTF8"));
- } catch (UnsupportedEncodingException ex) {
- logger.error(ex);
- }
- return cr;
- }
-
- public ChangeRecord getChangeRecord_deleteBusiness(String entityKey, String node) {
- ChangeRecord cr = new ChangeRecord();
- cr.setEntityKey(entityKey);
- cr.setNodeID(node);
-
- cr.setRecordType(ChangeRecord.RecordType.ChangeRecordDelete);
- org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
- crapi.setChangeID(new ChangeRecordIDType(node, -1L));
- crapi.setChangeRecordDelete(new ChangeRecordDelete());
- crapi.getChangeRecordDelete().setBusinessKey(entityKey);
- crapi.getChangeRecordDelete().setModified(df.newXMLGregorianCalendar(new GregorianCalendar()));
-
- StringWriter sw = new StringWriter();
- JAXB.marshal(crapi, sw);
- try {
- cr.setContents(sw.toString().getBytes("UTF8"));
- } catch (UnsupportedEncodingException ex) {
- logger.error(ex);
- }
- return cr;
- }
-
- public ChangeRecord getChangeRecord_deleteService(String entityKey, String node) {
- ChangeRecord cr = new ChangeRecord();
- cr.setEntityKey(entityKey);
- cr.setNodeID(node);
-
- cr.setRecordType(ChangeRecord.RecordType.ChangeRecordDelete);
- org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
- crapi.setChangeID(new ChangeRecordIDType(node, -1L));
- crapi.setChangeRecordDelete(new ChangeRecordDelete());
- crapi.getChangeRecordDelete().setServiceKey(entityKey);
- crapi.getChangeRecordDelete().setModified(df.newXMLGregorianCalendar(new GregorianCalendar()));
-
- StringWriter sw = new StringWriter();
- JAXB.marshal(crapi, sw);
- try {
- cr.setContents(sw.toString().getBytes("UTF8"));
- } catch (UnsupportedEncodingException ex) {
- logger.error(ex);
- }
- return cr;
- }
-
- /**
- * this is for "hiding" a tmodel, not removing it entirely
- *
- * @param entityKey
- * @param node
- * @return
- */
- public ChangeRecord getChangeRecord_deleteTModelHide(String entityKey, String node) {
- ChangeRecord cr = new ChangeRecord();
- cr.setEntityKey(entityKey);
- cr.setNodeID(node);
- cr.setRecordType(ChangeRecord.RecordType.ChangeRecordHide);
- org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
- crapi.setChangeID(new ChangeRecordIDType(node, -1L));
-
- crapi.setChangeRecordHide(new ChangeRecordHide());
- crapi.getChangeRecordHide().setTModelKey(entityKey);
- crapi.getChangeRecordHide().setModified(df.newXMLGregorianCalendar(new GregorianCalendar()));
-
- StringWriter sw = new StringWriter();
- JAXB.marshal(crapi, sw);
- //JAXB.marshal(crapi, System.out);
- try {
- cr.setContents(sw.toString().getBytes("UTF8"));
- } catch (UnsupportedEncodingException ex) {
- logger.error(ex);
- }
- return cr;
- }
-
- /**
- * this is for deleting a tmodel, not hiding it
- *
- * @param entityKey
- * @param node
- * @return
- */
- public static ChangeRecord getChangeRecord_deleteTModelDelete(String entityKey, String node, DatatypeFactory df) {
- ChangeRecord cr = new ChangeRecord();
- cr.setEntityKey(entityKey);
- cr.setNodeID(node);
- cr.setRecordType(ChangeRecord.RecordType.ChangeRecordDelete);
- org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
- crapi.setChangeID(new ChangeRecordIDType(node, -1L));
-
- crapi.setChangeRecordDelete(new ChangeRecordDelete());
- crapi.getChangeRecordDelete().setTModelKey(entityKey);
- crapi.getChangeRecordDelete().setModified(df.newXMLGregorianCalendar(new GregorianCalendar()));
-
- StringWriter sw = new StringWriter();
- JAXB.marshal(crapi, sw);
- //JAXB.marshal(crapi, System.out);
- try {
- cr.setContents(sw.toString().getBytes("UTF8"));
- } catch (UnsupportedEncodingException ex) {
- logger.error(ex);
- }
- return cr;
- }
-
- public static ChangeRecord getChangeRecord(BusinessEntity modelBusinessEntity, org.uddi.api_v3.BusinessEntity apiBusinessEntity, String node) throws DispositionReportFaultMessage {
- ChangeRecord cr = new ChangeRecord();
- cr.setEntityKey(modelBusinessEntity.getEntityKey());
- cr.setNodeID(node);
-
- cr.setRecordType(ChangeRecord.RecordType.ChangeRecordNewData);
- org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
- crapi.setChangeID(new ChangeRecordIDType(node, -1L));
- crapi.setChangeRecordNewData(new ChangeRecordNewData());
- crapi.getChangeRecordNewData().setBusinessEntity(apiBusinessEntity);
- crapi.getChangeRecordNewData().setOperationalInfo(new OperationalInfo());
- MappingModelToApi.mapOperationalInfo(modelBusinessEntity, crapi.getChangeRecordNewData().getOperationalInfo());
- StringWriter sw = new StringWriter();
- JAXB.marshal(crapi, sw);
- try {
- cr.setContents(sw.toString().getBytes("UTF8"));
- } catch (UnsupportedEncodingException ex) {
- logger.error(ex);
- }
- return cr;
- }
-
- public static ChangeRecord getChangeRecord(Tmodel modelBusinessEntity, org.uddi.api_v3.TModel apiBusinessEntity, String node) throws DispositionReportFaultMessage {
- ChangeRecord cr = new ChangeRecord();
- if (!apiBusinessEntity.getTModelKey().equals(modelBusinessEntity.getEntityKey())) {
- throw new FatalErrorException(new ErrorMessage("E_fatalError", "the model and api keys do not match when saving a tmodel!"));
- }
- cr.setEntityKey(modelBusinessEntity.getEntityKey());
- cr.setNodeID(node);
-
- cr.setRecordType(ChangeRecord.RecordType.ChangeRecordNewData);
- org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
- crapi.setChangeID(new ChangeRecordIDType(node, -1L));
- crapi.setChangeRecordNewData(new ChangeRecordNewData());
- crapi.getChangeRecordNewData().setTModel(apiBusinessEntity);
- crapi.getChangeRecordNewData().getTModel().setTModelKey(modelBusinessEntity.getEntityKey());
- crapi.getChangeRecordNewData().setOperationalInfo(new OperationalInfo());
- MappingModelToApi.mapOperationalInfo(modelBusinessEntity, crapi.getChangeRecordNewData().getOperationalInfo());
- StringWriter sw = new StringWriter();
- JAXB.marshal(crapi, sw);
- try {
- cr.setContents(sw.toString().getBytes("UTF8"));
- } catch (UnsupportedEncodingException ex) {
- logger.error(ex);
- }
- return cr;
- }
-
- public ChangeRecord getChangeRecord_deleteBinding(String entityKey, String node) {
- ChangeRecord cr = new ChangeRecord();
- cr.setEntityKey(entityKey);
- cr.setNodeID(node);
-
- cr.setRecordType(ChangeRecord.RecordType.ChangeRecordDelete);
- org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
- crapi.setChangeID(new ChangeRecordIDType(node, -1L));
- crapi.setChangeRecordDelete(new ChangeRecordDelete());
- crapi.getChangeRecordDelete().setBindingKey(entityKey);
- crapi.getChangeRecordDelete().setModified(df.newXMLGregorianCalendar(new GregorianCalendar()));
-
- StringWriter sw = new StringWriter();
- JAXB.marshal(crapi, sw);
- try {
- cr.setContents(sw.toString().getBytes("UTF8"));
- } catch (UnsupportedEncodingException ex) {
- logger.error(ex);
- }
- return cr;
- }
-
- public ChangeRecord getChangeRecord_deletePublisherAssertion(PublisherAssertion entity, String node, boolean ToBusinessDelete, boolean FromBusinessDelete, long timestamp) {
- ChangeRecord cr = new ChangeRecord();
-
- cr.setNodeID(node);
-
- cr.setRecordType(ChangeRecord.RecordType.ChangeRecordDeleteAssertion);
- org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
- crapi.setChangeID(new ChangeRecordIDType(node, -1L));
- crapi.setChangeRecordDeleteAssertion(new ChangeRecordDeleteAssertion());
- crapi.getChangeRecordDeleteAssertion().setPublisherAssertion(entity);
- crapi.getChangeRecordDeleteAssertion().setToBusinessCheck(ToBusinessDelete);
- crapi.getChangeRecordDeleteAssertion().setFromBusinessCheck(FromBusinessDelete);
- GregorianCalendar gcal = new GregorianCalendar();
- gcal.setTimeInMillis(timestamp);
- crapi.getChangeRecordDeleteAssertion().setModified(df.newXMLGregorianCalendar(gcal));
-
- StringWriter sw = new StringWriter();
- JAXB.marshal(crapi, sw);
- try {
- cr.setContents(sw.toString().getBytes("UTF8"));
- } catch (UnsupportedEncodingException ex) {
- logger.error(ex);
- }
- return cr;
- }
-
- public ChangeRecord getChangeRecord_NewAssertion(PublisherAssertion apiPubAssertion, org.apache.juddi.model.PublisherAssertion modelPubAssertion, String node) {
- ChangeRecord cr = new ChangeRecord();
-
- cr.setNodeID(node);
-
- cr.setRecordType(ChangeRecord.RecordType.ChangeRecordPublisherAssertion);
- org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
- crapi.setChangeID(new ChangeRecordIDType(node, -1L));
- crapi.setChangeRecordPublisherAssertion(new ChangeRecordPublisherAssertion());
- crapi.getChangeRecordPublisherAssertion().setFromBusinessCheck(modelPubAssertion.getFromCheck().equalsIgnoreCase("true"));
- crapi.getChangeRecordPublisherAssertion().setToBusinessCheck(modelPubAssertion.getToCheck().equalsIgnoreCase("true"));
- crapi.getChangeRecordPublisherAssertion().setPublisherAssertion(apiPubAssertion);
-
- crapi.getChangeRecordPublisherAssertion().setModified(df.newXMLGregorianCalendar(new GregorianCalendar()));
-
- StringWriter sw = new StringWriter();
- JAXB.marshal(crapi, sw);
- try {
- cr.setContents(sw.toString().getBytes("UTF8"));
- } catch (UnsupportedEncodingException ex) {
- logger.error(ex);
- }
- return cr;
- }
-
- /**
- *
- * @param value keep these
- * @param existingAssertions return a list of these that are NOT in
- * 'value'
- * @return
- * @throws DispositionReportFaultMessage
- */
- private List<org.apache.juddi.model.PublisherAssertion> diff(List<PublisherAssertion> value, List<org.apache.juddi.model.PublisherAssertion> existingAssertions) throws DispositionReportFaultMessage {
- List<org.apache.juddi.model.PublisherAssertion> ret = new ArrayList<org.apache.juddi.model.PublisherAssertion>();
- if (value == null || value.isEmpty()) {
- return existingAssertions;
- }
- if (existingAssertions == null) {
- return new ArrayList<org.apache.juddi.model.PublisherAssertion>();
- }
- for (org.apache.juddi.model.PublisherAssertion model : existingAssertions) {
-
- boolean found = false;
- for (PublisherAssertion paapi : value) {
- if (model.getBusinessEntityByFromKey().getEntityKey().equalsIgnoreCase(paapi.getFromKey())
- && model.getBusinessEntityByToKey().getEntityKey().equalsIgnoreCase(paapi.getToKey())
- && model.getKeyName().equals(paapi.getKeyedReference().getKeyName())
- && model.getKeyValue().equals(paapi.getKeyedReference().getKeyValue())
- && model.getTmodelKey().equalsIgnoreCase(paapi.getKeyedReference().getTModelKey())) {
- found = true;
- break;
- }
- }
- if (!found) {
- ret.add(model);
- }
- }
- return ret;
- }
-
- private static ChangeRecord getChangeRecordConditional(Tmodel modelTModel, TModel apiTModel, String node) throws DispositionReportFaultMessage {
- ChangeRecord cr = new ChangeRecord();
- if (!apiTModel.getTModelKey().equals(modelTModel.getEntityKey())) {
- throw new FatalErrorException(new ErrorMessage("E_fatalError", "the model and api keys do not match when saving a tmodel!"));
- }
- cr.setEntityKey(modelTModel.getEntityKey());
- cr.setNodeID(node);
-
- cr.setRecordType(ChangeRecord.RecordType.ChangeRecordNewDataConditional);
- org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
- crapi.setChangeID(new ChangeRecordIDType(node, -1L));
- crapi.setChangeRecordNewDataConditional(new ChangeRecordNewDataConditional());
- crapi.getChangeRecordNewDataConditional().setChangeRecordNewData(new ChangeRecordNewData());
- crapi.getChangeRecordNewDataConditional().getChangeRecordNewData().setTModel(apiTModel);
- crapi.getChangeRecordNewDataConditional().getChangeRecordNewData().getTModel().setTModelKey(modelTModel.getEntityKey());
- crapi.getChangeRecordNewDataConditional().getChangeRecordNewData().setOperationalInfo(new OperationalInfo());
- MappingModelToApi.mapOperationalInfo(modelTModel, crapi.getChangeRecordNewDataConditional().getChangeRecordNewData().getOperationalInfo());
- StringWriter sw = new StringWriter();
- JAXB.marshal(crapi, sw);
- try {
- cr.setContents(sw.toString().getBytes("UTF8"));
- } catch (UnsupportedEncodingException ex) {
- logger.error(ex);
- }
- return cr;
- }
-
- private void removeExistingPublisherAssertionSignatures(String from, String to, EntityManager em) {
- Query createQuery = em.createQuery("delete from Signature pa where pa.publisherAssertionFromKey=:from and pa.publisherAssertionToKey=:to");
- createQuery.setParameter("from", from);
- createQuery.setParameter("to", to);
- createQuery.executeUpdate();
- }
-
- private void savePushliserAssertionSignatures(String from, String to, List<Signature> signatures, EntityManager em) {
- if (signatures == null) {
- return;
- }
- for (Signature s : signatures) {
- s.setPublisherAssertionFromKey(from);
- s.setPublisherAssertionToKey(to);
- em.persist(s);
- }
- }
-
-}
+/*
+ * Copyright 2001-2008 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.juddi.api.impl;
+
+import java.io.StringWriter;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.List;
+import javax.jws.WebService;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityTransaction;
+import javax.persistence.Query;
+import javax.xml.bind.JAXB;
+import javax.xml.datatype.DatatypeConfigurationException;
+import javax.xml.datatype.DatatypeFactory;
+import javax.xml.ws.Holder;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.juddi.api.util.PublicationQuery;
+import org.apache.juddi.api.util.QueryStatus;
+import org.apache.juddi.config.AppConfig;
+import org.apache.juddi.config.PersistenceManager;
+import org.apache.juddi.config.Property;
+import org.apache.juddi.mapping.MappingApiToModel;
+import org.apache.juddi.mapping.MappingModelToApi;
+import org.apache.juddi.model.BindingTemplate;
+import org.apache.juddi.model.BusinessEntity;
+import org.apache.juddi.model.BusinessService;
+import org.apache.juddi.model.ChangeRecord;
+import org.apache.juddi.model.Signature;
+import org.apache.juddi.model.Tmodel;
+import org.apache.juddi.model.UddiEntityPublisher;
+import org.apache.juddi.query.FetchBusinessEntitiesQuery;
+import org.apache.juddi.query.FetchTModelsQuery;
+import org.apache.juddi.query.FindBusinessByPublisherQuery;
+import org.apache.juddi.query.FindPublisherAssertionByBusinessQuery;
+import org.apache.juddi.query.FindTModelByPublisherQuery;
+import org.apache.juddi.query.TModelQuery;
+import org.apache.juddi.query.util.DynamicQuery;
+import org.apache.juddi.query.util.FindQualifiers;
+import org.apache.juddi.replication.ReplicationNotifier;
+import org.apache.juddi.v3.error.ErrorMessage;
+import org.apache.juddi.v3.error.FatalErrorException;
+import org.apache.juddi.v3.error.InvalidValueException;
+import org.apache.juddi.validation.ValidatePublish;
+import org.uddi.api_v3.AddPublisherAssertions;
+import org.uddi.api_v3.AssertionStatusItem;
+import org.uddi.api_v3.BindingDetail;
+import org.uddi.api_v3.BusinessDetail;
+import org.uddi.api_v3.CompletionStatus;
+import org.uddi.api_v3.DeleteBinding;
+import org.uddi.api_v3.DeleteBusiness;
+import org.uddi.api_v3.DeletePublisherAssertions;
+import org.uddi.api_v3.DeleteService;
+import org.uddi.api_v3.DeleteTModel;
+import org.uddi.api_v3.GetRegisteredInfo;
+import org.uddi.api_v3.InfoSelection;
+import org.uddi.api_v3.ListDescription;
+import org.uddi.api_v3.OperationalInfo;
+import org.uddi.api_v3.PublisherAssertion;
+import org.uddi.api_v3.RegisteredInfo;
+import org.uddi.api_v3.SaveBinding;
+import org.uddi.api_v3.SaveBusiness;
+import org.uddi.api_v3.SaveService;
+import org.uddi.api_v3.SaveTModel;
+import org.uddi.api_v3.ServiceDetail;
+import org.uddi.api_v3.TModel;
+import org.uddi.api_v3.TModelDetail;
+import org.uddi.repl_v3.ChangeRecordDelete;
+import org.uddi.repl_v3.ChangeRecordDeleteAssertion;
+import org.uddi.repl_v3.ChangeRecordHide;
+import org.uddi.repl_v3.ChangeRecordIDType;
+import org.uddi.repl_v3.ChangeRecordNewData;
+import org.uddi.repl_v3.ChangeRecordNewDataConditional;
+import org.uddi.repl_v3.ChangeRecordPublisherAssertion;
+import org.uddi.v3_service.DispositionReportFaultMessage;
+import org.uddi.v3_service.UDDIPublicationPortType;
+
+/**
+ * This class implements the UDDI Publication Service
+ *
+ * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a> (and many others)
+ * @author <a href="mailto:alexoree@apache.org">Alex O'Ree</a> added support for
+ * replication and several bug fixes
+ */
+@WebService(serviceName = "UDDIPublicationService",
+ endpointInterface = "org.uddi.v3_service.UDDIPublicationPortType",
+ targetNamespace = "urn:uddi-org:api_v3_portType")
+public class UDDIPublicationImpl extends AuthenticatedService implements UDDIPublicationPortType {
+
+ private static Log log = LogFactory.getLog(UDDIInquiryImpl.class);
+ private UDDIServiceCounter serviceCounter;
+
+
+ public UDDIPublicationImpl() {
+ super();
+ serviceCounter = ServiceCounterLifecycleResource.getServiceCounter(UDDIPublicationImpl.class);
+
+ }
+
+ @Override
+ public void addPublisherAssertions(AddPublisherAssertions body)
+ throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
+
+ new ValidatePublish(publisher).validateAddPublisherAssertions(em, body);
+
+ List<org.uddi.api_v3.PublisherAssertion> apiPubAssertionList = body.getPublisherAssertion();
+ List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
+ for (org.uddi.api_v3.PublisherAssertion apiPubAssertion : apiPubAssertionList) {
+
+ org.apache.juddi.model.PublisherAssertion modelPubAssertion = new org.apache.juddi.model.PublisherAssertion();
+
+ MappingApiToModel.mapPublisherAssertion(apiPubAssertion, modelPubAssertion);
+
+ org.apache.juddi.model.PublisherAssertion existingPubAssertion = em.find(modelPubAssertion.getClass(), modelPubAssertion.getId());
+ boolean persistNewAssertion = true;
+ if (existingPubAssertion != null) {
+ if (modelPubAssertion.getTmodelKey().equalsIgnoreCase(existingPubAssertion.getTmodelKey())
+ && modelPubAssertion.getKeyName().equalsIgnoreCase(existingPubAssertion.getKeyName())
+ && modelPubAssertion.getKeyValue().equalsIgnoreCase(existingPubAssertion.getKeyValue())) {
+ // This pub assertion is already been "asserted". Simply need to set the "check" value on the existing (and persistent) assertion
+ if (publisher.isOwner(existingPubAssertion.getBusinessEntityByFromKey())) {
+ existingPubAssertion.setFromCheck("true");
+ }
+ if (publisher.isOwner(existingPubAssertion.getBusinessEntityByToKey())) {
+ existingPubAssertion.setToCheck("true");
+ }
+ //it's also possible that the signatures have changed
+ removeExistingPublisherAssertionSignatures(existingPubAssertion.getBusinessEntityByFromKey().getEntityKey(), existingPubAssertion.getBusinessEntityByToKey().getEntityKey(), em);
+ savePushliserAssertionSignatures(existingPubAssertion.getBusinessEntityByFromKey().getEntityKey(), existingPubAssertion.getBusinessEntityByToKey().getEntityKey(), modelPubAssertion.getSignatures(), em);
+
+ em.merge(existingPubAssertion);
+ persistNewAssertion = false;
+ changes.add(getChangeRecord_deletePublisherAssertion(apiPubAssertion, getNode(), existingPubAssertion.getToCheck().equalsIgnoreCase("false"), existingPubAssertion.getFromCheck().equalsIgnoreCase("false"), System.currentTimeMillis()));
+ } else {
+ // Otherwise, it is a new relationship between these entities. Remove the old one so the new one can be added.
+ // TODO: the model only seems to allow one assertion per two business (primary key is fromKey and toKey). Spec seems to imply as
+ // many relationships as desired (the differentiator would be the keyedRef values).
+ removeExistingPublisherAssertionSignatures(existingPubAssertion.getBusinessEntityByFromKey().getEntityKey(), existingPubAssertion.getBusinessEntityByToKey().getEntityKey(), em);
+ em.remove(existingPubAssertion);
+ changes.add(getChangeRecord_deletePublisherAssertion(apiPubAssertion, getNode(), true, true, System.currentTimeMillis()));
+ }
+ }
+
+ if (persistNewAssertion) {
+ org.apache.juddi.model.BusinessEntity beFrom = em.find(org.apache.juddi.model.BusinessEntity.class, modelPubAssertion.getId().getFromKey());
+ org.apache.juddi.model.BusinessEntity beTo = em.find(org.apache.juddi.model.BusinessEntity.class, modelPubAssertion.getId().getToKey());
+ modelPubAssertion.setBusinessEntityByFromKey(beFrom);
+ modelPubAssertion.setBusinessEntityByToKey(beTo);
+
+ modelPubAssertion.setFromCheck("false");
+ modelPubAssertion.setToCheck("false");
+
+ if (publisher.isOwner(modelPubAssertion.getBusinessEntityByFromKey())) {
+ modelPubAssertion.setFromCheck("true");
+ }
+ if (publisher.isOwner(modelPubAssertion.getBusinessEntityByToKey())) {
+ modelPubAssertion.setToCheck("true");
+ }
+ modelPubAssertion.setModified(new Date());
+ savePushliserAssertionSignatures(modelPubAssertion.getBusinessEntityByFromKey().getEntityKey(), modelPubAssertion.getBusinessEntityByToKey().getEntityKey(), modelPubAssertion.getSignatures(), em);
+
+ em.persist(modelPubAssertion);
+
+ changes.add(getChangeRecord_NewAssertion(apiPubAssertion, modelPubAssertion, getNode()));
+
+ }
+
+ }
+
+ tx.commit();
+ for (int i = 0; i < changes.size(); i++) {
+ ReplicationNotifier.enqueue(changes.get(i));
+ }
+
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(PublicationQuery.ADD_PUBLISHERASSERTIONS,
+ QueryStatus.SUCCESS, procTime);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(PublicationQuery.ADD_PUBLISHERASSERTIONS, QueryStatus.FAILED, procTime);
+ throw drfm;
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+
+ public void deleteBinding(DeleteBinding body)
+ throws DispositionReportFaultMessage {
+ long startTime = System.currentTimeMillis();
+
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+
+ UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
+
+ new ValidatePublish(publisher).validateDeleteBinding(em, body);
+
+ List<String> entityKeyList = body.getBindingKey();
+ List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
+ for (String entityKey : entityKeyList) {
+ deleteBinding(entityKey, em);
+ changes.add(getChangeRecord_deleteBinding(entityKey, getNode()));
+ }
+ tx.commit();
+ for (int i = 0; i < changes.size(); i++) {
+ ReplicationNotifier.enqueue(changes.get(i));
+ }
+
+ long procTime = System.currentTimeMillis() - startTime;
+ serviceCounter.update(PublicationQuery.DELETE_BINDING,
+ QueryStatus.SUCCESS, procTime);
+ } catch (DispositionReportFaultMessage drfm) {
+ long procTime = System.currentTimeMillis() - startTime;
... 65739 lines suppressed ...
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@juddi.apache.org
For additional commands, e-mail: commits-help@juddi.apache.org