解决ADF 11g PS2 中 StringIndexOutOfBoundsException

错误栈:
<May 7, 2010 9:28:58 PM CST> <Error> <HTTP> <BEA-101020> <[ServletContext@1701054785[app:em module:/em path:/em spec-
version:2.5]] Servlet failed with Exception
java.lang.StringIndexOutOfBoundsException: String index out of range: -2
at java.lang.String.substring(String.java:1937)
at java.lang.String.substring(String.java:1904)
at org.apache.myfaces.trinidadinternal.style.util.CSSGenerationUtils._getNSComponentSelector
(CSSGenerationUtils.java:632)
at org.apache.myfaces.trinidadinternal.style.util.CSSGenerationUtils.getNamespacedSelectors
(CSSGenerationUtils.java:525)
at org.apache.myfaces.trinidadinternal.style.cache.FileSystemStyleCache._getShortStyleClassMap
(FileSystemStyleCache.java:1086)
Truncated. see log file for complete stacktrace
>

这是JDK6u14以上版本在x86架构使用SSE4.2的处理器上使用时的一个已知bug,编号为6875866

解决方法:关闭JDK的UseSSE42Intrinsics



1. Project Properties -> Run/Debug/Profile -> Default (或其他配置文件名称) -> Edit… -> Java Options -> 加入 -XX:-UseSSE42Intrinsics .

2. 编辑 <JDEV_HOME>/jdev/bin/jdev.conf 加入如下内容 AddVMOption XX:-UseSS42Intrinsics

3. 修改有问题domain的setDomainEnv.sh,在文件末尾加入如下语句
JAVA_OPTIONS="${JAVA_OPTIONS} -XX:-UseSSE42Intrinsics"
export JAVA_OPTIONS