DWR Ajax Problem di Tomcat 7.0

Fitur baru pada Apache Tomcat 7.0 yaitu Mengimplementasi HTTPOnly dengan default value = true akan mengakibatkan masalah bagi Web Aplikasi yang menggunakan DWR sebagai Framework Ajax.

Berikut capture error Message yang terjadi pada Tomcat 7.0:

Baca berikut untuk lebih jelasnya.

http://redrata.com/2010/11/resolving-dwr-csrf-security-error-popups/

Untuk mengatasi permasalahan berikut, buka konfigurasi tomcat di context.xml ubah useHttpOnly valuenya menjadi “false”.

<Context useHttpOnly=”false”>

Restore Database Microsoft SQL Server Menggunakan Script

Bila Anda ingin merestore database SQLServer tanpa melalui Enterprise Manager, mungkin ini adalah referensi singkat bagaimana restore database menggunakan SQL Script.

print 'Restore database yourdb'
go
RESTORE DATABASE yourdb
FROM DISK = 'D:\YourDB\DataBackup\YourDBBackup.bak'
go

Membuat Fungsi Terbilang di Microsoft SQL Server

Lagi mencari fungsi di Microsoft SQL Server untuk menampilkan kata terbilang dari jumlah uang / angka, mungkin ini bagus untuk referensi.

Mungkin hasil dari output program dibawah adalah:

1.000.000,99 = (satu juta sembilan puluh sembilan sen)

CREATE FUNCTION [dbo].[f_terbilang] (@ls_amount AS DECIMAL(19,2)) 

RETURNS VARCHAR (200) AS
BEGIN
DECLARE
@ld_dec1 DECIMAL,
@ld_dec2 DECIMAL,
@ld_dec3 DECIMAL,
@ld_dec4 DECIMAL,
@ld_dec5 DECIMAL,
@ld_dec6 DECIMAL,
@ld_int1 INTEGER,
@ls_str1 VARCHAR(200),
@ls_str2 VARCHAR(200),
@ls_str3 VARCHAR(200),
@ls_str4 VARCHAR(200),
@ls_str5 VARCHAR(200),
@ls_str6 VARCHAR(200),
@ls_str7 VARCHAR(200),
@ls_str8 VARCHAR(200)

