Hướng dẫn biên dịch và deploy Sakai trên Windows

Chào các bạn, sau vài ngày vật vã tìm cách cài cho được Sakai từ Sakai souce, mình đã rút ra được vài điều và muốn chia sẻ lại cho tất cả các bạn.

Bài viết của mình sẽ hướng dẫn các bạn biên dịch, deploy mã nguồn Sakai mới nhất 2.7.0 bằng Apache Maven,  Apache Tomcat,  Java trên Windows.

Chuẩn bị: Trước tiên các bạn down các gói cần thiết về.

Sakai 2.7.0:

http://source.sakaiproject.org/release/2.7.0/artifacts/sakai-src-2.7.0.zip

Maven 2.2.1:

http://www.apache.org/dyn/closer.cgi/maven/binaries/apache-maven-2.2.1-bin.zip

Tomcat 5.5.30: nhớ là Tomcat 5 đó nhé, bản cũ hơn bản này cũng được vì Sakai 2.7.0 không chạy được trên Tomcat 6 hay Tomcat 7

http://mirror-fpt-telecom.fpt.net/apache/tomcat/tomcat-5/v5.5.30/bin/apache-tomcat-5.5.30.zip

Java 6:

http://www.oracle.com/technetwork/java/javase/downloads/jdk6-jsp-136632.html

MySQL:

http://www.mysql.com/downloads/mysql/

MySQL Java Connector:

http://dev.mysql.com/downloads/mirror.php?id=390509#mirrors

Cài đặt:
Trước khi cài đặt lưu ý với các bạn một vấn đề: khi bạn cài các phần mềm trên bạn nên để trong thư mục có đường dẫn không có chứa khoảng trắng. Ví dụ:
Good: C:\opt\tomcat\, C:\sakaistuff\installs\tomcat\
Bad: C:\program files\tomcat\, C:\opt\apache tomcat 5.5.28\
Cài đặt Java: bạn cài đặt gói jdk vừa down vào thư mục, ví dụ của mình là C:\opt\java.
Cài đặt biến môi trường cho Java: để cài đặt biến môi trường bạn vào My Computer –> Click chuột phải chọn Properties –> Advanced system settings –> Environment Valuables ( cài này trên Windows 7, trên XP tương tự). Trong System Variables, bấm New –> Bạn điền tên biến và giá trị vào sau đó OK.
Với JAVA có biến sau:
Tên biến:

JAVA_HOME

Giá trị: đường dẫn tới thư mục cài java, ví dụ của mình là

C:\opt\java\jdk1.6.0_20

Thêm vào đuôi biến Path giá trị như sau: nhớ gõ dấu “;” để ngăn cách nhé.

C:\opt\java\jdk1.6.0_20\bin

Cài đặt Maven: giải nén gói maven vào thư mục C:\opt\maven. Sau đó cài đặt các biên môi trường sau:
Tên biến:

MAVEN_HOME

Giá trị: đường dẫn tới thư mục cài Maven, ví dụ của mình là

C:\opt\maven

Tương tự thêm vào đuôi biến Path giá trị:

C:\opt\maven\bin

Tên biến:

MAVEN_OPTS

Gia trị: bạn cứ copy y chang rồi dán vào, xuống phần cài đặt Tomcat mình sẽ giải thích rõ tại sao chọn thông số như vậy.

Xms256m –Xmx512m -XX:PermSize=64m -XX:MaxPermSize=128m

Tạo thư mục .m2 để chứa thư viện biên dịch bằng lệnh sau:

mkdir %HOMEDRIVE%%HOMEPATH%\.m2\repository

Trên Windows thư mục Home mặc định là thư mục user của bạn ví dụ của mình là: C:\Users\hoaihuongbk
Tạo một file settings.xml trong thư mục .m2 để khai báo với Maven biết server home Tomcat nằm ở đâu với nội dung như sau:

Anh2
Trong đó : c:\opt\tomcat là đường dẫn tới thư mục cài Tomcat trên máy bạn. Bạn cũng có thể thay chỗ đó bằng

${env.CATALINA_HOME}

để chỉ cần chỉnh sửa trong System Environment là xong.
Nếu network của bạn cần proxy thì bạn thêm vào đoạn code sau:

Anh3

Cài đặt Tomcat: tương tự như những cài đặt trước bạn cài tomcat vào thư mục C:\opt\tomcat và cài đặt biến môi trường như sau:
Tên biến:

CATALINA_HOME

Giá trị: đường dẫn tới thư mục cài tomcat trên máy bạn, của mình là

C:\opt\tomcat

Thêm vào đuôi biến Path giá trị:

C:\opt\tomcat\bin

Tạo file setenv.bat đặt trogn thư mục bin của tomcat với nội dung như sau:

set JAVA_OPTS=-server -Xms256m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=128m -XX:NewSize=192m -XX:MaxNewSize=384m -Djava.awt.headless=true -Dhttp.agent=Sakai -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -Dsun.lang.ClassLoader.allowArraySyntax=true

Tới đây bạn để ý các giá trị Xms256m, Xmx512m: đó là giá trị quy định kích thước của đối tượng Java heap, khởi đầu là 256MB và lớn nhất là 512MB, cái này phụ thuộc vào dung lượng RAM trên máy bạn, nếu RAM 1GB thì nên để y như mình đề nghị, RAM 2GB thì bạn có thể chỉnh thành Xms512m, Xmx1024m, RAM 3G trở lên mình chưa thử, chú ý là giá trị Xms không được bằng hoặc lớn hơn giá trị Xmx. Tiếp đến giá trị -XX:PermSize=64m -XX:MaxPermSize=128m là giá trị vùng nhớ để load các class java, cũng tùy vào RAM của bạn mà nên để kích thước vừa phải, mình test trên RAM 1GB thì giá trị như trên, RAM 2GB thì có thể chỉnh thành -XX:PermSize=128m -XX:MaxPermSize=512m.
Một chú ý quan trọng là các giá trị trên phải đồng bộ giữa MAVEN_OPTS và JAVA_OPTS
Copy file MySQL Java Connecter (file *.jar nhé) vào thư mục:

C:\opt\tomcat\common\lib

Cấu hình Sakai: bạn giải nén sakai vào một thư mục nào đó mà bạn muốn với khuyến cáo đường dẫn như đầu bài viết. Ví dụ của mình là C:\opt\sakai.
Tạo thư mục sakai trong thư mục tomcat và copy file sakai.properties từ C:\opt\sakai\reference\docs vào thư mục sakai vừa tạo. Sau đó chỉnh sửa nội dung lại như sau:
Tìm và comment các thông số trong phần HSQLDB setting:

## HSQLDB settings – on by default
#vendor@org.sakaiproject.service.framework.sql.SqlService=hsqldb
#driverClassName@javax.sql.BaseDataSource=org.hsqldb.jdbcDriver
#hibernate.dialect=org.hibernate.dialect.HSQLDialect
#validationQuery@javax.sql.BaseDataSource=select 1 from
SYSTEM_USERS
# two hsqldb storage options: first for in-memory (no persistence between runs), second for disk based
#url@javax.sql.BaseDataSource=jdbc:hsqldb:.
#url@javax.sql.BaseDataSource=jdbc:hsqldb:${sakai.home}/db/sakai.db

Tìm và chỉnh sửa 2 dòng sau:

Set username@javax.sql.BaseDataSource=sakaiuser
Set password@javax.sql.BaseDataSource=sakaipwd

Trong đó “sakaiuser”, “sakaipwd” lần lượt là username và password để truy cập cơ sở dữ liệu sẽ được tạo trong hướng dẫn cài MySQL sau.
Tìm và uncomment các thông số trong phần MySQL

## MySQL settings – make sure to alter as appropriate
vendor@org.sakaiproject.db.api.SqlService=mysql
driverClassName@javax.sql.BaseDataSource=com.mysql.jdbc.Driver
hibernate.dialect=org.hibernate.dialect.MySQLDialect
url@javax.sql.BaseDataSource=jdbc:mysql://127.0.0.1:3306/sakai?
useUnicode=true&characterEncoding=UTF-8
validationQuery@javax.sql.BaseDataSource=select 1 from DUAL
defaultTransactionIsolationString@javax.sql.BaseDataSource=TRANSACTION_READ_COMMITTED

Cài đặt MySQL: tương tự bạn cũng cài đặt MySQL vào thư mục C:\opt\mysql.
Tạo biến môi trường,
Tên biến:

MySQL_HOME

Giá trị: đường dẫn tới thư mục cài mysql, ví dụ của mình là

C:\opt\mysql

Thêm vào cuối biến Path:

C:\opt\mysql

Tạo cơ sở dữ liệu:

create database sakai default character set utf8;

Tiếp tục gõ các lệnh sau:

grant all on sakai.* to sakaiuser@’localhost’ identified
by ‘sakaipwd’;
grant all on sakai.* to sakaiuser@’127.0.0.1′ identified
by ‘sakaipwd’;
flush privileges;

Trong đó “sakaiuser”, “sakaipwd” trùng với giá trị lúc nãy đã cài đặt.
Biên dịch và deploy:
Tạo file Master POM cho Sakai: gõ các dòng lệnh sau trong cmd

cd c:\opt\sakai\master
mvn clean install

Deploy Sakai: gõ các dòng lệnh sau trong cmd

cd c:\opt\sakai
mvn clean install sakai:deploy

Nếu lần đầu tiên biên dịch, chương trình sẽ tự động down các gói thư viện cần thiết nên thời gian có thể hơi lâu, chừng 2 giờ đồng hồ, tranh thủ kiếm tách cafe nhâm nhi tí quay lại là có, hehe.
Sau khi biên dịch và deploy thành công, các bạn chạy Tomcat bằng lệnh sau:

startup.bat

Mở browser lên và gõ vào địa chỉ:

http://localhost:8080/portal

Thướng thức thành quả đạt được…
Tắt Tomcat: gõ dòng lệnh sau trong cmd

shutdown.bat

Bạn đừng nản lòng khi biên dịch lỗi hoặc xảy ra hiện tượng outOfMemory, các bạn chỉ cần chỉnh lại các giá trị bộ nhớ mà mình nói lúc nãy đó.
Còn nhiều vấn đề muốn nói nhưng thôi để các bạn nào quan tâm thì nghiên cứu thêm:

http://confluence.sakaiproject.org/display/DOC/Sakai+2.7

Chúc các bạn thành công !!!

Install Apache Tomcat 6 on Ubuntu

Nếu bạn đang sử dụng Ubuntu và muốn cài đặt Apache Tomcat 6, bạn có thể làm theo hướng dẫn sau. Hehe…cái này mình dịch lại và update một số lệnh mới.

Điều đầu tiên, tất nhiên là máy bạn đã có cài java ( nên là sun-java nhé). Nếu chưa có thì cài đặt bằng lệnh:

sudo apt-get install sun-java6-jdk

Cấu hình mặc định java bạn xem bài hướng dẫn cài “Hướng dẫn cài đặt Eclipse 3.5 trên Ubuntu 9.04”
Sau đó bạn down apache về:

http://mirror-fpt-telecom.fpt.net/apache/tomcat/tomcat-6/v6.0.26/bin/apache-tomcat-6.0.26.tar.gz

Giải nén:

tar xvzf apache-tomcat-6.0.26.tar.gz

Move:

sudo mv apache-tomcat-6.0.26 /usr/local/tomcat

Tomcat cần cấu hình JAVA_HOME, cách tốt nhất là bạn edit .baskrc file đoạn code sau:

export JAVA_HOME=/usr/lib/jvm/java-6-sun

Để cho Tomcat tự động chạy khi khởi động bạn làm như sau:
Gõ lệnh:

sudo gedit /etc/init.d/tomcat

Paste đoạn code sau vào:

# Tomcat auto-start
#
# description: Auto-starts tomcat
# processname: tomcat
# pidfile: /var/run/tomcat.pid

export JAVA_HOME=/usr/lib/jvm/java-6-sun

case $1 in
start)
sh /usr/local/tomcat/bin/startup.sh
;;
stop)
sh /usr/local/tomcat/bin/shutdown.sh
;;
restart)
sh /usr/local/tomcat/bin/shutdown.sh
sh /usr/local/tomcat/bin/startup.sh
;;
esac
exit 0

Sau đó lưu lại và gõ tiếp lệnh:

sudo chmod 755 /etc/init.d/tomcat

Bước cuối cùng là liên kết với startup.sh ban đầu:

sudo ln -s /etc/init.d/tomcat /etc/rc1.d/K99tomcat
sudo ln -s /etc/init.d/tomcat /etc/rc2.d/S99tomcat

Xong ! Enjoy!!!

How to fix bug ” Can not find jdk on computer”

Các bạn đã bao giờ gặp lỗi này chưa?

Java SE Development Kit (JDK) was not found on this computer
JDK 6 or JDK 5 is required for installing the Netbeans IDE. Make sure that the JDK is properly installed and run installer again. You can specify valid JDK location using -javahome installer argument.

