Thứ Năm, 28 tháng 8, 2014

Cài đặt service cho glassfish 4

Cách 1:
Nếu như chúng ta đã cài đặt Netbean cho hệ thống, ta chỉ cần vào đường dẫn chưa thư mục cài đặt của glassfish 4 giống như sau:

C:\Program Files\glassfish-4.0\glassfish\bin

Ở đây ta sẽ chạy các file .bat dưới quyền adminstrator để tiến hành thực thi và quản lý glassfish server. Ví dụ để start glassfish ta chạy file "startserv.bat" dưới quyền adminstrator, và file "stopserv.bat" để tắt glassfish.

Sau khi chạy thành công, ở trình duyệt ta vào địa chỉ sau để vào trang quản lý của glassfish: localhost:port với port là cổng port của glassfish, mặc định thì sẽ là 4848, như vậy ta sẽ vào trang: localhost:4848 để có thể quản lý server glassfish.

Cách 2:
Nếu chúng ta chưa cài đặt Netbean, ta sẽ tiến hành download glassfish service từ trang chủ theo các bước dưới đây:
Đầu tiên ta mở trang này và làm theo các bước hướng dẫn. (Tải về =>  giải nén)

https://glassfish.java.net/download.html

Ta vào thư mục bin trong thư mục vừa giải nén ra được, sau đó copy đường dẫn.\

Tiếp theo ta sẽ thiết lập biến môi trường để cho việc thực thi glassfish dễ dàng hơn, ta sẽ chạy glassfish bằng lệnh của sổ run của windows.

- Đầu tiên ta chạy cmd bằng quyền adminstrator sau đó tìm đến đường dẫn của glassfish, tiếp theo ta gõ dòng lệnh "asadmin create service"

Như vậy ta đã có thể thao tác với glassfish bằng cách gõ lệnh trong chương trình run.


Thứ Bảy, 23 tháng 8, 2014

Module 5

Đầu tiên ta sẽ tạo một website với tên JAX-WSDemo sau đó tạo một class webservice mới như dưới đây:


Tiếp đó ta tạo ra một phương thức với tên validate và sau đó viết vào đoạn mã dưới đây:

@WebMethod(operationName = "validate")
    public boolean validate(@WebParam(name = "cardnumber") String cardnumber) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < cardnumber.length(); i++) {
            if ((i%2) == 1) {
                System.out.println("i" + cardnumber.charAt(i));
                int t = Integer.parseInt(cardnumber.charAt(i) + "");
                String tmp = (t*2)+"";
                sb.append(tmp);
            }else{
                sb.append(cardnumber.charAt(i));
            }
        }
        int sum = 0;
        String sb2 = sb.toString();
        for (int i = 0; i < sb2.length(); i++) {
            sum += Integer.parseInt(sb2.charAt(i) + "");
        }
        if ((sum%10) != 0) {
            return true;
        }else{
            return false;
        }
    }


Tiếp theo ta sẽ chạy ứng dụng, rồi sau đó nhấn phải chuột vào webservice vừa được tạo và chọn Test Service ta sẽ được đường link WSDL như sau:


Tiếp đó ta tạo một ứng dụng client cho để test web Service chúng ta vừa tạo ra. Ta sẽ tạo ra một webservice client như dưới đây:



Sau đó ta copy đường dẫn mà khi test service ta nhận được vào như hình dưới:


Sau đó ta kéo phương thức của class webservice client vừa tạo ra vào class của hàm main và gọi nó trong hàm main như sau:

public static void main(String[] args) {
        System.out.println(validate("12345678910"));
    }

    private static boolean validate(java.lang.String cardnumber) {
        ms.services.Validator_Service service = new ms.services.Validator_Service();
        ms.services.Validator port = service.getValidatorPort();
        return port.validate(cardnumber);
    }

Nhận xét:

Webservice thường được dùng cho các ứng dụng enterprise vì tính không phụ thuộc vào ngôn ngữ cũng như nền tảng của nó.

