0
我在維護一個系統工作,並且發現了一個可以解決的錯誤,如果其他webservice方法以某種方式同步。該系統使用澤西島休息方法和Spring的JDBC框架 - 我從來沒有見過任何人使用普通的舊Java的「同步」方法的Web服務,所以不知道這是否正確或錯誤。如何同步Java EE容器中的其餘webservices
下面的代碼是如何組織的(只是膚淺的細節)+評論在線:
@Path("/path")
@Component
public class WebService {
@Autowired
private ServiceImpl serviceImpl;
...
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("/innerPath")
public Response method1(@FormDataParam("id") String id) {
...
/* this is where I need synchronization
* both the verify and insert methods should execute one user at a time
* otherwise all users will be able to insert
*/
boolean v = serviceImpl.verify();
if (v) {
serviceImpl.insert(); //once insert succeeds, verify will start to fail
}
...
}
}
@Service
public class ServiceImpl {
@Autowired
private DaoImpl daoImpl;
...
@Transactional
public boolean verify() {
boolean v = daoImpl.verify();
return v
}
@Transactional
public void insert() {
daoImpl.insert();
}
}
@Repository
public class DaoImpl {
private JdbcTemplate jdbcTemplate;
...
public boolean verify() {
String sql = "....";
...
int count = jdbcTemplate.queryForInt(sql);
if (count > 0) {
return false;
}
return true;
}
public void insert() {
String sql = "....";
...
jdbcTemplate.queryForInt(sql);
}
}