public BindingDetail findBinding(FindBinding body) throws DispositionReportFaultMessage { long startTime = System.nanoTime(); try { new ValidateInquiry(null).validateFindBinding(body); } catch (DispositionReportFaultMessage drfm) { long procTime = System.nanoTime() - 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()); 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); if (keysFound.size() == 0) { if (body.getServiceKey() != null) { // 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 { em.find(org.apache.juddi.model.BusinessService.class, serviceKey); } catch (ClassCastException e) { } if (modelBusinessService == null) throw new InvalidKeyPassedException( new ErrorMessage("errors.invalidkey.ServiceNotFound", serviceKey)); } } BindingDetail result = InquiryHelper.getBindingDetailFromKeys(body, findQualifiers, em, keysFound); tx.rollback(); long procTime = System.nanoTime() - startTime; serviceCounter.update(InquiryQuery.FIND_BINDING, QueryStatus.SUCCESS, procTime); return result; } finally { if (tx.isActive()) { tx.rollback(); } em.close(); } }