- Nó có thể dễ dàng nâng cấp, bảo trì hệ thống mà ít làm ảnh hưởng đến client.

- Tuy nhiên việc sử dụng webservice khá chậm vì phải qua kết nối internet


Overview of Rest Architecture and Restfull WebService

I. REST
a. Định nghĩa.

-Rest là một tập những hướng dẫn và nguyên lý được áp dụng cho môi trường mạng và nó không phải là giao thức cũng không phải là chuẩn mà nó chỉ là phong cách kiến trúc trên mạng hệ thống được thiết kế có giao thức,thành phần dữ liệu,hyperlinks,và clients như là một phần của hệ thống.


- WWW là một ví dụ của kiến trúc REST





b. Đặc điểm của Rest

- Rest là kiến trúc có môt hình Client - Server: Client gửi request lên server , Sau khi server tiến hành xử lý xong sẽ trả kết quả về cho client.

- Cấu trúc phi trạng thái (Stateless): Client gửi toàn bộ thông tin lên server để server có thể nhận biết client là ai để trả về toàn bộ thông tin cần thiết. Sau khi xử lý xong, server sẽ không lưu bất cứ một thông tin gì về client ngay sau khi phản hồi lại cho client.
- Cache :Client có thể giữ lại thông tin mà server trả về,giúp cho ứng dụng nhẹ và chạy mượt hơn.

- Code on demand: Server sẽ chuyển các mã lệnh về phía client.


-Kiến trúc Rest là một kiến trúc có phân tầng.


II. Restful

a. Định nghĩa

- Kiến trúc restful có mô hình dựa trên kiến trúc Rest và HTTP, nó không phụ thuộc vào nền tảng ngôn ngữ


 -Client gửi thông tin lên server thông qua HTTP request và server trả kết quả về dựa trên HTTP response.





III. Bộ thư viện JAX-RS

JAX-RS là bộ thư viện chính trong JAEE, nó dựa trên annotation.

Nhận xét

- Nhờ có REST với cơ chế chờ (Khi client request lên server mà server đang bận thì nó sẽ chờ cho đến khi mà server xử lý xong)vì thế server được giảm tải công việc , ứng dụng sẽ nhanh hơn.

- Mọi tài nguyên được quy về 1 dạng duy nhất nên dễ quản lý và đảm bảo an toàn


- Dựa vào cách hoạt động chờ xử lý nên server sẽ được giảm tải đi rất nhiều, tránh tình trạng quá tải.


- SOAP là chuẩn nhưng càng ngày, những ứng dụng lớn đều chuyển sang dùng REST


Thứ Năm, 14 tháng 8, 2014

Java API for Webservice

I. Các thư viện thực thi Web Application.

J2EE cung cấp 4 thư viện để thực thi ứng dụng Web Service đó là:
- Java API for XML-based RPC(JAX-RPC)
- Gửi tệp tin đính kèm với SOAP.
- Java API cho các đăng kí XML.
- Java API cho việc xử lý các file XML.

II. Chi tiết

1. XML Web Services

- XML Web Services làm việc cùng với các giao thức web chuẩn như HTTP, XML, SOAP và TCP/IP.

- Các đặc tính:
+ Kiến trúc phi trạng thái.
+ Kiến trúc không đồng bộ.
+ Giao tiếp, làm việc không phụ thuộc vào ngôn ngữ và nền tảng.


2. Xử lý các tài liệu XML sử dụng JAXP.


JAXP hoặc Java API dành cho việc xử lý XML cung cấp khả năng validation và phân tích tài liệu XML xử dụng ứng dụng viết trong ngôn ngữ lập trình Java. Nó cung cấp một khung làm việc cho việc sử dụng các API đơn giản cho XML là chuẩn SAX2 và DOM2, các API chuẩn mà đọc, viêt, chỉnh sửa tài liệu XML.

a. SAX Parser

- SAX xử lý các tài liệu XML, nơi các cái thành phần dữ liệu được diển tả trên một cơ sở liên tục và tuần tự, sau đó được chuyển đổi thành chuỗi các sự kiện. SAX không tải bất kì tài liệu XML nào vào bộ nhớ vì thế nó có thể quét một file lớn với một tốc độ khá nhanh.

