செவ்வானச் சிதறல்கள்…

ஜாவா

டொம்கட்டின்(Tomcat) கொலைவெறி

by on Jan.25, 2012, under கணணி, ஜாவா

மென்பொருள் துறையில் பல வகையான வழங்கிகள் (servers) உள்ளன. அவை ப்ல்வேறுபட்ட விடயங்களை அடிப்படையாக கொண்டு பலவாறாகப் பிரிக்கலாம். எடுத்துக்காட்டாக, அவை கிடைக்கும் தன்மையைக் கொண்டு JBoss, Apache, Jetty, Tomcat, Glassfish போன்ற கட்டற்ற, திறந்த மூல, இலவச வழங்கிகளாகவும் இருக்க, Websphere, Weblogic, மற்றும் மைக்றோசொஃப்டின் IIS வழங்கி போன்றன மூடிய மூல மற்றும் அதிக விலைக்கு வாங்கிப் பயன்படுத்தக்கூடிய வழங்கிகளாகவும் இருக்கின்றன. இவை தவிர இன்னும் பல இங்கே குறிப்பிடாத வழங்கிகளும் பயன்பாட்டில் உள்ளதும் இங்கே கவனிக்கத்தக்க விடயம்.

 மேலே குறிப்ப்டிட்ட வழங்கிகளில் IIS மற்றும் Apache தவிர மற்றையவை அனைதும் ஜாவா கணனி மொழி சார்ந்த நிரல்கலை பயன்படுத்தி உருவாக்கப்படும் செயலிகளையே இவற்றில் இயக்க முடியும்.

சரி, இனி விசயத்துக்கு வருவோம். பொதுவாக JSP பங்களைக் கொண்டு உருவாக்கப்படும் செயலியின் வெளிச் செயற்பாடுகள் (functionalities) வழங்கியில் ஜாவா நிரல்களாக மாற்றப்பட்டு, பின்னர் .java கோப்புகளாக மாற்றம் பெற்று பின்னரே அவை இயந்திர மொழியாக மாற்றப்பட்டு அதன் செயற்பாடுகள் உருவாக்கப்படுகின்றன. இதன் போது, டொம்கட் (tomcat), work எனும் ஒரு கோப்பத்தை (folder/directory) உருவாக்கி, அதற்குள்ளேயே அந்த தற்காலிக, .JAVA கோப்புகளைச் சேமிக்கும்.

சில வேளைகளில், நாம் உண்மையான .jsp கோப்புகளில் மாற்றங்கள் செய்தாலும், அந்த மாற்றாத்தை வழங்கி கண்டு பிடிக்காமல், குறித்த கோப்பு இன்னமும் மாற்றப்படவில்லை என நினைத்து, ஏற்கனவே குறித்த .jsp கோப்புக்காக உருவாக்கப்பட்டிருந்த .java கோப்பையே மொழிமாற்றி (compile) இயக்க முற்படும். இதன்போது, குறித்த work என்ற கோப்பகத்தை அழித்து விட்டால், மறுபடியும் அந்த கோப்பகத்தை உருவாக்கி எல்லா .jsp கோப்புகளையும் .java கோப்புகளாக மாற்றி பின்னர் பைனரியாக மாற்றும்.

கடந்த வாரம், நான் தற்போது வேலைசெய்யும் ஜாவா சார்ந்த ஒரு செயலியை வழங்கியில் இட்டு, வழங்கியை இயக்க முற்பட்ட போது கீழே உள்ள வழு தோன்றியது. இதன் காரணம் எனக்கு தெரியவில்லை.

SEVERE: Exception loading sessions from persistent storage

என்ற வரியைப் பார்த்தால்,  இது ஏதோ தகவற்தளம் (database) உடன் தொடர்புடைய பிரச்சனை போல் என்று எண்ணி அதன் மீது கவனம் செலுத்த தொடங்கி விட வாய்ப்புண்டு.

INFO: Initializing Coyote HTTP/1.1 on http-9090

Jan 18, 2012 10:52:13 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 550 ms
Jan 18, 2012 10:52:13 AM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Jan 18, 2012 10:52:13 AM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.33
Jan 18, 2012 10:52:14 AM org.apache.catalina.session.StandardManager doLoad
SEVERE: IOException while loading persisted sessions: java.io.EOFException
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2281)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2750)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280)
at org.apache.catalina.util.CustomObjectInputStream.<init>(CustomObjectInputStream.java:58)
at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:362)
at org.apache.catalina.session.StandardManager.load(StandardManager.java:321)
at org.apache.catalina.session.StandardManager.start(StandardManager.java:648)
at org.apache.catalina.core.ContainerBase.setManager(ContainerBase.java:446)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4631)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Jan 18, 2012 10:52:14 AM org.apache.catalina.session.StandardManager start
SEVERE: Exception loading sessions from persistent storage

 

ஆனால் நான் முன்னர் கூறியது போல work என்ற கோப்பகத்தை அழித்து விட்டு வழங்கியை மீண்டும் இயக்கியவுடன் குறித்த அந்த வழு இல்லாமல் போய்விட்டது.  இதற்கு உண்மையான காரணம் என்ன என்று எனக்கு தெரியாது. ஆனால் இப்படியான வழு வருவது இதுவே முதன்முறை. அதன் போது நான் செய்த்த நடவைக்கையை இங்கே பகிர்ந்துள்ளேன்.

3 Comments :, , , , , , , , , , more...

கடைசியா புடுங்கிய ஆணி – Tamil(Unicode) Characters in Java basedweb application [5.1.2011]

by on Jan.06, 2011, under ஒருங்குறி, கணணி, ஜாவா