SET @ls_str2 = CASE WHEN LEN(RTRIM(CAST(CAST(@ls_amount AS bigint) AS VARCHAR(20)))) &lt; 15
THEN replicate('0',15 - LEN(RTRIM(CAST(CAST(@ls_amount AS bigint) AS VARCHAR(20))))) + RTRIM(CAST(CAST(@ls_amount AS bigint) AS VARCHAR(20)))
ELSE RTRIM(CAST(CAST(@ls_amount AS bigint) AS VARCHAR(20)))
END
--SET @z = CAST(15 - LEN(RTRIM(CAST(CAST(@ls_amount AS INTEGER) AS VARCHAR(20)))) AS VARCHAR(20)) -+ RTRIM(CAST(CAST(@ls_amount AS INTEGER) AS VARCHAR(20)))
SET @ld_dec2 = CAST(RIGHT(@ls_str2, 3) AS INTEGER)
SET @ld_dec1 = CAST(SUBSTRING(@ls_str2, 10, 3) AS INTEGER)
SET @ld_dec3 = CAST(SUBSTRING(@ls_str2, 7, 3) AS INTEGER)
SET @ld_dec4 = CAST(SUBSTRING(@ls_str2, 4, 3) AS INTEGER)
SET @ld_dec5 = CAST(Left(@ls_str2, 3) AS INTEGER)
SET @ls_str3 = CASE WHEN @ld_dec1 = 0 THEN ' ' ELSE CASE WHEN @ld_dec1 = 1 THEN 'Seribu' ELSE [dbo].f_terbilang_detail(@ld_dec1) + 'Ribu' END END
SET @ls_str4 = CASE WHEN @ld_dec3 = 0 THEN ' ' ELSE [dbo].f_terbilang_detail(@ld_dec3) + 'Juta ' END
SET @ls_str5 = CASE WHEN @ld_dec4 = 0 THEN ' ' ELSE [dbo].f_terbilang_detail(@ld_dec4) + 'Miliar' END
SET @ls_str6 = CASE
WHEN @ls_amount &lt; 1000
THEN [dbo].f_terbilang_detail(@ld_dec2)
WHEN @ls_amount &lt; 1000000
THEN @ls_str3 + ' ' + [dbo].f_terbilang_detail(@ld_dec2)
WHEN @ls_amount &lt; 1000000000
THEN [dbo].f_terbilang_detail(@ld_dec3) + ' '+ RTRIM('Juta ' + @ls_str3) + ' ' + [dbo].f_terbilang_detail(@ld_dec2)
WHEN @ls_amount &lt; 1000000000000 THEN [dbo].f_terbilang_detail(@ld_dec4) + ' '+ RTRIM('Miliar ' + @ls_str4 + @ls_str3) + ' ' + [dbo].f_terbilang_detail(@ld_dec2) WHEN @ls_amount &gt;= 1000000000000
THEN [dbo].f_terbilang_detail(@ld_dec5) + ' '+ RTRIM('Trilliun ' + @ls_str5 + @ls_str4 + @ls_str3) + ' ' + [dbo].f_terbilang_detail(@ld_dec2)
END
SET @ls_str7 = RTRIM(CAST(@ls_amount AS VARCHAR(20)))
SET @ld_dec6 = CASE WHEN CHARINDEX('.', @ls_str7) = 0 THEN 0 ELSE CAST(RTRIM(SUBSTRING(@ls_str7, CHARINDEX('.',@ls_str7) + 1, 2)) AS INTEGER) END
SET @ld_int1 = LEN(CASE WHEN CHARINDEX('.',@ls_str7) = 0 THEN '0' ELSE RTRIM(SUBSTRING(@ls_str7, CHARINDEX('.',@ls_str7) + 1, 2)) END)
If @ld_dec6 &gt; 0
BEGIN
IF @ld_dec6 &lt; 10 AND @ld_int1 = 1
SET @ld_dec6 = @ld_dec6 * 10
SET @ls_str8 = [dbo].f_terbilang_detail(@ld_dec6)
SET @ls_str1 = @ls_str6 + ' ' + @ls_str8 + 'Sen'
END
ELSE
SET @ls_str1 = @ls_str6 + ''
RETURN (@ls_str1)
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE  FUNCTION [DBO].[f_terbilang_detail]
	(@Nilai as decimal) RETURNS varchar(200) AS 

BEGIN
DECLARE
@ls_str1 VARCHAR(200),
@ls_str2 VARCHAR(200),
@li_int1 INTEGER,
@li_int2 INTEGER,
@li_int3 INTEGER,
@li_str3 VARCHAR(200),
@li_str4 VARCHAR(200),
@li_str5 VARCHAR(200)

    SET @ls_str2 = RIGHT(RTRIM(Str(@Nilai + 1000)), 3)
    SET @li_int1 = CAST(RIGHT(@ls_str2, 1) AS INTEGER)
    SET @li_int2 = CAST(SUBSTRING(@ls_str2, 2, 1) AS INTEGER)
    SET @li_int3 = CAST(LEFT(@ls_str2, 1) AS INTEGER)
    SET @li_str3 = 'Satu    Dua     Tiga    Empat   Lima    '
    SET @li_str3 = @li_str3 + 'Enam    Tujuh   Delapan Sembilan'

    IF @li_int1 = 0
        SET @ls_str1 = ''
    ELSE
        SET @ls_str1 = RTRIM(SUBSTRING(@li_str3, (@li_int1 * 8)-7, 8)) + ' '

    IF @li_int2 = 0
        SET @li_str4 = @ls_str1
    ELSE
        IF @li_int2 = 1
            IF @li_int1 = 0
                SET @li_str4 = 'Sepuluh '
            ELSE
                IF @li_int1 = 1
                    SET @li_str4 = 'Sebelas '
                ELSE
                    SET @li_str4 = RTRIM(SUBSTRING(@li_str3, @li_int1 * 8 - 7, 8)) + ' Belas '
        ELSE
            SET @li_str4 = RTRIM(SUBSTRING(@li_str3, @li_int2 * 8 - 7, 8)) + ' Puluh ' + @ls_str1

    IF @li_int3 = 0
        SET @li_str5 = @li_str4
    ELSE
        IF @li_int3 = 1
            SET @li_str5 = 'Seratus ' + @li_str4
        ELSE
            SET @li_str5 = RTRIM(SUBSTRING(@li_str3, @li_int3 * 8 - 7, 8)) + ' Ratus ' + @li_str4

