Hiển thị các bài đăng có nhãn Java. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Java. Hiển thị tất cả bài đăng

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()

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

  1. Thông báo cho hệ thống biết nơi chứa jdk
  2. $ 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

  3. Mở file PATH của hệ thống:
  4. Mở Terminal và gõ lệnh sau:

    $ sudo gedit /etc/profile.d/jdk.sh

    hoặc:

    $ sudo vi /etc/profile.d/jdk.sh

  5. Sửa file PATH của hệ thống:
  6. 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

  7. Logout hoặc khởi động lại.
Lưu ý: Cài đặt Maven tương tự nhưng chỉ cần sửa PATH của hệ thống là được.