- Các interfaces, classes được sử dụng để phân tích tài liệu XML mà sử dụng trong SAX là:

+ DefaultHandler.
+ SAX Parser Factory.
+ SAX ParserXMLReader.




b. DOM

Trình phân tích của DOM được định nghĩa chủ yếu trong hai packages là:

+ org.w3c.dom

+ Javax.xml.parsers.



c. JAX-RPC


- JAX-RPC làm giảm xuống độ phức tạp cho các nhà phát triển bằng nhiều cách.

- Dưới đây là một số lợi ích của nó:

+ Việc tạo ra yêu cầu và phản hồi SOAP được chuẩn hoá.

+ Chúng ta không cần trực tiếp làm việc với SOAP mà chỉ cần làm việc với các đối tượng trong Java thuần tuý.

+ Phần việc của nhà phát triển được giảm xuống bởi việc cung cấp việc tạo ra và xử lý SOAP được gói gọn trong một thư viện hay một công cụ.

+ Các tình huống mapping khác nhau như từ XML sang Java và từ Java sang XML, WSDL đến Java, Java đến WSDL và ngoài ra WSDL/XML và Java được hỗ trợ bởi JAX-RPC.

d. Các chức năng của việc điều hành JAX-RPC Service

- JAX-RPC cung cấp 3 chức năng điều hành đó là:

+ Chức năng yêu cầu và phản hồi đồng bộ. Khi một khác hàng gọi đến một phương thức Remote từ một thread, cái mà đã đóng, kể từ khi một giá trị trả về hoặc ngoại lệ được trả về.

+ Chức năng RPC một chiều. Khi một máy client gọi đến một phương thức ở phía server và tiếp tục trong luồng của nó mà không khoá. Không giá trị trả về hay ngoại lệ được ném ra trong lần gọi này.

+ Non-blocking invocation mode. Một client gọi đến một procedure remote và tiếp tục với cái luồng đấy mà không khoá, sau đó client xử lý remote method trả về cái request hoặc thông qua periodically requesting cho việc trả về giá trị.

e. JAXP API

- Một registry là một tài nguyên được chia sẻ cái mà được miêu tả trong hình thức của một Web-based Service, cái mà làm các interactions động dễ hơn trong việc sử dụng.

- Java API cho XML Registries (JAXR) API cung cấp một tập hợp các API đơn giản để truy cập vào sự đa dạng của XML Registries, như UDDI và ebXML Registry, Hence, JAXR API ngoài ra còn được gọi như một cái API java trừu tượng không giống nhau.


- ebXML là một business-to-business XML Framework. cái mà enable business để được dẫn tới bằng điện tử qua internet. ebXML registry là cả hai cái sau: một là  registry metadata cũng như một repository mà có thể giữ nội dung arbitrary.

- Các tính năng sau đây là của ebXML informaition model:

+ Hỗ trợ tính năng validation dữ liệu cải thiện integrity of registry data.

+ Hỗ trợ việc packaging (or grouping)( hỗ trợ việc nhóm lại) của các đối tượng registry lên quan.

+ Nó hỗ trợ cả hai việc giao tiếp là synchroncus và asyncronous.

+ Nó cung cấp sự xác nhận dựa trên số, chữ kí, việc validation và việc cấp phép.

f. JAXP Architecture.

JAXR cung cấp một API cho việc truy cập các đăng kí business. Nó có một cấu trúc linh hoạt mà hỗ trợ UDDI và các chỉ định đăng kí khác, như ebXML.

- JAXR provider bao gồm 2 phần:

+ Registry-specific JAXP provider.
+ JAXP pluggable provider.

3. SAAJ là gì?

SOAP cùng với API kèm theo cho Java là một API mà cho phép người dùng tạo và gửi SOAP messages cùng với file kèm theo bởi các gói trong javax.xml.soap

SOAP đơn giản cung cấp các định dạng message cho WS. It cho phép nguwoif phát triển làm ra và xử lý các tin nhắn.




Nhận xét:

Java Web Service cung cấp rất nhiều các api mạnh mẽ để phục vụ cho việc thao tác với SOAP (file xml) trở nên dễ dàng hơn, (việc thao tác với các gói soap cực kì phức tạp).
- Việc dùng các api giúp cho nhà phát triển không mất nhiều công sức để phát triển các services.


Introduce Web Service

I. Nội dung chính.

- Web Service là gì?
- Các đặc điểm của Web Service.
- Tại sao phải cần dùng Web Service.
- Web Service hoạt động như thế nào?
- Các thành phần của Web Service.

II. Chi tiết.

1. Web Service là gì?

- Web Service là các thành phần ứng dụng như được trình ra như các dịch vụ trên World Wide Web.
- WS là một thành phần của phần mềm.
- WS chứa một số nghiệp vụ lô gic bên trong nó.

- Được trưng ra trên Web dành cho các khách hàng hỗn tạp.
- Được truy cập bởi các client tại các nơi khác nhau.
- Web Service được sử dụng cho các nghiệp vụ để giao tiếp với nhau và khách hàng.
- Web services được dựa trên các chuẩn XML mở rộng và giao thức chuyển đổi như: HTTP, SOAP.
- XML là một ngôn ngữ độc lập nền tảng. (không phụ thuộc vào nền tảng cũng như ngôn ngữ).

2. Tại sao cần Web Service.

- Chúng ta cần dùng đến ws bởi vì nó giúp chúng ta kết nối các thiết bị, các ứng dụng chạy trên nhiều nền tảng khác nhau (vì nó không phụ thuộc vào nền tảng).
- Ngoài ra nó còn được dùng để kết nối hai bussiness với nhau.

3. Phương thức hoạt động của Web Service.

Client gửi request lên cho server bằng một gói SOAP, đây có thể là một file xml qua internet, khi server nhận được thông tin sẽ phân tích xem client muốn gì, sau khi sử lý thì trả về kết quả cho client,

4. Các thành phần của Web Service.

a. Simple Object Access Protocol. (SOAP: Giao thức truy cập Đối tượng đơn giản)

    Là một file XML nhẹ  dựa trên giao thức chuẩn.
   -  SOAP gồm 2 phần:
   + XML declaration,
   + SOAP envelope.

- Web Service Description Language. (WSDL) (Ngôn ngữ miêu tả dịch vụ web)
+ Được sử dụng cho việc trao đổi thông tin trên việc thực thi dịch vụ web.
+ Là một sự chỉ định được sử dụng cho việc miêu tả thông tin về dịch vụ web.
+ Được viết dưới định dạng XML.
+ Bao gồm các thông tin sau: Bao gồm các phương thức có sẵn,là một loại giao thức, có tham số đầu vào và giá trị trả về.

- Universal Description, Discovery and Intergration (UDDI)
+ Được sử dụng để dịch chuyển tin nhắn qua HTTP và các giao thức khác.
+ Là một nền tảng không phụ thuộc, XML dựa vào registry.
+ Được sử dụng để miêu tả và phát hành dịch vụ web.
+ Được truy vấn bởi các clients để khám phá các ứng dụng cộng đồng và gọi chúng.

Nhận xét:

Web Service là một phần của ứng dụng, có vai trò kết nối các ứng dụng khác nhau chạy trên các nền tảng khác nhau dựa trên tính không phụ thuộc vào nền tảng.
Giảm tải cho ứng dụng, vì khi dữ liệu đi qua phương thức của Web Service.





Chủ Nhật, 10 tháng 8, 2014

Ứng dụng việc sử dụng XML vào ứng dụng web Java

I. Generating XML From Database Data using JSP and JDBC

a. Các phương thức được dùng phổ biến trong việt nhận dữ liệu XML.

Application-Specific Query Language.
XMLPath (Xpath)
XMLQuery (XQuery)
Structured Query Language (Sql)

b. Sự biến đổi dữ liệu trong HTML

Cùng với sự trợ giúp của XSLT stylesheets, XML data có thể được biến đổi sang một vài dạng khác
như HTML.

Có 3 cách để thực hiện việc biến đổi.

- Client-Side Transformation
- Server-Side Transformation
- External Transformation

II. Transforming Data into PDF

PDF có thể được cung cấp bởi ESL-FO (Extensible Language Formatting Object)
- Sự biến đổi bao gồm 2 bước: 
Đầu tiên là chuyển đổi XML đến XSL-FO bằng việc sử dụng XSLT.
- Tiếp theo là việc sử lý XSL-FO sử dụng kĩ thuật định dạng

Using Validator to validate in XML

Tạo một project mới với tên Module 10.1 sau đó tạo ra một file xml với tên là tomcat-users.xml như dưới đây:

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <role rolename="manager"/>
  <role rolename="admin"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>
  <user username="admin" password="" roles="admin,manager"/>
</tomcat-users>

Sau đó tạo ra một file xsl với tên tomcat-users-validation.xsl như dưới đây.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="tomcat-users">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="role">
          <xs:complexType>
            <xs:attribute name="rolename" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
        <xs:element maxOccurs="unbounded" name="user">
          <xs:complexType>
            <xs:attribute name="username" type="xs:string" use="required" />
            <xs:attribute name="password" type="xs:string" use="required" />
            <xs:attribute name="roles" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Sau đó là hàm main:

public static void main(String[] args) {
        try {
            DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            Document doc = parser.parse(new File("tomcat-users.xml"));
            
            SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
            Source schemaFile = new StreamSource(new File("tomcat-users-validation.xsd"));
            Schema schema = factory.newSchema(schemaFile);
            Validator validator = schema.newValidator();
            
            validator.validate(new DOMSource(doc));
            System.out.println("Document file is valid!");
        } catch (ParserConfigurationException | SAXException | IOException ex) {
            Logger.getLogger(Module101_DomValidattion.class.getName()).log(Level.SEVERE, null, ex);
        }
    }


Module 10.2

Ta tạo một application với tên là Module 10.2 và copy file xml ở ví dụ trước như dưới đây:

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <role rolename="manager"/>
  <role rolename="admin"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>
  <user username="admin" password="" roles="admin,manager"/>
</tomcat-users>

Tiếp đó tạo ra một file xsl như dưới với tên tomcat-users-validation-2.xsl :

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="tomcat-users">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="role">
          <xs:complexType>
            <xs:attribute name="rolename" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
        <xs:element maxOccurs="unbounded" name="user">
          <xs:complexType>
            <xs:attribute name="username" type="xs:string" use="required" />
            <xs:attribute name="password" type="xs:string" use="required" />
            <xs:attribute name="roles" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>


Tiếp đó là code ở hàm main:

public static void main(String[] args) {
        try {
            InputSource is = new InputSource(new BufferedReader(new FileReader("tomcat-users.xml")));
            
            SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
            Source schemaFile = new StreamSource(new File("tomcat-users-validation-2.xsd"));
            Schema schema = factory.newSchema(schemaFile); 
            Validator validator = schema.newValidator();
            
            validator.validate(new SAXSource(is));
            System.out.println("Validated by SAX, document is valid!");
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Module102_SAXValidation.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SAXException | IOException ex) {
            Logger.getLogger(Module102_SAXValidation.class.getName()).log(Level.SEVERE, null, ex);
        }
    }



Nhận xét. 

Không cần khai viết nhiều mã lệnh khi thực thi, chỉ cần một file xsl để thực hiện validate cho dữ liệu của file xml.

Using XPath