Thiệt là bực mình khi bạn cài đi cài lại JDK, thậm chí cài lại windows lun mà cũng vẫn bị lỗi như vậy. Sau những khó khăn như vậy mình đã mò được cách fix lỗi này như sau:
Bạn có 1 file cài đặt có đuôi .exe ví dụ của mình là :

java-tools-bundle-update7-windows.exe

Mở cmd: Start ->Run-> Gõ vào cmd. Màn hình Cmd hiện lên. Bạn di chuyển tới thư mục chứa file trên rồi gõ lệnh sau:

tên file  –extract java -jar bundle.jar

Ví dụ của mình là :

java-tools-bundle-update7-windows.exe –extract java -jar bundle.jar

Sau đó bạn bấm các lựa chọn cài đặt y chang như bình thường.

MiniChat Client-Server Basic

Đây là một bài tập về lập trình mạng bằng Java mà nhóm mình đã làm, vì không có nhiều thời gian và công sức đầu tư  để phát triển các chức năng bổ sung nhưng đây cũng là một phần mềm chat đơn giản là có thể gửi tin qua lại giữa các client trong một mạng Lan.

Một số hình ảnh demo:

Phần mềm này viết bằng Java và được export định dạng *.jar nên bạn chỉ cần có máy ảo JVM là có thể chạy được rồi.

Download here:

Client: http://www.mediafire.com/?qxqo4yyyxyg

Server: http://www.mediafire.com/?unwwytmzgzz

Source code:

http://www.mediafire.com/?ymow1mdztqh

Creating a simple Chat Client/Server Solution – Part5

Stage 5: Chat client moved to very simple GUI interface

import java.net.*;
import java.io.*;
import java.applet.*;
import java.awt.*;
public class ChatClient extends Applet
{  private Socket socket              = null;
private DataInputStream  console   = null;
private DataOutputStream streamOut = null;
private ChatClientThread client    = null;
private TextArea  display = new TextArea();
private TextField input   = new TextField();
private Button    send    = new Button(“Send”), connect = new Button(“Connect”),
quit    = new Button(“Bye”);
private String    serverName = “localhost”;
private int       serverPort = 4444;

public void init()
{  Panel keys = new Panel(); keys.setLayout(new GridLayout(1,2));
keys.add(quit); keys.add(connect);
Panel south = new Panel(); south.setLayout(new BorderLayout());
south.add(“West”, keys); south.add(“Center”, input);  south.add(“East”, send);
Label title = new Label(“Simple Chat Client Applet”, Label.CENTER);
title.setFont(new Font(“Helvetica”, Font.BOLD, 14));
setLayout(new BorderLayout());
add(“North”, title); add(“Center”, display);  add(“South”,  south);
quit.disable(); send.disable(); getParameters(); }
public boolean action(Event e, Object o)
{  if (e.target == quit)
{  input.setText(“.bye”);
send();  quit.disable(); send.disable(); connect.enable(); }
else if (e.target == connect)
{  connect(serverName, serverPort); }
else if (e.target == send)
{  send(); input.requestFocus(); }
return true; }
public void connect(String serverName, int serverPort)
{  println(“Establishing connection. Please wait …”);
try
{  socket = new Socket(serverName, serverPort);
println(“Connected: ” + socket);
open(); send.enable(); connect.disable(); quit.enable(); }
catch(UnknownHostException uhe)
{  println(“Host unknown: ” + uhe.getMessage()); }
catch(IOException ioe)
{  println(“Unexpected exception: ” + ioe.getMessage()); } }
private void send()
{  try
{  streamOut.writeUTF(input.getText()); streamOut.flush(); input.setText(“”); }
catch(IOException ioe)
{  println(“Sending error: ” + ioe.getMessage()); close(); } }
public void handle(String msg)
{  if (msg.equals(“.bye”))
{  println(“Good bye. Press RETURN to exit …”);  close(); }
else println(msg); }
public void open()
{  try
{  streamOut = new DataOutputStream(socket.getOutputStream());
client = new ChatClientThread(this, socket); }
catch(IOException ioe)
{  println(“Error opening output stream: ” + ioe); } }
public void close()
{  try
{  if (streamOut != null)  streamOut.close();
if (socket    != null)  socket.close(); }
catch(IOException ioe)
{  println(“Error closing …”); }
client.close();  client.stop(); }
private void println(String msg)
{  display.appendText(msg + “\n”); }
public void getParameters()
{  serverName = getParameter(“host”);
serverPort = Integer.parseInt(getParameter(“port”)); }
}

Nguồn: sưu tầm