- 浏览: 15749 次
- 性别:
- 来自: 深圳
最新评论
文章列表
关于数据库的事务的特性(ACID):
1:atomicity(原子性):多个操作为一个单元不可分割,要么都成功要么都失败.
2:consitency(一致性):事务结束后,系统的状态是一致的。(一致性处理数据库中所有约束保护)
例如:如果2个表有主外键约束,如果我要删除主表的数据,那么从表的数据也应该被删除.
3:isolation(隔离性):保护2个同时进行的事务,彼此间无法看到中间结果.
例如:如果有个2个事务,A,B,如果A中的数据还没有提交,在B这个事务中是无法看到A所处理过程中的数据变化的。
4:durability(稳定性):保证数据更新时免遭破坏,保证数据能写正确到数据库的文件中。 ...
Spring对开闭原则的体现,提供了大量的回调接口,例如BeanPostProcess,该接口的作用是我们可以添加自己的逻辑来控制Bean的初始化构建行为,如我们不想返回Bean本身而是需要返回他的代理对象,修改所依赖的属性对象等等。
下图是BeanPostProcess的关系结构图:
[img]
[/img]
InstantiationAwareBeanPostProcessor 该接口非常重要,在Spring的Aop自动代理的实现中就需要使用该接口,原因很简单,我们的织入我们需要的我们的一些列的逻辑到目标中,所以我们返回的应该目标对象的代理对象。
public abstract cl ...
ApplicationContext的一系列aware回调接口,是通过实现BeanPostProcessor来实现的,当bean工厂启动后实力化BEAN就会回调这一系列的aware接口
class ApplicationContextAwareProcessor implements BeanPostProcessor {
//当bean实例化之前,会调用此方法对bean进行处理
这是官方的解释:
Apply this BeanPostProcessor to the given new bean instance <i>before</i> any b ...
最近一个项目,我们应用了Spring的事件机制,它是基于观察者设计模式的思想,但是有点差异的是还需要实现ApplicationContextAware,因为我们要拿到applicationContext来触发我们的事件,然后由Spring回调,将对象传进来,这样我们就可以很方便的访问所有的Bean,或者做一些其他的事情,比如发布事件。
还需要实现一个ApplicationListener,这个就是我们的观察者了,表示当某个事件被触发了,我们该做点什么。
其次就需要去定义事件,例如流程结束事件,一个购物系统当订单流程已经结束了,我们需要通知发货员发货,这个时候我们的这个通知发货,就是一个观察者,我 ...
- 2013-04-12 17:08
- 浏览 1527
- 评论(0)
最近研究了一下公司的底层框架的实现,发现公司对自定义的XML转换为javabean使用了apache betwixt组件,于是乎,就研究了一下,发现这个组件挺强大的。
环境准备:
必不可少的四个jar包
commons-betwixt.jar
commons-degester.jar
commons-collections.jar
commons-beanutils.jar
这里简单的例子就直接去apache的官网上看吧,这里介绍一下实战型复杂的用法.
以下是三个javaBean的代码:
public class SysCfgModule implements Serializable {
...
- 2013-04-10 17:41
- 浏览 1369
- 评论(0)
这是在项目中运用HttpURLConnection发送post请求(我们项目中是用来发送soap),完整的处理,包括如何处理异常。需要注意一个小地方,我们把创建URL放在afterPropertiesSet方法中,是因为这个类只是为下游某一个特定的Service服务的,如果要作用共用的,不能这样做。
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStre ...
Ant之启动和停止tomcat
- 博客分类:
- Ant
一般在大型的软件编译,打包,部署都离不开ant,例如我们在执行 ant deploy的command的时候不仅仅要打包成war包,还需要启动tomcat,启动包括直接start,以及debug模式启动,和stop tomcat.
<!-- Launches Tomcat -->
<target name="tomcat-start"
description="Launches Tomcat">
<fail unless="env.TOMCAT_HOME"
message= ...
方式1:
可以看到在WSDL中会有一个
<wsdl:portType name="CarShop">
......................
</wsdl:portType>
<service name="CarShopService">
<port name="CarShopPort" binding="tns:CarShopBinding">
<soap:address location="http://cc ...
在开发webservice的时候,我们需要加入自己的控制逻辑,自定义过滤器,对soap消息进行处理,或者是预先进行一些设置,等等。首先介绍一下如何自定义处理类逻辑。
基于JAS-WS有一个重要的文件,sun.jaxws.xml,这个文件是用来定义服务的处理类的,就好比web.xml一样,我们访问某个业务处理,是由哪一个servlet处理一样。
OK,先看文件。
<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns='http://java.sun.com/xml/ns/jax- ...
之前对并发了解的很少,觉得如果程序存在竞争条件,就直接加一个Synchronized就可以解决。发现越多很多源代码之后,发现别人加锁并不是简简单单的在方法上面加一个synchroized这么简单,先上一段代码.
public List<String> lists = Colle ...
public class PrimeGenerator implements Runnable {
private final List<BigInteger> list = new ArrayList<BigInteger>();
private volatile boolean cancell;
@Override
public void run() {
BigInteger big = BigInteger.ONE;
while (!cancell) {
big = big.nextProbablePrime(); ...
public class UnSafeOperation {
//直接使用this加锁
public synchronized String get(Vector<String> vector) {
if (vector.isEmpty()) {
return null;
}
int index = vector.size() - 1;
return vector.get(index);
}
//对vector加锁
public String get1(Vector<String> vector) {
...
public class Test {
public List<String> lists = Collections
.synchronizedList(new ArrayList<String>());
//使用不同的锁策略,导致数据出现混乱
public synchronized boolean listIfAbsent(String str) {
boolean ifAbsent = lists.contains(str);
if (!ifAbsent) {
lists.add(str);
}
...
public class NumberRange {
private AtomicInteger lower = new AtomicInteger(0);
private AtomicInteger upper = new AtomicInteger(0);
public void setLower(int i) {
if (i > upper.get()) {
throw new IllegalArgumentException();
}
lower.set(i);
}
public void setUpper(int i) ...
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamCo ...