Archive for the ‘ Web Technology ’ Category

การ Config Datasource บน JBoss AS7/JBoss EAP 6.x

หลังจากมีโอกาสมาใช้งาน JBoss EAP 6.3 แล้วต้องการกำหนด Datasource สำหรับ MySQL เพื่อทดสอบการใช้งาน Hibernate ทำให้รู้ว่าขั้นตอนในการกำหนด Datasource นั้นแตกต่างจาก JBoss AS 5.x, 6.x พอสมควรเลยขอบันทึกไว้เป็นขั้นตอนดังนี้
1. ทำการ Config Library ก่อนดังต่อไปนี้

1.1 ทำการสร้าง module ขึ้นมาเพื่อ load JDBC Driver ก่อน โดยเข้าไปที่ [jboss-home]\modules
1.2 สร้าง folder com/mysql/main แล้วทำการ copy mysql-connector-java-.jar มาไว้ที่ path นี้
1.3 สร้างไฟล์module.xml โดยมีเนื้อหาดังนี้

			<?xml version="1.0" encoding="UTF-8"?>
			<module xmlns="urn:jboss:module:1.1" name="com.mysql">
				<resources>
					<resource-root path="mysql-connector-java-5.1.30-bin.jar"/>
				</resources>
				<dependencies>
					<module name="javax.api"/>
					<module name="javax.transaction.api"/>  
				</dependencies>
			</module>
		

ส่วนที่สำคัญคือ
name : คื่อส่วน path ตาม Folder ที่สร้างไว้ (ตัด main ออก) ตามตัวอย่างคือ com/mysql/main จะกำหนดเป็น “com.mysql”
resource-root : คือชื่ือ Jar File ที่เราเอามาวางไว้ภายใต้ path com/mysql/main
dependencies : Module library ที่เกี่ยวข้อง เพื่อให้ JBoss load ขึ้นมาด้วย
1.4 บันทึกไฟล์

2. ทำการ Config Datasource

2.1 ทำการแก้ไข [jboss-home]\standalone\configuration\standalone.xml เพื่อทำการเพิ่ม Driver และ Datasource (หาก เลือก profile ในการ deploy ที่ไม่ใช่ standalone.xml ให้แก้ไขตาม profile นั้นๆ)
2.2 ไปที่ section

		<subsystem xmlns="urn:jboss:domain:datasources:1.2">
            <datasources>
                <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
                    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
                    <driver>h2</driver>
                    <security>
                        <user-name>sa</user-name>
                        <password>sa</password>
                    </security>
                </datasource>
                <drivers>
                    <driver name="h2" module="com.h2database.h2">
                        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                    </driver>
                </drivers>
            </datasources>
        </subsystem>
		

แล้วทำการเพิ่ม MySQL Driver และ Datasource เป็นดังนี้

        <subsystem xmlns="urn:jboss:domain:datasources:1.2">
            <datasources>
                <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
                    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
                    <driver>h2</driver>
                    <security>
                        <user-name>sa</user-name>
                        <password>sa</password>
                    </security>
                </datasource>
                <datasource jta="false" jndi-name="java:jboss/datasources/MySQLDS" pool-name="MySQLDS" enabled="false" use-ccm="false">
                    <connection-url>jdbc:mysql://localhost:3306/hibernate?characterEncoding=utf8</connection-url>
                    <driver-class>com.mysql.jdbc.Driver</driver-class>
                    <driver>mysql</driver>
                    <security>
                        <user-name>root</user-name>
                        <password>password</password>
                    </security>
                </datasource>
                <drivers>
                    <driver name="h2" module="com.h2database.h2">
                        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                    </driver>
                    <driver name="mysql" module="com.mysql">
                        <driver-class>com.mysql.jdbc.Driver</driver-class>
                        <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
                    </driver>
                </drivers>
            </datasources>
        </subsystem>
		

2.3 ทำการ Stop/Start หรือ Restart JBoss Server ก็สามารถใช้งาน JNDI Datasource ที่สร้างได้แล้ว
หมายเหตุ : ชื่อ jndi-name ต้องขึ้นต้นด้วย java:/ หรือ java:jboss/ เท่านั้น

Read more

แก้ไข Richfaces 4.3.0 ให้รองรับปี พ.ศ

แก้ไข Richfaces 4.3.0 ให้รองรับปี พ.ศ
สืบเนื่องจากระบบที่พัฒนามาต้องการให้แสดง ปฏิทินใน Rcihfaces เป็นภาษาไทย จากประสบการณ์ที่ผ่านมาใน Version 3.3.3 Final นั้นจำเป็นต้องไปแก้ไขไฟล์ calendar.js ซึ่งก็สามารถใช้งานได้ดี แต่พอมา Version นี้ก็ไม่แตกต่างกันครับ
คือ ต้องแก้อยู่ดี เพราะปฏิทินนั้น แสดงชื่อเดือน อะไรถูกต้องครับ ยกเว้นพวก ปี วันที่ปัจจุบัน เพราะ เวลากำหนด locale เป็น th_TH แล้ว ตัว ปฏิทินจะสร้าง JavaScript ในหน้าจอดังนี้

