/*
* Copyright 2002-2004 the original author or authors.
*
* 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.springframework.samples.jca.dao;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.resource.ResourceException;
import javax.resource.cci.IndexedRecord;
import javax.resource.cci.Record;
import javax.resource.cci.RecordFactory;
import javax.resource.cci.ResultSet;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.dao.DataAccessException;
import org.springframework.jca.cci.core.RecordCreator;
import org.springframework.jca.cci.core.RecordExtractor;
import org.springframework.jca.cci.core.support.CciDaoSupport;
import org.springframework.samples.jca.dao.PersonDao;
import org.springframework.samples.jca.exception.PersonException;
import org.springframework.samples.jca.model.Person;
import com.sun.connector.cciblackbox.CciInteractionSpec;
/**
*
*
* @author Thierry TEMPLIER
*/
public class PersonDaoImpl extends CciDaoSupport implements PersonDao {
private static final Log log = LogFactory.getLog(PersonDaoImpl.class);
/**
* @see org.springframework.samples.jca.dao.PersonneDao#getPerson(int)
*/
public Person getPerson(final int id) throws PersonException {
CciInteractionSpec interactionSpec=new CciInteractionSpec();
/*interactionSpec.setUser("sa");
interactionSpec.setPassword("");*/
interactionSpec.setSql("select * from person where person_id=?");
List people=(List)getCciTemplate().execute(interactionSpec,new RecordCreator() {
public Record createRecord(RecordFactory recordFactory) throws ResourceException, DataAccessException {
IndexedRecord input=recordFactory.createIndexedRecord("input");
input.add(new Integer(id));
return input;
}
},new RecordExtractor() {
public Object extractData(Record record) throws ResourceException, SQLException, DataAccessException {
List people=new ArrayList();
ResultSet rs=(ResultSet)record;
while( rs.next() ) {
Person person=new Person();
person.setId(rs.getInt("person_id"));
person.setLastName(rs.getString("person_last_name"));
person.setFirstName(rs.getString("person_first_name"));
people.add(person);
}
return people;
}
});
if( people.size()==1 ) {
return (Person)people.get(0);
} else {
throw new PersonException("Can't the person");
}
}
/**
* @see org.springframework.samples.jca.dao.PersonDao#updatePerson(org.springframework.samples.jca.model.Person)
*/
public void updatePerson(final Person person) {
StringBuffer request=new StringBuffer();
request.append("update person set ");
request.append("person_last_name=?,");
request.append("person_first_name=?");
request.append(" where person_id=?");
CciInteractionSpec interactionSpec=new CciInteractionSpec();
interactionSpec.setSql(request.toString());
getCciTemplate().execute(interactionSpec,new RecordCreator() {
public Record createRecord(RecordFactory recordFactory) throws ResourceException, DataAccessException {
IndexedRecord input=recordFactory.createIndexedRecord("input");
input.add(person.getLastName());
input.add(person.getFirstName());
input.add(new Integer(person.getId()));
return input;
}
},new RecordExtractor() {
public Object extractData(Record record) throws ResourceException, SQLException, DataAccessException {
IndexedRecord output=(IndexedRecord)record;
for(Iterator i=output.iterator();i.hasNext();) {
log.debug("Number of updated lines : "+i.next());
}
return null;
}
});
}
}