Saturday, February 25, 2012

JDK7 ၏ new type checker

Google Applet Engine Java ကို မသုံးတာကြာပြီ။ အကြောင်းမှာ အလကားနေ SDK ဗားရှင်းအပ် လုပ်နေတာကတကြောင်း၊ ကြောင်တောင်တောင်နိုင်တာက တစ်ကြောင်း၊ GWT ကို လက်မခံချင်တာက တစ်ကြောင်း။ ဒီလိုနဲ့ Easy Servlet အကြောင်းရေးပြီးကတည်းက GAE ကို မသုံးဖြစ်တော့ပါ။

အသုံးများတာက အစဉ်ပြေတဲ့ Cloudbees ပဲဖြစ်ပါတယ်။ ဒါပေမယ့် ဒီနေ့ GAE နဲ့ပတ်သက်ပြီး FB မှာရှိတဲ့ Myanmar Java User Group ထဲမှာ မေးခွန်းတစ်ခု တက်လာပါတယ်။ မသုံးတာကြာပြီဖြစ်တဲ့ GAE ကို ဖွင့်တော့၊ ဗားရှင်းအသစ် သုံးလို့ရပါတယ်တဲ့။ အဲ့ဒါနဲ့ နောက်ဆုံးဖြစ်တဲ့ 1.6.2.1 ကို ဒေါင်လုဒ်လုပ်ပြီး၊ အင်စတော။ ပြီးတော့ တစ်ခါတည်း JDK 1.7.0.3 ထွက်နေတာနဲ့ ဒေါင်းလုဒ်လုပ်ပြီး အင်စတော။

လက်ရှိရှိပြီးသား servlet-tutorials ကို Run ကြည့်ပါတယ်။ အဲရာပေါ်လာပါတယ်။
警告: Error starting handlers
java.lang.VerifyError: Expecting a stackmap frame at branch target 29 in method com.episode5.AccessLogFilter.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V at offset 15
 at java.lang.Class.getDeclaredConstructors0(Native Method)
 at java.lang.Class.privateGetDeclaredConstructors(Class.java:2404)
 at java.lang.Class.getConstructor0(Class.java:2714)
 at java.lang.Class.newInstance0(Class.java:343)
 at java.lang.Class.newInstance(Class.java:325)
 at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
 at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:92)
 at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
 at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:662)
 at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
 at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
 at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
 at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
 at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
 at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
 at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
 at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
 at org.mortbay.jetty.Server.doStart(Server.java:224)
 at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
 at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:191)
 at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:239)
 at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:146)
 at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:164)
 at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:48)
 at com.google.appengine.tools.development.DevAppServerMain.(DevAppServerMain.java:113)
 at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:89)

အရင်ရေးတုန်းက ဘယ်အိုင်ပီကနေ လာပြီး Access လုပ်လဲဆိုတာကို Proxy ကို ခံထားရင်တောင် သိနိုင်သလား မသိနိုင်သလား စမ်းချင်တုန်းက ဖြည့်ထားတဲ့ Filter နေရာမှာ အဲရာတက်နေပါတယ်။ အဲ့ဒါနဲ့ java.lang.VerifyError နာမည်နဲ့ ရှာကြည့်ပါတယ်။ Java 7 အရောက်မှာ အတော်လေးကို တက်နေပုံရပါတယ်။ စိတ်မချရရင် JVM ကနေ throw လုပ်တတ်ပါတယ် ဆိုပဲ။ ဒါနဲ့ web.xml မှာ အဲ့ဒီ Filter ကို comment out လုပ်ပြီး၊ Run ကြည့်တော့ရပါတယ်။ ဒါပေမယ့် session အခန်းကို သုံးကြည့်တော့ Error တက်ပြန်ရော။

ဒါနဲ့ JDK 7 မှာစအသုံးပြုတဲ့ new type checker ကို အသုံးမပြုပါဘူးလို့ JVM Option မှာ -XX:-UseSplitVerifier လို့ သွားဖြည့်လိုက်ပါတယ်။ အဲ့ဒီတော့မှ အလုပ်လုပ်ပါတော့တယ်။


နောက်ရက်တွေမှပဲ Myanmar Java User မှာ JVM Option တွေအကြောင်းကို ရေးသားပါဦးမည်။

ကိုးကား
http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

No comments:

Post a Comment