RETURN @li_str5
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

Bagaimana membuat Sub Domain di IIS Manager

Pembahasan menarik untuk mengetahui bagaimana membuat subdomain seperti demo.example.com didalam IIS, misalkan anda mempunyai website di port 80 (default) yaitu example.com dan anda ingin membuat lagi satu website lainnya menggunakan demo.example.com. Mungkin tutorial ini dapat membantu anda

Pertama buka IIS Manager dengan mengetikkan “inetmgr” di Windows Web Server anda.

Lalu buat Web Application baru pada IIS dengan mengklik kiri Folder Website pada IIS -> Pilih New -> Pilih Website.

Lakukan langkah-langkah seperti dibawah:

Masukkan deskripsi dari website yang baru

Perhatikan dibawah pilih port selain 80 (contoh dibawah menggunakan port 8008), perhatikan Host header diisikan nama subdomain anda (contoh dibawah menggunakan demo.example.com).

Pilih lokasi Web-Application yang baru di WebServer Anda.

Klik Finish untuk menyelesaikan.

Untuk langkah selanjutnya mungkin Anda harus mengeset permission, dan sebagainya. Setelah itu seharusnya SubDomain anda sudah bisa diakses dari Internet.

Bagaimana Membuat Satu Atau Lebih Iterasi didalam Ibatis

Ibatis sebenernya bukan framework JPA yang saya sukai tetapi ada salah satu project dikantor menggunakan Ibatis, butuh seharian sebenernya untuk saya menyelesaikan pembuatan Iterasi di Ibatis tapi mudah-mudahan solusi ini bermanfaat bagi orang lain.

Intinya sih saya membuat sebuah model bantu / dummy model yang tidak ada hubungannya dengan database, Saya membuat 2 attribute array didalamnya yaitu PlanCode dan Prefix yang nanti akan saya buat dinamis querynya didalam Ibatis dengan menggunakan SQL IN CLAUSE


package com.avrist.repoprint.model;

public class BankExt {
	private String[] planCode;
	private String[] prefix;

	public String[] getPlanCode() {
		return planCode;
	}
	public void setPlanCode(String[] planCode) {
		this.planCode = planCode;
	}
	public String[] getPrefix() {
		return prefix;
	}
	public void setPrefix(String[] prefix) {
		this.prefix = prefix;
	}

}

Sudah membuat object modelnya, lalu buka settingan Ibatis.xml untuk dinamis SQLnya. Masukkan parameterClass=”BankExt” dimana ini adalah Type Alias dari Object BankExt. Setelah itu perhatikan Kata Kunci Iterate disini berfungsi untuk mengiterasi data array didalam property PlanCode dan Prefix.

<typeAlias alias="BankExt" type="com.avrist.repoprint.model.BankExt"/>

<select id="getFundCodeByPlanCode" resultMap="Fund" parameterClass="BankExt">
    	SELECT DISTINCT  a.COMPANYCODE, a.FUNDCODE, a.FUNDDESCRIPTION FROM FUNDMASTER a, PLANFUNDDESC b, PLANDESC c, COVERAGE D, COVERAGEFUNDALLOC E
		WHERE c.FUNDCONTROLDESCID=b.FUNDCONTROLDESCID
        AND (b.FUNDCODE=a.FUNDCODE AND  E.FUNDCODE=A.FUNDCODE  )
        AND (
        <dynamic prepend=" C.COVERAGECODE IN ">
        	<iterate property="planCode" open="(" close=")" conjunction=", ">
	            	'$planCode[]$'
	        </iterate>
    	</dynamic>
        AND C.COVERAGECODE=D.COVERAGECODE) AND D.COVERAGEPHASECODE='01'
		AND (a.COMPANYCODE=c.COMPANYCODE AND E.COMPANYCODE = D.COMPANYCODE AND C.COMPANYCODE = D.COMPANYCODE)
        AND (
        <dynamic prepend=" LEFT(D.POLICYNUMBER,4) IN ">
        	<iterate property="prefix" open="(" close=")" conjunction=", ">
	            	'$prefix[]$'
	        </iterate>
    	</dynamic>
        AND E.POLICYNUMBER = D.POLICYNUMBER)
    </select>

contoh diatas akan menghasilkan dinamis query seperti COVERAGECODE IN (‘AAAX’,'AAAB’) AND LEFT(POLICYNUMBER,4) IN (’3011′,’3022′).