前几个月试图将 Sun 为 GlassFish 平台定制的 Web 2.0 微博 Slynkr 部署到 Tomcat6 上,结果完全彻底败给 Sun 了, 下面是全纪录:
1) 自信满满的从 Sun 网站下载了 slynkr.war 在 MySQL 创建 db slynkrdb.
2) 拷贝 slynkr.war 到 $tomcat6/webapps/ 目录, 进入 http://localhost:8080/slynkr/
提示无法获取 java:comp/env/jdbc/slynkr_datasource 数据源;
3) 在 $tomcat6/conf/context.xml 配置了 <Resource name="jdbc/slynkr_datasource" ... /> 重启 Tomcat6,
还是提示无法获取 java:comp/env/jdbc/slynkr_datasource
4) Google 后, 设置 Tomcat6 启动环境变量:
JAVA_OPTS='-Djava.naming.factory.initial="org.apache.naming.java.javaURLContextFactory" -Djava.naming.factory.url.pkgs="org.apache.naming"'
重启 Tomcat6, 继续顽固的提示无法获取 java:comp/env/jdbc/slynkr_datasource
5) 再 Google 后,修改 $tomcat6/webapps/slynkr/WEB-INF/classes/META-INF/persistent.xml, 将:
<non-jta-data-source>java:comp/env/jdbc/slynkr_datasource</non-jta-data-source>
改为 (请大家注意新加的 '/' 符号!):
<non-jta-data-source>java:/comp/env/jdbc/slynkr_datasource</non-jta-data-source>
6) 终于不再提示无法获取 java:comp/env/jdbc/slynkr_datasource, 改为提示 NullPointerException.
7) Google 后, 下载 eclipse-link JPA, 修改 $tomcat6/webapps/slynkr/WEB-INF/classes/META-INF/persistent.xml 将原来的 Toplink JPA 替代为 eclipse-link JPA 实现;
8) 仍然提示 NullPointerException
看源代码发现获取 JNDI InitialContext 失败, 打印异常后发现 ClassNotFoundException: "org.apache.naming.java.javaURLContextFactory", 而该类在 $tomcat6/lib/catalina.jar 里存在,囧
9) 放弃使用 JNDI: <non-jta-data-source> 直接用在 $tomcat6/webapps/slynkr/WEB-INF/classes/META-INF/persistent.xml 写数据库连接 url, user, password:
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://..."/>
<property name="javax.persistence.jdbc.user" value="..."/>
<property name="javax.persistence.jdbc.password" value="..."/>
10) 好了, 不再提示 NullPointerException, 改为 index.jsp 提示 JSP 编译失败:属性中的 " 号没有转义。
11) Google 后, 加环境参数 -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING="false"
12) 仍然提示 JSP 编译失败:<jsp:useBean> 类型 Collection<Post> 不适当;
13) 挠头, 写了如下正则替换全部 JSP 中的 <jsp:useBean> 为 <% Xxx yyy = (Xxx) zzz.getAttribute("yyy") %>
find . -name '*.jsp' -exec perl -pi -e 's/<jsp:useBean\s+id="([^"]+)"\s+scope="([^"]+)"\s+class="([^"]+)"\s*\/>/<% $3 $1 = ($3) $2.getAttribute("$1"); %>/g' {} \;
find . -name '*.jsp' -exec perl -pi -e 's/<jsp:useBean\s+id="([^"]+)"\s+class="([^"]+)"\s*\/>/<% $2 $1 = ($2) pageContext.getAttribute("$1"); %>/g' {} \;
14) 现在 index.jsp 可以进入, 但显示不全, 后台打印 SQLException:TABLE 'slynkrdb.Users' not found.
15) 查 db 发现创建的表名是 USERS, 而 MySQL 表名大小写敏感...
16) 下载 User.java Post.java 等 JPA 类, 修改 JPA Annotation, 复制到 $tomcat6/webapps/slynkr/WEB-INF/classes/.../v1/, 重新编译
17) 提示各种表名大小写错误... 反复改各种 JPA Annotition 大小写, 终于不再出现 SQLException
18) 抹一把汗, 现在 index.jsp 终于可以访问了
19) 注册用户, 提示 JavaMail 无法发送邮件. 手头没有合适的 POP3 邮件服务器, 从数据库查出 TOKEN, 然后自己看代码拼激活链接:
http://localhost:8080/slynkr/validate?user=admin&token=...
20) 用户激活成功, 发现不能登陆... 前后台没有任何提示, 就是登录失败, 果然 Simple is Beautiful!
21) 继续 Google 后, 在 $tomcat6/conf/context.xml 配置 <Realm>
<Realm className="org.apache.catalina.realm.JDBCRealm"
driverName="com.mysql.jdbc.Driver"
connectionName="root" connectionPassword="password"
connectionURL="jdbc:mysql://localhost/slynkrdb?useUnicode=true&characterEncoding=utf8"
userTable="AUTH_ACCOUNT" userNameCol="ID" userCredCol="PASSWD" roleNameCol="GROUPS"
digest="SHA-1" />
22) 继续无法登录!读了一遍 Slynkr 文档, 从 Sun 下载自己的 slynkr_realm.jar 拷贝到 $tomcat6/lib, 还有 commons-codec-*.jar 然后修改 <Realm>:
<Realm className="com.sun.slynkr.platform.tomcat.SlynkrJDBCRealm" ... />
23) 可以登录, 但是还是粗鲁的提示 "You Do Not Have Access to the Requested Resource. " 大写, 黑体!
返回刷新显示已登录。
24) 无管理员权限!翻阅代码后, 手动修改数据库:
UPDATE AUTH_ACCOUNT SET GROUPS = 'USERS;VALIDATED;ADMIN' WHERE ID = 'admin'
然后重启, 刷新可以看到 "administration" 管理链接。
25) 进入创建 Categories, PostTypes, Ads 一切正常, 回到首页点 Categories -> 刚刚创建的内容, 显示很干净的 NullPointerException:
java.lang.NullPointerException
at com.sun.slynkr.web.ControllerFilter.doFilter(ControllerFilter.java:457)
at com.sun.slynkr.web.ControllerFilter.doFilter(ControllerFilter.java:282)
...
26) 继续点点点, 然后看到了这个异常:
java.lang.RuntimeException: TODO: Implement
at com.sun.slynkr.impl.UserWriterImpl.addLeader(UserWriterImpl.java:97)
at com.sun.slynkr.web.FollowingServlet.doGet(FollowingServlet.java:79)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
...
27) 最后说一句, 作为一个网站, 只要输入下面的网址, Slynkr 就抛 RuntimeException
http://localhost:8080/slynkr//
java.lang.RuntimeException: pathString:
at com.sun.slynkr.SPath.toQuery(SPath.java:90)
at com.sun.slynkr.web.ControllerFilter.doFilter(ControllerFilter.java:351)
at com.sun.slynkr.web.ControllerFilter.doFilter(ControllerFilter.java:282)
...
28) 无语, 删掉 Slynkr, DROP DATABASE, 睡觉
分享到:
相关推荐
SUN T7-1 固件SUN T7-1 固件SUN T7-1 固件SUN T7-1 固件SUN T7-1 固件SUN T7-1 固件SUN T7-1 固件SUN T7-1 固件SUN T7-1 固件SUN T7-1 固件SUN T7-1 固件SUN T7-1 固件SUN T7-1 固件SUN T7-1 固件SUN T7-1 固件SUN ...
SUN M10-4 固件SUN M10-4 固件SUN M10-4 固件SUN M10-4 固件SUN M10-4 固件SUN M10-4 固件SUN M10-4 固件SUN M10-4 固件SUN M10-4 固件SUN M10-4 固件SUN M10-4 固件SUN M10-4 固件SUN M10-4 固件SUN M10-4 固件SUN ...
标题中的问题“无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl”指出,这可能是Java Web应用开发中遇到的一个常见错误,涉及到JSP(JavaServer Pages)和JSTL(Java...
无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core],解决办法:WEB/INF的lib下,除了导入jstl.jar包,还要导入standard.jar包。另外,解压standard.jar包,把.tld文件...
EJB,全称Enterprise JavaBean,是Sun Microsystems(现已被Oracle收购)为J2EE(Java 2 Platform, Enterprise Edition)框架设计的一种服务器端组件模型。它的主要目标是简化企业级应用的开发,特别是分布式应用...
Java的sun.audio包是Java标准库的一个组成部分,主要用于处理音频数据和播放音频文件。这个包在Java早期版本中被广泛使用,尽管在后续版本中,Java Sound API成为了更推荐的音频处理工具,但sun.audio包仍然保留,为...
最近项目实验发现导入工具程序后项目有错,查看发现sun.misc.BASE64Decoder和sun.misc.BASE64Encoder不可用,找不到相应的类。 二、原因分析 冲浪后发现JDK中的lib\tools.jar和JRE中的lib\rt.jar已从Java SE 9中...
import com.sun.pdfview.FullScreenWindow;import com.sun.pdfview.OutlineNode;import com.sun.pdfview.PDFDestination;import com.sun.pdfview.PDFFile;import com.sun.pdfview.PDFObject;import ...
《深入解析JDK1.7源码:补全sun包下的源码》 在Java开发过程中,理解JDK源码是提升技术深度的关键步骤。JDK1.7版本的源码提供了对Java语言核心库的深入洞察,而sun包下的源码更是其中的重要组成部分,因为它们包含...
在JDK中,"sun"开头的源码包是Oracle(原Sun Microsystems)公司提供的核心API,它们包含了Java平台的许多底层实现,这些源码对于深入理解Java的内部机制至关重要。 "sun"前缀的源码主要涉及以下几个关键领域: 1....
本压缩包提供了JDK7的源码,特别强调了`sun`包和`sun.security`包下的源代码,这对于深入理解Java内部机制和安全机制有着极大的帮助。 `rt.jar`是JDK中的核心类库,包含了Java标准API的实现。这个jar文件中的`sun`...
Sun公司为泰国Taiyo Boeki公司实施了一套先进的会计系统,采用了Sun Fire 280R服务器作为核心硬件,搭配ACCPAC、Sun和Oracle公司的软件解决方案,为 Taiyo Boeki 提供了强大的处理能力、可扩展性以及经济高效的财务...
sun.misc.BASE64Decoder 其中包括 Android Base64Jar包 以及Java源代码 sun.misc.BASE64Decoder 其中包括 Android Base64Jar包 以及Java源代码 sun.misc.BASE64Decoder 其中包括 Android Base64Jar包 以及...
SUN xVM VirtualBox以其卓越的桌面虚拟化能力、易于使用的界面、丰富的工具集以及灵活的部署选项,成为了个人用户和企业级应用在面对桌面环境多样化需求时的理想解决方案。无论是其对开源代码的支持,还是对高级功能...
安装完JDK后,会在%JAVA_HOME% /jdk文件夹下生成一个src.zip,此文件夹对应rt.jar中的java源码,但细心研究后发现rt.jar中sun包下的文件不存在,也就是说sun包下的java源码并没有打包到src.zip中,可以到...
根据提供的文件信息,我们可以归纳出以下关于Sun StorEdge 3510 FC Array的相关知识点: ### 一、产品概述 Sun StorEdge 3510 FC Array是一款由Sun Microsystems公司与Dot Hill Systems Corporation合作开发的企业...
在Java编程语言中,`sun.misc.BASE64Encoder`和`BASE64Decoder`是用于进行Base64编码和解码的内部类,它们属于`sun.misc`包,这是一个非公开(非标准)的Java库。`sun.misc`包中的类主要用于JVM内部使用,因此在官方...
项目工程中用到jdk1.6相关方法,可以使用,但是升级到jdk1.8以后,编译出现java.lang.NoClassDefFoundError: sun/io/CharToByteConverter错误,后经查询,是jdk1.8版本中已经从sun.io.*中进行去除。网上找来了相关...
本文将深入探讨如何在VMware环境下利用Sun Cluster 3.2技术搭建Oracle 10g Real Application Clusters (RAC)的双机配置。 首先,让我们了解一下Sun Cluster 3.2。这是一个由Sun Microsystems(现已被Oracle公司收购...