Thứ Ba, 27 tháng 9, 2011

Get client's IP address - Axis2, JAX-WS Web Services

This article describes how to get IP address of clients invoking the axis2 web services and jax-ws web services.
//JAX-WS
package vn.com.me.test;
import javax.annotation.Resource;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.servlet.http.HttpServletRequest;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;

@WebService
public class WSTesting {
    @Resource
    WebServiceContext wsCtx;

    @WebMethod
    public String sayHello(){
	MessageContext msgCtx = wsCtx.getMessageContext();
        HttpServletRequest req = (HttpServletRequest) msgCtx.get(MessageContext.SERVLET_REQUEST);
	return "Hello guest. Your ip is " + req.getRemoteAddr();
	}
}



//Axis2
package vn.com.me.test;
import org.apache.axis2.context.MessageContext;
public class WSTesting {
    public String sayHello(){
	MessageContext context = MessageContext.getCurrentMessageContext();      
        String ipAddress = context.getProperty(MessageContext.REMOTE_ADDR).toString();
	return "Hello guest. Your ip is " + ipAddress;
	}
}



Thứ Hai, 26 tháng 9, 2011

Cài đặt Subversion với apache, svn access manager và websvn

I. Giới thiệu
Các bạn làm lập trình hẳn đều biết tầm quan trọng của việc quản lý các phiên bản của mã nguồn. Và hầu như mọi người đều đã được tiếp xúc qua với 1 chương trình quản lý phiên bản như CVS, Subversion (SVN), Visual Source Safe, Git, Mecurial... Ở đây, tôi sẽ giới thiệu về cách thức cài đặt chương trình quản lý phiên bản rất phổ biến là Subversion, kết hợp với các công cụ khác như apache (cung cấp cơ chế xác thực, sử dụng giao thức http/https), SVN access manager (Giao diện web quản lý phân quyền và mật khẩu người dùng), WebSVN (Đóng vai trò như 1 giao diện web của SVN client. Tuy nhiên chỉ dùng để xem). Để cài đặt được SVN access manager và  WebSVN, chúng ta cần cài đặt thêm MySQL và PHP.

II. Thực hiện
1. Môi trường
Hệ điều hành:
- Opensuse 11.2 (VMWare)
- Ubuntu 11.04
- CentOS (VMWare) (Sẽ cập nhập bổ sung phần cài đặt sau)
Để quá trình test được nhanh, tôi sử dụng các file ảnh VMWare tại địa chỉ: http://www.thoughtpolice.co.uk/. Để đơn giản, quá trình cài đặt sẽ sử dụng user root và cài đặt qua các repository.
2. Cài đặt
a) Opensuse
- Cài đặt Mysql
# yast -i mysql
Sau khi cài đặt cần thiết lập để mysql được an toàn hơn
# /usr/bin/mysql_secure_installation
Các bước như sau:
+ Thiết lập mật khẩu root:  mysql_root_pass
+ Gỡ bỏ người dùng nặc danh
+ Không cho phép truy cập tài khoản root từ xa
+ Gỡ bỏ cơ sở dữ liệu test
Bạn nào quan tâm đến chi tiết tại sao cần thực hiện vậy có thể tham khảo tại đây: http://dev.mysql.com/doc/refman/5.0/en/default-privileges.html
Sau khi thực hiện xong đăng nhập vào mysql để người dùng/cơ sở dữ liệu cho SVN access manager sử dụng:
# mysql -u root -p


CREATE DATABASE svnadmin;
CREATE USER svnadmin@localhost IDENTIFIED BY 'mysql_svnadmin_pass';
GRANT USAGE ON *.* TO svnadmin@localhost IDENTIFIED BY 'mysql_svnadmin_pass'
            WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0
                 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
GRANT ALL PRIVILEGES ON svnadmin.* TO svnadmin@localhost;

exit

- Cài đặt apache, php, subversion
# yast -i apache2 apache2-mod_php5 php5 php5-mysql php5-gettext
# yast -i subversion subversion-server


- Tạo cấu trúc thư mục cài đặt
# cd /srv
# mkdir svn
# cd svn
# mkdir conf  repos

