Pages

Showing posts with label Liferay. Show all posts
Showing posts with label Liferay. Show all posts

Thursday, April 25, 2013

Default Objects in jsp page [ Liferay ]

Link src :

There are some default objects in jsp page we are using in liferay apart from the actual default objects of liferay. But unfortunately we don't know how many default objects providing by liferay.
After little investigation I came to know all the default objects which are providing by liferay.
There are two taglibs which we are including every time when we create portlet.

Portlet tag lib

The above statements will give 14 default objects :
  1. actionRequest
  2. actionResponse
  3. eventRequest
  4. eventResponse
  5. portletConfig
  6. portletName
  7. portletPreferences
  8. portletPreferencesValues
  9. portletSession
  10. portletSessionScope
  11. renderRequest
  12. renderResponse
  13. resourceRequest
  14. resourceResponse
And the type of each object as follows :

liferay-theme tag lib

The above statements will give 18 default objects :
  1. themeDisplay
  2. company
  3. account
  4. user
  5. realUser
  6. contact
  7. layout
  8. layouts
  9. plid
  10. layoutTypePortlet
  11. scopeGroupId
  12. permissionChecker
  13. locale
  14. timeZone
  15. theme
  16. colorScheme
  17. portletDisplay
  18. portletGroupId
and the type of each object as follows :
We can get these defaults objects using pageContext object which is default of the plain jsp. Below statement is the example for getting default objects.
ActionRequest actionRequest = (ActionRequest) pageContext.findAttribute(“actionRequest”);

[ Liferay config ]Connect to SQL Server 2008 using Windows Authentication Mode

LF vs SQLServer
ta có hai option là  sử dùng jsdt driver  được lf cung cấp sẵn ( trong TOMCAT_HOME/lib/ext) hoặc dùng driver do MS cung cấp. chú ý khi sử dụng driver cùng phiên bản sql server đang sử dụng, với SQL Server 2008 cần bộ driver 3.0 mới nhất do MS cung cấp. 
đọc thêm jdts document http://jtds.sourceforge.net/doc.html
 portal-ext.properties :

    #
    # SQL Server
    #
    #jdbc.default.driverClassName=net.sourceforge.jtds.jdbc.Driver
    #jdbc.default.url=jdbc:jtds:sqlserver://localhost/lportal;domain=your-domain
    #jdbc.default.username=sa
    #jdbc.default.password=
or

## SQL Server

jdbc.default.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.default.url=jdbc:sqlserver://localhost;database=lportal6;integratedSecurity=true;
#jdbc.default.username=sa
#jdbc.default.password=sa


Nếu connect với chế độ win authen của sql server thì ta ko cần cũng cấp username & pass , thay vào đó ta cần cũng cấp các properties như trên ( chữ đỏ ) và cung cấp thêm lib :sqljdbc_auth.dll ( có cùng driver khi download ở trên , tôi đáp luôn nó vào bin  dir khi deploy trên tomcat)
nếu dùng option 2 ta cần đưa thêm sqljdbc4.jar


Note : instanceName  property

undeploy Ext Plugin [ Liferay ]


- đáp file war vào TOMCAT_HOME/deploy --> tự động được deploy , nếu deploy lần đầu thì yêu cầu reset tomcat ( "You must reboot the server and redeploy all other plugins."), các lần sau deploy ext plugin đó thì không cần reste
trong trường hợp deploy tiếp theo của ext plugin đó mà nó không apply ta thực hiện undeploy qua ant command hoặc manual mà undeploy như dưới. 
Ext Plugin can't be undeployed
Ext Plugin can't be nowadays even redeployed :(
Workaround:
  1. call
    ant clean
    from your ext-plugin directory, see Ext plugin thread
  2. or delete ext plugin from your Tomcat (similar for any other app server, sometimes you must undeploy the web application, not just delete it)
