26 tháng 3, 2018
28 tháng 12, 2017
28 tháng 9, 2017
26 tháng 8, 2017
26 tháng 7, 2017
Quản lý transaction trong Spring Framework - Spring @Transaction
Spring là một framework Java được sử dụng phổ biến nhất hiện nay, nó mang đến rất nhiều tính năng và nhiều phần bổ trợ cho các ứng dụng Java. Tuy nhiên, hầu hết mọi người đều có khuynh hướng sử dụng những tính năng này mà không thực sự hiểu cơ chế bên dưới của chúng.
1. Cách sử dụng và trường hợp sử dụng
@Transaction(value = "myTransactionManager", propagation = Propagation.REQUIRED) public void myMethod() { ... }
Thuộc tính value
của annotation @Transaction
không bắt buộc phải được khai báo. Nếu không khai báo thuộc tính này thì mặc định Spring sẽ tìm kiếm một bean
bất kì được khai báo bên trong context
có tên là "transactionManager" (đây là convention mặc định trong Spring).
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
2. Cấu hình sử dụng transaction trong Spring context
Muốn annotation @Transaction
có thể hoạt động được, ta sẽ phải khai báo thẻ <tx:annotation-driven>
(trong đó tx
là rút gọn của namespace "http://www.springframework.org/schema/tx" hoặc cũng có thể tạm hiểu đây là một alias cho namespace này).
3. Phân tích code
3.1. Khai báo spring bean
Ở phần này, chúng ta sẽ xem xét cách mà Spring context
xử lý khi khai báo sử dụng thẻ <tx:annotation-driven>
1, org.springframework.transaction.config.AnnotationDrivenBeanDefinitionParser
/**
* Parses the '<code></code>' tag. Will
* {@link AopNamespaceUtils#registerAutoProxyCreatorIfNecessary register an AutoProxyCreator}
* with the container as necessary.
*/
public BeanDefinition parse(Element element, ParserContext parserContext) {
String mode = element.getAttribute("mode");
if ("aspectj".equals(mode)) {
// mode="aspectj"
registerTransactionAspect(element, parserContext);
} else {
// mode="proxy"
// DEFAULT MODE
AopAutoProxyConfigurer.configureAutoProxyCreator(element, parserContext);
}
return null;
}
Hầu hết, chúng ta sẽ đều đi vào block else
của block điều kiện if-else
trong đoạn code bên trên (mode="proxy"), vì vậy chúng ta sẽ gọi AopAutoProxyConfigurer.configureAutoProxyCreator()
22 tháng 7, 2017
29 tháng 4, 2017
15 tháng 9, 2016
Kiểm soát quyền truy cập tới các thuộc tính của một Class trong Java
| Class | Package | Subclass | Subclass | World |
| | |(same pkg)|(diff pkg)| |
————————————+———————+—————————+——————————+——————————+————————+
public | + | + | + | + | + |
————————————+———————+—————————+——————————+——————————+————————+
protected | + | + | + | + | o |
————————————+———————+—————————+——————————+——————————+————————+
no modifier | + | + | + | o | o |
————————————+———————+—————————+——————————+——————————+————————+
private | + | o | o | o | o |
--------------------------------------------------------------
+ : accessible
o : not accessible
1 tháng 4, 2016
Cài đặt Oracle JDK trong Ubuntu
- Thông báo cho hệ thống biết nơi chứa
jdk
- Mở file
PATH
của hệ thống: - Sửa file
PATH
của hệ thống: - Logout hoặc khởi động lại.
$ sudo update-alternatives --install "/usr/bin/java" java "/opt/java/oracle_jdk/bin/java" 1 $ sudo update-alternatives --install "/usr/bin/javac" javac "/opt/java/oracle_jdk/bin/javac" 1 $ sudo update-alternatives --install "/usr/bin/jar" jar "/opt/java/oracle_jdk/bin/jar" 1 $ sudo update-alternatives --install "/usr/bin/javaws" javaws "/opt/java/oracle_jdk/bin/javaws" 1
Mở Terminal
và gõ lệnh sau:
$ sudo gedit /etc/profile.d/jdk.sh
hoặc:
$ sudo vi /etc/profile.d/jdk.sh
Thêm vào các dòng lệnh sau:
#!/bin/bash export JAVA_HOME=/opt/java/oracle_jdk export PATH=$PATH:$JAVA_HOME/bin