For the purchase() operation, you have to execute three SQL statements in total. The first is to query
the topic price. The second and third update the topic stock and account balance accordingly.
Then you can declare a book shop instance in the Spring IoC container to provide purchasing
services. For simplicity's sake, you can use DriverManagerDataSource , which opens a new connection
to the database for every request.
Note To access a database running on the Derby server, you have to include derbyclient.jar (located in
the lib directory of the Derby installation) in your classpath. Alternatively, if you're using Maven, you can add a
xsi:schemaLocation= " http://www.springframework.org/schema/beans
<bean id= " dataSource "
class= " org.springframework.jdbc.datasource.DriverManagerDataSource " >
<property name= " driverClassName "
value= " org.apache.derby.jdbc.ClientDriver " />
<property name= " url "
value= " jdbc: derby://localhost:1527/bookshop; create=true " />
<property name= " username " value= " app " />
<property name= " password " value= " app " />
<bean id= " bookShop " ➥
class= " com.apress.springenterpriserecipes.bookshop.spring.JdbcBookShop " >
<property name= " dataSource " ref= " dataSource " />
To demonstrate the problems that can arise without transaction management, suppose you have
the data shown in Tables 4-2, 4-3, and 4-4 entered in your bookshop database.