TOMCAT_HOME/lib/ext/
TOMCAT_HOME/....webapps/ROOT/WEB-INF ( tìm xml file )
TOMCAT_HOME/....webapps/ROOT/WEB-INF/lib/
TOMCAT_HOME/....webapps/
TOMCAT_HOME/....temp/liferay/com/liferay/portal/deploy/dependencie
Trong  thư mục trên tìm các jar file có pre_fix là ext ( ext-nameextplugin-ext.jar... ) mà del . 

Linux - Tomcat:

cd your-tomcat-install
# deleting web application
rm -rf webapps/*-ext
# deleting jars and config files from Liferay
find -name "ext-*" | xargs rm -rf
# stopping Liferay
bin/shutdown.sh ps ax | grep life
#... wait until life ends ;) ....
# # Starting Liferay
bin/startup.sh tail -f logs/catalina.out

Windows - Tomcat: 

delete all following files & directory and reboot Tomcat (assuming your Ext Plugin is named ehlo-ext):
./webapps/ehlo-ext ./lib/ext/ext-ehlo-ext-service.jar
./webapps/ROOT/WEB-INF/lib/ext-ehlo-ext-util-bridges.jar
./webapps/ROOT/WEB-INF/lib/ext-ehlo-ext-util-taglib.jar
./webapps/ROOT/WEB-INF/lib/ext-ehlo-ext-util-java.jar
./webapps/ROOT/WEB-INF/lib/ext-ehlo-ext-impl.jar
./webapps/ROOT/WEB-INF/ext-ehlo-ext.xml
./temp/liferay/com/liferay/portal/deploy/dependencies/ext-ehlo-ext-util-bridges.jar ./temp/liferay/com/liferay/portal/deploy/dependencies/ext-ehlo-ext-util-taglib.jar
./temp/liferay/com/liferay/portal/deploy/dependencies/ext-ehlo-ext-util-java.jar

My script 

on windows ( bat script ) : 
@echo off
set app_name=%MyProj
if "%app_name%" == "" goto end
set tomcat_home=D:\LIFERAY\liferay-portal-tomcat-6.1.0-ce-ga1\liferay-portal-6.1.0-ce-ga1\tomcat-7.0.23
rmdir /S /Q %tomcat_home%\webapps\%app_name%-ext
del /F /S /Q %tomcat_home%\lib\ext\ext-%app_name%-ext-service.jar
del /F /S /Q %tomcat_home%\webapps\ROOT\WEB-INF\lib\ext-%app_name%-ext-util-bridges.jar
del /F /S /Q %tomcat_home%\webapps\ROOT\WEB-INF\lib\ext-%app_name%-ext-util-taglib.jar
del /F /S /Q %tomcat_home%\webapps\ROOT\WEB-INF\lib\ext-%app_name%-ext-util-java.jar
del /F /S /Q %tomcat_home%\webapps\ROOT\WEB-INF\lib\ext-%app_name%-ext-impl.jar
del /F /S /Q %tomcat_home%\webapps\ROOT\WEB-INF\ext-%app_name%-ext.xml
del /F /S /Q %tomcat_home%\temp\liferay\com\liferay\portal\deploy\dependencies\ext-%app_name%-ext-util-bridges.jar
del /F /S /Q %tomcat_home%\temp\liferay\com\liferay\portal\deploy\dependencies\ext-%app_name%-ext-util-taglib.jar
del /F /S /Q %tomcat_home%\temp\liferay\com\liferay\portal\deploy\dependencies\ext-%app_name%-ext-util-java.jar
rmdir /S /Q %tomcat_home%\work\
rmdir /S /Q %tomcat_home%\temp\
:end

 on linux ( sh script )

#!/bin/sh
if [ $# -ne 1 ]; then
echo "Usage: clean-my-ext [ext-name]"
exit 1
fi
tomcat_home="/local/mnt/apps/liferay/tomcat-6.0.29"
app_name="$1"
rm -rf $tomcat_home/temp
rm -rf $tomcat_home/webapps/$app_name-ext
rm -rf $tomcat_home/webapps/ROOT/html/portlet/ext
rm -f $tomcat_home/lib/ext/ext-$app_name-ext-service.jar
rm -f $tomcat_home/webapps/ROOT/WEB-INF/lib/ext-$app_name-ext-util-bridges.jar
rm -f $tomcat_home/webapps/ROOT/WEB-INF/lib/ext-$app_name-ext-util-taglib.jar
rm -f $tomcat_home/webapps/ROOT/WEB-INF/lib/ext-$app_name-ext-util-java.jar
rm -f $tomcat_home/webapps/ROOT/WEB-INF/lib/ext-$app_name-ext-impl.jar
rm -f $tomcat_home/webapps/ROOT/WEB-INF/ext-$app_name-ext.xml
rm -f $tomcat_home/webapps/ROOT/WEB-INF/tiles-defs-ext.xml
rm -f $tomcat_home/temp/liferay/com/liferay/portal/deploy/dependencies/ext-$app_name-ext-util-bridges.jar
rm -f $tomcat_home/temp/liferay/com/liferay/portal/deploy/dependencies/ext-$app_name-ext-util-taglib.jar
rm -f $tomcat_home/temp/liferay/com/liferay/portal/deploy/dependencies/ext-$app_name-ext-util-java.jar

Monday, April 22, 2013

P6Spy - Log SQL statements along with Parameter Values [ Liferay & Hibernate ]


Description

P6Spy is a framework that enables database data to be seamlessly intercepted and manipulated with no code changes to existing application. The P6Spy distribution includes P6Log, an application which logs all JDBC transactions for any Java application us.

P6Spy official  site : http://sourceforge.net/projects/p6spy/

--> Hiểu đơn giản P6Spy là một framework cho phép chúng ta log toàn bộ JDBC Transactions trong ứng dụng mà không phải đưa thêm/thay đổi bất kỳ dòng code nào vào trong ứng dụng -> việc log hoàn toàn độc lập với ứng dụng. 
--> P6Spy không chỉ log các SQL Statement (  Trong JDBC tạo ra các Statement là câu query với các dấu  ? , mỗi dấu ? đại diện cho một tham số ) mà nó cho phép log toàn bộ các Parameter Values đã được pass vào, tức là câu SQL hoàn chính với giá trị của param sẽ thực hiện cuối cùng với DB. 

==> Rất tiện lợi cho mục đích debug. 

Một ví dụ khi  một Statement được log : 
SELECT COUNT(*) AS COUNT_VALUE
FROM Users_Roles WHERE userId = ? AND roleId = ?
Note :  với Hibernate thiết lập  show_sql  property  là true để show ra các câu SQL . 

--> Với P6Spy nó còn cho phép biết được các giá trị của các dấu ? là gì . 
1366824587058|1|1|statement|SELECT COUNT(*) AS COUNT_VALUE FROM Users_Roles WHERE userId = ? AND roleId = ? 
|SELECT COUNT(*) AS COUNT_VALUE FROM Users_Roles WHERE userId = '10195' AND roleId = '10163'

Tích hợp P6Spy trong liferay [ Hibernate]


Liferay sử dụng hibernate, do vậy  việc tích hợp p6spy là khá tương đồng. 

1. download file p6spy-install.jar từ http://sourceforge.net/projects/p6spy/
--> thực hiện giải nén và lấy hai file : p6spy.jar và spy.properties 
sử dụng lastest version  1.3 ( modified 2003-12-01)

2. copy p6spy.jar  vào thư mục lib của server,
ví dụ với tomcat  tôi copy vào : liferay-portal-6.1.1-ce-ga2\tomcat-7.0.27\lib\ext
Note : trong thư mục giải nén có chứa cả guide --> có thể tham khảo cho các server khác nhau.

3. Đưa file spy.properties vào ClassPath.
file spy.properties chứa các thông tin cấu hình cho p6spy. để p6spy có thể đọc được thì ta cần đưa nó vào classpath. 
ta có hai cách: 
-- các đơn gian là đặt nó vào root folder của project: với liferay tôi copy nó vào :\liferay-portal-6.1.1-ce-ga2\tomcat-7.0.27\webapps\ROOT\WEB-INF\classes
==> nó được load tương tự các file portal-*.properties  hay service-*.properties.
-- các hai là thiết lập   -Dp6.home   vào JAVA_OPTS  để chỉ ra folder chứa file spy.properties. 
ví dụ với tomcat trên window  --> tìm vào thêm dòng in đậm với đường dẫn thích hợp trên máy của bạn 
  .....\liferay-portal-6.1.1-ce-ga2\tomcat-7.0.27\bin\setenv.bat

set "JAVA_OPTS=%JAVA_OPTS%  -Dp6.home=D:/apps/liferay/liferay-portal-tomcat-6.1/liferay-portal-6.1.1-ce-ga2/tomcat-7.0.27/lib/ext 
 -Dfile.encoding=UTF8 -Djava.net.preferIPv4Stack=true -Dorg.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES=false -Duser.timezone=GMT -Xmx1024m -XX:MaxPermSize=256m"

4. edit spy.properties 
- Có một property bắt buộc cần edit đó là : realdriver  --> tương ứng với driver của db bạn đang connect tới
ví dụ  với MYSQL: 
# mysql Connector/J driver
 realdriver=com.mysql.jdbc.Driver
- thuộc tính thứ hai cần lưu ý  là  chỉ ra vị trí của  file log
ví dụ  : 
logfile     = D:/apps/liferay/liferay-portal-tomcat-6.1/liferay-portal-6.1.1-ce-ga2/tomcat-7.0.27/logs/spy.log

-  thuộc tính khác là : log4j.logger.p6spy  chỉ ra Level được log 
ví dụ log4j.logger.p6spy=INFO,STDOUT

5. Cầu hình JDBC trong portal-ext.properties với driver class là P6SpyDriver class của p6spy.
jdbc.default.driverClassName=com.p6spy.engine.spy.P6SpyDriver
jdbc.default.username=root
jdbc.default.url=jdbc:mysql://localhost/lportal?useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false
#
# Set other miscellaneous Hibernate properties.
#
hibernate.show_sql=true

final : Run server và tay sẽ thấy file  spy.log tương ứng ở vị trí đã config khi thực hiện các query thì chúng sẽ được log tại đây. Điều chính Log Level cho phù hợp với mục địch.

Lưu ý : việc tích hợp p6spy giảm thiểu tối đa thời gian cho việc debug, và sử dụng nó trong môi develop, khi ứng dụng được triển khai trên môi trường product thì cần loại bỏ  p6spy.
---------------------------------------------------------------------------------------------------------

Một số framework khác

LOG4JDBC

https://code.google.com/p/log4jdbc/
JDBC proxy driver for logging SQL and other interesting information.
log4jdbc is a Java JDBC driver that can log SQL and/or JDBC calls (and optionally SQL timing information) for other JDBC drivers using theSimple Logging Facade For Java (SLF4J) logging system.
2012-02-17: log4jdbc 1.2 final release! (It's about time, huh?) Full changelist here.

JDBC SQL Profiler

http://sourceforge.net/projects/sqlprofiler/?source=recommended
Description
Have you ever wondered which database indexes you should create for your JDBC-based application ? This Swing-based SQL profiler tries to offer a tool to monitor which tables and columns are accessed the most in SQL queries to recommend index creation

JDBC Logger

http://sourceforge.net/projects/jdbclogger/?source=recommended
Description
jdbclogger is a Java tool that intercepts and logs all database statements that use JDBC.
JDBC Logger Web Site

Elvyx

http://sourceforge.net/projects/elvyx/?source=recommended
Description
Elvyx is a tool designed to monitor and profile the jdbc activity on java projects. This jdbc profiler has a server with a built-in db and a client to improve the experience.