001 /**
002 * Copyright 2005-2013 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.rice.ksb.impl.registry;
017
018 import java.sql.Connection;
019 import java.sql.PreparedStatement;
020 import java.sql.SQLException;
021 import java.util.List;
022
023 import javax.xml.namespace.QName;
024
025 import org.apache.ojb.broker.PersistenceBroker;
026 import org.apache.ojb.broker.query.Criteria;
027 import org.apache.ojb.broker.query.QueryByCriteria;
028 import org.kuali.rice.ksb.api.registry.ServiceEndpointStatus;
029 import org.springmodules.orm.ojb.PersistenceBrokerCallback;
030 import org.springmodules.orm.ojb.support.PersistenceBrokerDaoSupport;
031
032 /**
033 * An OJB dao implementation of the {@link ServiceRegistryDao}.
034 *
035 * @author Kuali Rice Team (rice.collab@kuali.org)
036 *
037 */
038 public class ServiceRegistryDaoOjb extends PersistenceBrokerDaoSupport implements ServiceRegistryDao {
039
040 @Override
041 public ServiceInfoBo getServiceInfo(String serviceId) {
042 Criteria crit = new Criteria();
043 crit.addEqualTo("serviceId", serviceId);
044 return (ServiceInfoBo)getPersistenceBrokerTemplate().getObjectByQuery(new QueryByCriteria(ServiceInfoBo.class, crit));
045 }
046
047 @Override
048 public List<ServiceInfoBo> getOnlineServiceInfosByName(QName serviceName) {
049 Criteria crit = new Criteria();
050 crit.addEqualTo("serviceName", serviceName.toString());
051 crit.addEqualTo("statusCode", ServiceEndpointStatus.ONLINE.getCode());
052 return (List<ServiceInfoBo>)getPersistenceBrokerTemplate().getCollectionByQuery(new QueryByCriteria(ServiceInfoBo.class, crit));
053 }
054
055 @Override
056 public List<ServiceInfoBo> getAllOnlineServiceInfos() {
057 Criteria crit = new Criteria();
058 crit.addEqualTo("statusCode", ServiceEndpointStatus.ONLINE.getCode());
059 return (List<ServiceInfoBo>)getPersistenceBrokerTemplate().getCollectionByQuery(new QueryByCriteria(ServiceInfoBo.class, crit));
060 }
061
062 @Override
063 public List<ServiceInfoBo> getAllServiceInfos() {
064 Criteria crit = new Criteria();
065 return (List<ServiceInfoBo>)getPersistenceBrokerTemplate().getCollectionByQuery(new QueryByCriteria(ServiceInfoBo.class, crit));
066 }
067
068 @Override
069 public List<ServiceInfoBo> getAllServiceInfosForInstance(String instanceId) {
070 Criteria crit = new Criteria();
071 crit.addEqualTo("instanceId", instanceId);
072 return (List<ServiceInfoBo>)getPersistenceBrokerTemplate().getCollectionByQuery(new QueryByCriteria(ServiceInfoBo.class, crit));
073 }
074
075 @Override
076 public List<ServiceInfoBo> getAllServiceInfosForApplication(String applicationId) {
077 Criteria crit = new Criteria();
078 crit.addEqualTo("applicationId", applicationId);
079 return (List<ServiceInfoBo>)getPersistenceBrokerTemplate().getCollectionByQuery(new QueryByCriteria(ServiceInfoBo.class, crit));
080 }
081
082 @Override
083 public ServiceDescriptorBo getServiceDescriptor(String serviceDescriptorId) {
084 Criteria crit = new Criteria();
085 crit.addEqualTo("id", serviceDescriptorId);
086 return (ServiceDescriptorBo)getPersistenceBrokerTemplate().getObjectByQuery(new QueryByCriteria(ServiceDescriptorBo.class, crit));
087 }
088
089 @Override
090 public ServiceDescriptorBo saveServiceDescriptor(ServiceDescriptorBo serviceDescriptor) {
091 getPersistenceBrokerTemplate().store(serviceDescriptor);
092 return serviceDescriptor;
093 }
094
095 @Override
096 public ServiceInfoBo saveServiceInfo(ServiceInfoBo serviceInfo) {
097 getPersistenceBrokerTemplate().store(serviceInfo);
098 return serviceInfo;
099 }
100
101 @Override
102 public void removeServiceInfo(String serviceId) {
103 Criteria crit = new Criteria();
104 crit.addEqualTo("serviceId", serviceId);
105 getPersistenceBrokerTemplate().deleteByQuery(new QueryByCriteria(ServiceInfoBo.class, crit));
106 }
107
108 @Override
109 public void removeServiceDescriptor(String serviceDescriptorId) {
110 Criteria crit = new Criteria();
111 crit.addEqualTo("id", serviceDescriptorId);
112 getPersistenceBrokerTemplate().deleteByQuery(new QueryByCriteria(ServiceDescriptorBo.class, crit));
113 }
114
115 @Override
116 public boolean updateStatus(String serviceId, String statusCode) {
117 ServiceInfoBo serviceInfoBo = getServiceInfo(serviceId);
118 if (serviceInfoBo == null) {
119 return false;
120 }
121 serviceInfoBo.setStatusCode(statusCode);
122 saveServiceInfo(serviceInfoBo);
123 return true;
124 }
125
126 private static final String UPDATE_STATUS_FOR_INSTANCE_ID = "update KRSB_SVC_DEF_T set STAT_CD=? where INSTN_ID=?";
127 @Override
128 public void updateStatusForInstanceId(final String instanceId, final String statusCode) {
129 getPersistenceBrokerTemplate().execute(new PersistenceBrokerCallback() {
130 @Override
131 public Object doInPersistenceBroker(PersistenceBroker broker) {
132 PreparedStatement preparedStatement = null;
133 try {
134 Connection connection = broker.serviceConnectionManager().getConnection();
135 preparedStatement = connection.prepareStatement(UPDATE_STATUS_FOR_INSTANCE_ID);
136 preparedStatement.setString(1, statusCode);
137 preparedStatement.setString(2, instanceId);
138 preparedStatement.executeUpdate();
139 } catch (Exception e) {
140 throw new RuntimeException("Failed to update status for instance id", e);
141 } finally {
142 if (preparedStatement != null) {
143 try {
144 preparedStatement.close();
145 } catch (SQLException e) {}
146 }
147 }
148 return null;
149 }
150 });
151 }
152
153 }