Đầu tiên ta tạo một project với tên Using XPath sau đó tạo ra một file xml như dưới đây.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<EmployeeList   xmlns="http://annmgc00523.blogspot.com/"
                xmlns:tr="http://annmgc00523.blogspot.com/trainee"> // tr ở đây là kí hiệu  tiền tố của namespace.
    <tr:Employee>
        <tr:Name>nguyen van0</tr:Name>
        <Address>address1</Address>
    </tr:Employee>
    <tr:Employee>
        <Name>nguyen van1</Name>
        <Address>address1</Address>
    </tr:Employee>
    <tr:Employee>
        <Name>nguyen van3</Name>
        <Address>address3</Address>
    </tr:Employee>
    <tr:Employee>
        <Name>nguyen van4</Name>
        <Address>address4</Address>
    </tr:Employee>
    <tr:Employee>
        <Name>nguyen van5</Name>
        <Address>address5</Address>
    </tr:Employee>
    
</EmployeeList>

Khai báo ở hàm main: 

   public static void main(String[] args) {
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            factory.setNamespaceAware(true);
            DocumentBuilder builder = factory.newDocumentBuilder();

            Document doc = builder.parse(new File("D:\\NetBean\\Module9\\src\\Employee.xml"));
            NamespaceContext ctx = new NamespaceContext() {

                @Override
                public String getNamespaceURI(String prefix) {
                    String uri = "";
                    if (prefix.equals("tr")) {
                        uri = "http://annmgc00523.blogspot.com/trainee";
                    }
                    return uri;
                }

                @Override
                public String getPrefix(String string) {
                    return null;
                }

                @Override
                public Iterator getPrefixes(String string) {
                    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                }
            };
            String xpathLink = "//tr:Employee";
            XPathFactory xpathFactory = XPathFactory.newInstance();
            XPath xp = xpathFactory.newXPath();
            xp.setNamespaceContext(ctx);

            NodeList nl = (NodeList) xp.evaluate(xpathLink, doc, XPathConstants.NODESET);
            System.out.println("Số kết quả: " + nl.getLength());
            
            for (int i = 0; i < nl.getLength(); i++) {
                System.out.println(nl.item(i).getTextContent());
            }
            
            
        } catch (XPathExpressionException ex) {
            Logger.getLogger(Module9.class.getName()).log(Level.SEVERE, null, ex);

        } catch (SAXException | IOException | ParserConfigurationException ex) {
            Logger.getLogger(Module9.class.getName()).log(Level.SEVERE, null, ex);
        }

    }


Nhận xét: 

XPath tương đối phức tạp trong mảng khai báo và sử dụng,
Phải viết nhiều code

Use TrAX to transform XML Document.

Tạo một project với tên UsingTrAXToTransformXML
Sau đó ta tạo một file xsl với tên OrderProcessing như dưới:

<?xml version="1.0" encoding="UTF-8"?>

<!--
    Document   : OrderProcessing.xsl
    Created on : August 10, 2014, 3:04 PM
    Author     : Nguyen Minh An
    Description:
        Purpose of transformation follows.
-->

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html"/>
    <xsl:template match="/">
        <html>
            <head>
                <title>OrderProcessing.xsl</title>
            </head>
            <body>
                <table border="1">
                    <tr>
                        <td>Name</td>
                        <td>Address</td>
                    </tr>
                    <xsl:apply-templates></xsl:apply-templates>
                </table>
            </body>
        </html>
    </xsl:template>
    
    <xsl:template match="EmployeeList">
        <xsl:apply-templates select="Employee">
            <xsl:sort select="Name" order="ascending" data-type="text" />
        </xsl:apply-templates>
    </xsl:template>
    <xsl:template match="Employee">
        <tr>
            <td>
                <xsl:value-of select="Name"/>
            </td>
            <td>
                <xsl:value-of select="Address"/>
            </td>
        </tr>
    </xsl:template>

</xsl:stylesheet>

Tiếp đó tạo ra một file xml như dưới:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<EmployeeList>
    <Employee>
        <Name>nguyen van0</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van1</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van2</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van3</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van4</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van5</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van6</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van7</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van8</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van9</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van10</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van11</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van12</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van13</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van14</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van15</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van16</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van17</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van18</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van19</Name>
        <Address>address1</Address>
    </Employee>
</EmployeeList>

Tiếp đó ở hàm main ta khai báo như sau:

public static void main(String[] args) {
        try {
            String orderProcessing = "D:\\NetBean\\Module 8\\src\\OrderProcessing.xsl";
            String employee = "D:\\NetBean\\Module 8\\src\\Employee.xml";
            String resultHtml = "D:\\NetBean\\Module 8\\src\\Result.html";

            StreamSource sourceStyle = new StreamSource(orderProcessing);
            StreamSource sourceXML = new StreamSource(employee);
            StreamResult result = new StreamResult(new FileOutputStream(resultHtml));

            TransformerFactory factory = TransformerFactory.newInstance();
            Transformer transform = factory.newTransformer(sourceStyle);

            transform.transform(sourceXML, result);
        } catch (TransformerException | FileNotFoundException ex) {
            Logger.getLogger(Module8.class.getName()).log(Level.SEVERE, null, ex);

        }

    }

Sau khi chạy ta được kết quả như sau:


Thứ Bảy, 9 tháng 8, 2014

Apply XQuery

Đầu tiên ta khởi tạo một project với tên Applying XQuery.

Tạo ra một file xml với tên tomcat-users.xml như dưới đây:

<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users>
    <role rolename="tomcat"/>
    <role rolename="role1"/>
    <user username="tomcat" password="tomcat" roles="tomcat"/>
    <user username="both" password="tomcat" roles="tomcat,role1"/>
    <user username="role1" password="tomcat" roles="role1"/>
    
    <user password="admin" role="manager-script,admin" username="admin"/>

</tomcat-users>

Trong hàm main ta viết các đoạn mã như dưới đây:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package applyxmlquery;

import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import nu.xom.Builder;
import nu.xom.Document;
import nu.xom.Nodes;
import nu.xom.ParsingException;
import nux.xom.xquery.XQuery;
import nux.xom.xquery.XQueryUtil;

/**
 *
 * @author Nguyen Minh An
 */