<script type="text/javascript">
	RichFaces.ui.Calendar.addLocale("th_TH",
		{"monthLabels":["มกราคม","กุมภาพันธ์","มีนาคม"......"ธันวาคม"]
		,"minDaysInFirstWeek":1
		,"monthLabelsShort":["..ชื่อเดือน .."]
		,"firstWeekDay":0
		,"weekDayLabels":["ชื่อสัปดาห์"]
		,"weekDayLabelsShort":["ชื่อสัปดาห์"] 
		} 
	);

	new RichFaces.ui.Calendar("startDate","th_TH",{
	datePattern":"dd\/MM\/yyyy"
	,"currentDate":new Date(2556,1,26)
	,"style":"z\u002Dindex: 3"
	} 
).load();
</script>

พอส่ง currentDate เป็น พ.ศ ตามที่ Java เข้าใจไปให้ JavaScript ที่นี้ก็ลำบากเลยครับ เวลาเปิดหน้าจอครั้งแรกไม่มีปัญหาอะไรครับ แต่ถ้าคลิกไป คลิกมา ตัวปฏิทินจะแสดงผลเพี้ยนจาก 2556 ไปเป็น 769 บ้าง ตามสถานะการณ์ เนื่องจาก Java พยายามแปลงไปเป็นปีไทย แต่ JavaScript ไม่รู้จัก
หลังจากประสบปัญหานี้ จึงลองไปค้นหาข้อมูลดู ซึ่งไม่เจอใครแก้ปัญหาไว้เลย เลยต้องมางมเอง จากประาบการณ์ ใน Version 3.3.3 Final คิดว่าจะง่าย แต่ ….. ขอโทษที Version 4.3.0 Final พี่แกเปลี่ยน Code อีกแล้วครับ ออกไปเขียนแนว Jquery plugin ต้องงมอีกพอสมควร
เสียเวลามาเกือบทั้งวัด สุดท้ายก็แก้ไขเสร็จเรียบร้อย เลยมาเขียนไว้สักหน่อย การแก้ไขทำตามนี้เลย
Read more

Enable Autocomplete JSF 1.2 in eclipse

หลังจากหันเหชีวิตไปจับ Netbeans มาได้หลายเดือนถึงคราวกลับมาใช้ Eclipse เจ้าเก่าแต่ดันเจอปัญหาไม่สามารถใช้ Autocomplete ใน JSF 1.2 (.xhtml) ได้ แต่ถ้าเป็นไฟล์ .jsp สามารถใช้ได้ปกติ เมือเกิดเหตุการณ์เช่นนี้แทบอยากคลานกลับไปหา Netbeans แต่เดียวก่อนครับ ในฐานะโปรแกรมเมอร์ เราไม่ควรยอมแพ้อะไรง่ายๆครับ สู้ๆ ว่าแล้วก็สอบถาม อ.google ก็คำตอบมาว่า ให้ไปที่

Window > Preferences > General > Content Types > Text > JSP > Add (*.xhtml)

แสดงรูปดังต่อไปนี้

จากนั้นทดลองใช้งานดู โอ้ๆ มันยอดมาก

แหล่งข้อมูล
Eclipse autocomplete (content assist) with facelets (jsf) and xhtml
Facelets and XSD-converted TLDs for Eclipse

How to run JSF 2.x in Jboss AS 5.1

I have new project run on Jboss AS 5.1.0.GA using JSF 2.1.10 and RichFaces 4.2.2 final.
I try to search the solution on Google I found “Stinky Cheese” article “JBoss 5 with JSF 2 on a per-app basis” this is very usefull.

1. Add the following three things to web.xml

<!-- JSF 2: this tells JBoss 5 to use the jsf jars included in the app -->
<context-param>
   <param-name>org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL</param-name>
   <param-value>true</param-value>
</context-param>

<!-- JSF 2: this needs to be included to avoid an error message -->
<context-param>
   <param-name>com.sun.faces.injectionProvider</param-name>
   <param-value>org.jboss.web.jsf.integration.injection.JBossInjectionProvider</param-value>
</context-param>

<!-- JSF 2: use pages named .xhtml instead of .jsp. -->
<context-param>
   <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
   <param-value>.xhtml</param-value>
</context-param>

2. Download Jboss AS 6.1
3. Copy the following jars from JBoss 6.1 into the WEB-INF\lib directory.

<Jboss6.1>\common\lib\jboss-mc-int-servlet.jar
<Jboss6.1 6>server\default\deployers\jsf.deployer\Mojarra-2.0\jsf-libs\jboss-faces.jar

4. Add following jar to WEB-INF\lib directory.(If not exists on you application)

	el-api-2.2.jar
	el-impl-2.2.jar
	jsp-api-2.1.jar

Application environments
1. Jboss AS 5.1.0.GA
2. JDK 1.6
3. RichFaces 4.2.2
4. JSF 2.1.10

Reference
JBoss 5 with JSF 2 on a per-app basis

CSS page break

กำลังหา code css มาจัดการการขึ้นหน้าใหม่เวลาที่ต้องการโดยข้อมูลไม่จำเป็นต้องเต็มหน้าก่อน ค้นไปเจอบทความของคุณ Rux’s ดังโค๊ดข้างล่างนี้

<html>
<head>
<title>Print with page break</title>
<style type="text/css">
@media all{
  .page-break  { display:none; }
}
 
@media print{
  .page-break  { display:block; page-break-before:always; }
}
</style>
</head>
<body>
    <h1>Page1</h1>
    <div class="page-break" ></div>
    <h1>Page2</h1>
    <div class="page-break" ></div>
    <h1>Page3</h1>
</body>
</html>

แหล่งข้อมูล
http://www.ruxcom.com/css-page-break