- Tải các file cài đặt SVN access manager & WebSVN vào thư mục svn đã cài ở trên (Địa chỉ http://www.svn-access-manager.org/ & http://www.websvn.info/)
Giải nén và đổi tên các thư mục tương ứng.
# tar -xvfz svn_access_manager-0.5.0.3.tar.gz websvn-2.3.3.tar.gz
# mv svn_access_manager-0.5.0.3 svn_access_manager
# mv websvn-2.3.3 websvn

- Cấu hình nối apache và Subversion
# vi /etc/sysconfig/apache2
Bổ sung cấu hình APACHE_MODULES thêm các module: dav dav_svn authz_svn (APACHE_MODULES="...php5 dav dav_svn authz_svn")
Cấu hình xác thực SVN
# vi /etc/apache2/conf.d/subversion.conf
Bổ sung thêm:

<Location /svn>
DAV svn
SVNParentPath /srv/svn/repos
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /srv/svn/conf/password
AuthzSVNAccessFile /srv/svn/conf/authz
Require valid-user
</Location>

Thêm cấu hình subversion vào  httpd.conf
# vi /etc/apache2/httpd.conf
Bổ sung thêm dòng
Include /etc/apache2/conf.d/subversion.conf
- Cấu hình website SVN access manager & WebSVN
# vi /etc/apache2/httpd.conf
Bổ sung thêm các dòng

# SVN access manager
Alias /svnacm /srv/svn/svn_access_manager
<Directory "/srv/svn/svn_access_manager">
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
# websvn
Alias /websvn /srv/svn/websvn
<Directory "/srv/svn/websvn">
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<Location /websvn/>
AuthType Basic
AuthName "Websvn"
AuthUserFile "/srv/svn/conf/password"
Require valid-user
</Location>

- Cấu hình websvn
# cd /srv/svn/websvn/include
# cp distconfig.php config.php
# vi config.php
Sửa các dòng:
$config->parentPath('/srv/svn/repos');
$config->useAuthenticationFile('/srv/svn/conf/authz');

Cấu hình SVN access manager
# mkdir /etc/svn-access-manager
# chown -R wwwrun:www /srv/svn
# chown wwwrun:www svn-access-manager
# chmod -R 740 /srv/svn
# chmod 740 /etc/svn-access-manager
Chú ý SVN access manager sử dụng thư mục /etc/svn-access-manager để quản lý cấu hình. Do đó, chúng ta cần tạo thư mục thư mục này trước. Tất cả các quá trình quản lý svn, chúng ta dự định qua web, do đó ta sẽ phân quyền sở hữu các thư mục cài đặt cho user wwwrun (là user được tạo ra khi cài đặt apache)
Kiểm tra file php.ini để đảm bảo svn access manager chạy chuẩn
# vi /etc/php5/apache2/php.ini
mysql.allow_persistent = On
date.timezone = Asia/Saigon
Khởi động apache để cấu hình SVN qua giao diện web:
# rcapache2 start
Đăng nhập http://[your host]/svnacm/install/install.php
Các bước cấu hình theo thứ tự bên dưới:
Bước 1: Lựa chọn cơ sở dữ liệu Mysql như hình dưới

Bước 2: Cung cấp cấu hình user, password của mysql (Đã tạo ở bước trên)

Bước 3: Thiết lập tập kí tự sử dụng trong website
Bước 4:  Cung cấp thông tin về người dùng quản trị


Bước 5: Cấu hình các file chứa thông tin người dùng và file phân quyền svn
Bước 6: Hoàn thành cài đặt. Điều chỉnh lại độ dài tối thiểu mật khẩu người dùng nếu cần thiết.


Sau khi cài đặt xong, dùng user quản trị vừa tạo để đăng nhập vào địa chỉ: http://[your host]/svnacm và cấu hình user, phân quyền truy cập svn. Chi tiết cách thức sử dụng SVN access manager các bạn xem tại trang chủ của SVN access manager.
- Đăng nhập vào các địa chỉ http://[your host]/svn & http://[your host]/websvn để kiểm tra cấu hình đã đúng chưa.
- Sau khi cài đặt thành công, cần gỡ bỏ thư mục install của SVN access manager hoặc dùng file .httpaccess để chặn người dùng truy cập vào.
b) Ubuntu & CentOS
Để tránh phải viết lại 1 số bước không cần thiết, các bạn có thể tải file tóm tắt các bước cài đặt theo các địa chỉ sau:
https://sites.google.com/site/tranquangbk/archives/blog_quangtt/260911_subversion/svn_opensue.txt
https://sites.google.com/site/tranquangbk/archives/blog_quangtt/260911_subversion/svn_ubuntu.txt
(Phiên bản CentOS tạm thời nợ :D)
3. Các vấn đề cần chú ý
- Tại sao sử dụng SVN access manager?
SVN access manager cung cấp 1 giao diện web để người quản trị thông thường có thể không cần hiểu nhiều về SVN có thể phân quyền khá dễ dàng. Cá nhân tôi thích chỉnh sửa trực tiếp file authz hơn (Để an toàn, có thể cung cấp 1 hình thức như ftp server hoặc phân quyền 1 truy cập phù hợp để người quản trị có thể sửa file authz). Tuy nhiên tôi không phải là người quản trị SVN nên tôi quyết định sử dụng SVN access manager để giao việc cho người khác dễ dàng hơn.
- Quá trình cài đặt như thế đã đủ chưa?
Chưa đủ. Bạn cần phải quan tâm đến backup SVN. Mở rộng hơn nữa là cấu hình dùng LDAP để cung cấp cơ chế xác thực cho SVN; và quan trọng nhất là phải xây dựng chính sách sử dụng (policy) SVN thích hợp với điều kiện của công ty.
- Subversion quản lý được những gì?
Tất tần tật tài liệu và mã nguồn. Mặc dù vấn đề ban đầu chúng ta đề cập đến liên quan đến quản lý mã nguồn nhưng chúng ta hoàn toàn có thể sử dụng và nên svn để quản lý các tài liệu sử dụng trong công ty.