public class ApplyXMLQuery {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {
            Document document = new Builder().build(new File("D:\\NetBean\\ApplyXMLQuery\\src\\tomcat-users.xml"));
            String query = "//tomcat-users//user";
            Nodes nodes = XQueryUtil.xquery(document, query);
            for (int i = 0; i < nodes.size(); i++) {
                System.out.println("Username: " + nodes.get(i).toXML());
            }
        } catch (ParsingException | IOException ex) {
            Logger.getLogger(ApplyXMLQuery.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
}

Và kết quả:

run:
<user username="tomcat" password="tomcat" roles="tomcat" />
<user username="both" password="tomcat" roles="tomcat,role1" />
<user username="role1" password="tomcat" roles="role1" />
<user password="admin" role="manager-script,admin" username="admin" />
BUILD SUCCESSFUL (total time: 0 seconds)

Nhận xét:
- Không phải viết nhiều code.
- Câu lệnh truy vấn dễ dàng.
- Dễ hiểu trong việc đọc các dòng lệnh.
- Có thể truy vấn để lấy ra thông tin nhanh chóng


Miêu tả cơ sở dữ liệu XML, các loại của nó và việc mapping xml schema với database schema

I. XML là một database tuyệt vời.

- Trước hết thì ta nên hiểu thế nào là một database (cơ sở dữ liệu): Cơ sở dữ liệu là một nơi dùng để lưu thông tin và nó hỗ trợ việc truy, xuất dữ liệu.

- Với XML ta có thể lưu trữ vô vàn thông tin dưới dạng thẻ. Ngoài ra nó còn hỗ trợ hệ cơ sở dữ liệu quan hệ bởi vì nó có các định dạng, các dàng buộc thay vì các mối quan hệ giữa các bảng trong Database.

- Trong Java ta có thể truy xuất dữ liệu trong XML cực kì đơn giản với DOM và SAX với một tốc độ rất nhanh.

- XML là ngôn ngữ thông dịch và nó có thể chạy được trên tất cả các nền tảng, vì thế nó rất hữu dụng.

- Ta có thể chuyển đổi dữ liệu từ XML sang định dạng khác khá đơn giản với chi phí thấp.

II. Các loại cơ sở dữ liệu XML.

a. XML - enabled.

- Loại này một là có thể map XML với cấu trúc cơ sở dữ liệu truyền thống (như cơ sở dữ liệu quan hệ) nó chấp nhận XML như một input và render XML như một output, hay gần đây nhất là nó hỗ trợ các kiểu XML trong cơ sở dữ liệu quan hệ.

b. Native XML

- Mô hình nội bộ các database như vậy phụ thuộc vào XML và sử dụng các tài liệu XML như một đơn vị nền tảng của việc lưu trữ, tuy nhiên không cần thiết phải lưu trữ trong một mẫu các file văn bản.

III. Ưu điểm của việc sử dụng XML database.

XML database cung cấp ngôn ngữ truy vấn, lưu trữ và giao diện lập trình như các cơ sở dữ liệu khác.

Nó có thể dễ dàng chạy trên mọi nơi, vì nó là một ngôn ngữ đa nên tảng.

Nó miêu tả thông tin một cách vô cùng cụ thể nên không cần phải khai báo bất cứ cái gì thêm.

Nó lưu trữ dữ liệu dưới dạng các nút (nodes).

Nó cho phép việc lồng và trùng lặp dữ liệu.

IV. Tổ chức dữ liệu XML.

a. Data Centric Documents

Trong một tài liệu data-centric, một tài liệu XML được sử dụng như một nơi lưu trữ dành cho dữ liệu mà được cấu trúc và xuất hiện trong một Regular Order, một ví dụ cho một XML  data-centric là Simple Object Access Protocol.

Document-Centric Documents: Tệp tin XML không có cấu trúc chặt chẽ như Data-Centric Documents mà có thêm những thứ khác như tài liệu HTML vân vân.

V. Object

- Các thông tin trong tài liệu XML được lưu trữ dưới dạng các nodes.

- Một node có thể dễ dàng chuyển đổi thành một object.

- Có các thư viện để biến đổi tài liệu XML sang object và ngược lại

VI. Cơ sở dữ liệu quan hệ XML.

Một cơ sở dữ liệu quan hệ là một bộ sưu tập các bảng mà chứa dữ liệu như các bản ghi.
Các bản ghi được cấu tổ chức bởi một tập hợp các trường. Mỗi trường có một tên và giá trị
Bạn có thể sử dụng truy vấn để nhận về và thay đổi dữ liệu trong một bảng. Một tài liệu XML có thể được xem như một cơ sở dữ liệu quan hệ bởi vì nó sử dụng cùng các kĩ thuật của cơ 
sở dữ liệu quan hệ để lưu trữ dữ liệu.

Trong tài liệu Document.
- Các nút tài liệu được xem như một cơ sở dữ liệu

- Các nút thành phần được xem như các bảng trong cơ sở dữ liệu

- Một nút thành phần đi theo cùng với các nút con của loại nút dữ liệu của nó được xem như các trường trong một bảng.

- Các nút con của một nốt thành phần được xem như bảng ghi của một bảng.'

- Khi không có trường node trong tài liệu XML thì được coi là null.


VII. Native XML Database.

Tính năng của native xml database:

- Cho phép lưu trữ dữ liệu trong định dang xml.

- Cho phép truy vấn đối với dữ liệu của các collection.

- Cung cấp ngôn ngữ truy vấn để truy cập dữ liệu

- Cho phép việc cập nhật dữ liệu trong collections.
IIIX. Mapping document schema to database schema

a. Table-Based Mapping



Ưu điểm của table-based mapping
việc matching cấu trúc của bảng rất dễ dang.
việc viết mã lệnh đơn giản.
truy cập dữ liệu nhanh.

Nhượng điểm.
nó làm việc trong một phần nhỏ của một tài liệu xml.
nó không thể mở rộng cấu trúc vật lý của một tài liệu xml.

b. Object Mapping



Như bảng trên ta thấy thì việc mapping giữa XML Document với Object vô cùng đơn giản.