கடந்த சில வாரங்களாக எனக்கு இருந்த மிகப் பெரிய ஆணியை ஒருமாதிரி இன்று புடுங்கியாகிவிட்டது. நான் இப்ப வேலை செய்யிறது ஒரு பன்மொழிப் பயன்பாடு உள்ள ஒரு web application. தற்போது ஆங்கிலம் தமிழ் மற்றும் சிங்களம் ஆகியன பயன்படுத்தப்பட்டாலும், இதில கிட்டத்தட்ட 5க்கு மேற்பட்ட இந்திய மொழிகளைக் கொண்டு தரவு உள்ளீடு செய்ய வேண்டி இருக்கும்.

ஆக தரவு எல்லாமே ஒருங்குறியில தான் உள்ளீடு செய்ய வேணும். எங்கட application முழுக்க முழுக்க java வில தான் எழுதினது. Struts, Hibernate மற்றும் Spring ஆகிய framework பயன்படுத்தப்பட்டுள்ளது. database ஆக mysql5.1 பாவிக்கிறம். இந்த database  உருவாக்கேக்க character set = utf8 உம் collate = utf8_generic கும் பயன்படுத்தியிருக்கிறம். இதே போல தான் table உருவாக்கேக்க எல்லாம் மறக்காம utf8 பாவிச்சனாங்கள்.  தவிர database connection pooling க்காக proxool என்டிர API யும் பாவிக்கிறம். அதிலயும் connection settings எல்லாம் சரியாதான் இருந்திச்சு.

<driver-url>jdbc:mysql://localhost:3306/mboxx?useUnicode=true&amp;characterEncoding=UTF-8</driver-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<driver-url>jdbc:mysql://localhost:3306/mboxx?useUnicode=true&amp;characterEncoding=UTF-8</driver-url> <driver-class>com.mysql.jdbc.Driver</driver-class>
மேல இருக்கிற மாதிரி தான் proxool connection string குடுத்தனான். பிறகு form ஒண்டு உருவாக்கேக, jsp page ல meta tag க்கும் ஒழுங்கா தான் குடுத்திருந்தனான்.
<%@ page contentType=”text/html;charset=UTF-8″ import=”java.util.*” language=”java” pageEncoding=”UTF-8″ %>
மற்றும்
<meta http-equiv=”Content-type” content=”text/html; charset=utf-8″/>
முதலாவதா இருக்கிற வரியை [jst tag], jsp page இன்டை தொடக்கத்திலையும், அடுத்த வரியை html page இன்டை head tag க்கு உள்ளையும் எழுதி இருந்தனான். அது மட்டுமில்ல, servlet ல வாற request object ஐ பயன்படுத்த முதல் அதுக்கும் request.setCharacterEncoding(“UTF-8″); என்ட encoding எல்லாம் குடுத்தனான். ஆனா பாருங்கோ, web page ல தமிழ்ழை தட்டி சேமிக்க போனா, à®®à®¾à®²à®µà®©à¯ இப்பிடி தான் கோழி கோழி முட்டை முட்டையா எழுத்துக்கள் வந்திச்சு. இதுவே நேரா database client ஐ பயன்படுத்தி, database ல தமிழில தட்டீட்டு web application ஐ பாவிச்சு பாத்தா அது சரியா தமிழில தெரிஞ்சிச்சு.  என்னடா இது வில்லங்கம் பிடிச்ச ஆணியா கிடக்கு எண்டு கூகுல் சாமிய போட்டு உலுப்புலுப்பெண்டு 3 கிழமையா உலுப்பியும் ஒண்டும் கொட்டுண்டேல்ல. ஒரு கட்டத்தில இதுக்கு வேற வழி எதாவது இருக்கா எண்டு பாத்து தற்காலிகமா ஒரு தீர்வு குடுத்துட்டு மற்ற ஆணிகளைப்பாக்க போட்டன்.
பெரிசா ஒரு தீருவும் சொல்லேல்ல.  http://www.mikezilla.com/exp0012.html இந்த மாற்றிய பாவிச்சு, இதில மேல் பெட்டில தமிழில தட்டீட்டு பக்கத்தில இருக்கிற பொத்தான அமத்தினா, தட்டின எழுத்துக்களுக்கான ஒருங்குறி எழுத்துகளை தரும். உதாரணத்துக்கு, நிரூஜா என்ட பெயரை முதல் பெட்டியில தட்டீட்டு மாற்றியை பாவிச்சா, அதுக்கு சமமான  &#2984;&#3007;&#2992;&#3010;&#2972;&#3006; எண்ட ஒருங்குறி மதிப்புக்களை தரும். இத web application இல உள்ளிட்டா எல்லாம் சட்டபடி வந்திச்சு.
ஆனா, இது ஒரு தீர்வில்ல என்டு தெரிஞ்சாலும், வேற ஆணிகள் இருந்ததால இத அப்பிடியே விட்டுட்டன். இண்டைக்கு ஒரு வழி பண்ணிறதெண்டு, மறுபடியும் தூசு தட்டி பாக்கேக்க தான் ஒரு வழிய கண்டு பிடிச்சன். Spring  பயன்படுத்தேக்க, spring framework க்கிண்ட character encoding filters ஐ பாவிக்கலாம் எண்டு விளங்கிச்சு. web.xml கோப்பில கீழ இருக்கிற coding ஐ போட்டா எல்லாம் சரியாகிடும்.
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
இப்பிடி ஒரு வழியா வேலைசெய்ய வச்சாச்சு. இப்ப, request.characterEncoding, எல்லாம் தேவையில்லை. எல்லாம் சரியா வேலைசெய்யுது. ;)
12 Comments :, , , , , , , , , , more...

வந்தவர்கள்

free counters