III. Tham khảo
1. http://en.wikipedia.org/wiki/Revision_control
2. http://en.wikipedia.org/wiki/Comparison_of_revision_control_software
3. http://subversion.apache.org/
4. http://tortoisesvn.tigris.org/
5. http://www.svn-access-manager.org/
6. http://www.websvn.info/
7. http://www.thoughtpolice.co.uk/
8. http://dev.mysql.com/doc/refman/5.0/en/default-privileges.html



Thứ Ba, 20 tháng 9, 2011

Nợ nần

Dạo này em nợ nần ngày càng nhiều. Không nợ tình, nợ tiền mà nợ lời hứa. Nói cụ thể là "Hứa thật nhiều và thất hứa ngày càng nhiều". Nguyên nhân có vài cái cỏn con và 1 cái to đùng. Cái to đùng đó liên quan tới cái thằng dở hơi là em. Tội lỗi do em cũng hiển nhiên:" Ko làm được thì đừng hứa hẹn, đừng bốc phét; mà hứa hẹn rồi thì phải cố mà làm đi!"
Càng nghĩ lại càng thấy bực. Đã vậy hứa hẹn thêm 1 phát nữa ở giữa chốn công cộng này (công cộng nơi miền núi, chẳng ma nào thèm ngó :D). Bắt đầu từ tuần này, em hứa sẽ giải quyết dần dần các lời hứa cũ, đồng thời mỗi tuần phải thòi ra 1 bài viết cho cái blog của em. Kỹ thuật, tâm sự tán gái, cóc nhảy nhảm nhí gì cũng được, miễn sao có bài viết. Nếu tuần nào em có nhiều bài viết thì tuần sau đấy có thể ko phải post bài (Coi như thưởng cho em thời gian đi kiếm bạn gái vậy :P)
Bây giờ quay lại viết cái gì? Em là thằng lập trình viên (Cái thằng suốt ngày ngồi hì hục gõ được mấy dòng code, cười vơ vẩn khi hoàn thành công việc và mấy ngày sau quên tiệt mình đã viết cái gì). Cụ thể hơn là 1 thằng lập trình viên trình độ còi. Nhưng còi kiểu gì thì đấy cũng là cái bớt còi nhất của em. Thế nên em sẽ viết liên quan đến công việc là chính.
Công việc của em liên quan đến cái gì? Em đang lập trình Java, liên quan đến mảng thanh toán điện tử, ngân hàng. Dotnet, PHP, ASP, SQLServer, Mysql , Oracle, Python... em đều có sờ qua, đa số giờ chẳng nhớ gì. Web, ứng dụng server, windows em đã thử mùi và giờ cũng chẳng nhớ được mấy :)). Vị trí thì em cũng đã nếm qua từ trưởng phòng, trường nhóm đến nhân viên quèn. Giờ vẫn nhớ được làm thằng quản lý sướng hơn thằng nhân viên thế nào :P. Mùi nhân viên thì chẳng cần nhớ, vì giờ em đang làm nhân viên quèn :D.
Nhắc đến công việc lại nhớ, cả 2 công ty trước em đều có 1 số dự định, và đều ra đi khi chưa hoàn thành hết. Nói chung là nợ nần. Lại nợ :(. Em muốn bỏ thời gian tìm hiểu, hoàn thiện lại những vấn đề trước đây còn dang dở. Từ những vấn đề liên quan đến quản trị hệ thống như mail server, subversion, bug tracker, nagios... đến việc dựng lại và giải quyết những vấn đề ứng dụng core trước đây còn vướng mắc. Khá nhiều thứ cần quan tâm :).
Quyết định vậy đi. Đầu óc em hơi đần, ko quen với những gì dài dòng, lằng nhằng quá. Em hứa là sẽ ko để mang tiếng là thằng họ Hứa. Bác nào lỡ đọc và lỡ phát hiện em vi phạm có thể yêu cầu em mời trà đá miễn phí. Em hứa sẽ cố gắng ko trốn nợ :D