前几个月试图将 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 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 ...
EJB是sun的服务器端组件模型,最大的用处是部署分布式应用程序
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 ...
无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core],解决办法:WEB/INF的lib下,除了导入jstl.jar包,还要导入standard.jar包。另外,解压standard.jar包,把.tld文件...
最近项目实验发现导入工具程序后项目有错,查看发现sun.misc.BASE64Decoder和sun.misc.BASE64Encoder不可用,找不到相应的类。 二、原因分析 冲浪后发现JDK中的lib\tools.jar和JRE中的lib\rt.jar已从Java SE 9中...
sun 文档sun 文档sun 文档sun 文档sun 文档sun 文档sun 文档sun 文档sun 文档sun 文档sun 文档sun 文档sun 文档sun 文档sun 文档sun 文档sun 文档
sun sun 精华sun sun 精华sun sun 精华sun sun 精华sun sun 精华
sun产品手册sun产品手册sun产品手册sun产品手册sun产品手册
项目工程中用到jdk1.6相关方法,可以使用,但是升级到jdk1.8以后,编译出现java.lang.NoClassDefFoundError: sun/io/CharToByteConverter错误,后经查询,是jdk1.8版本中已经从sun.io.*中进行去除。网上找来了相关...
sun.audio在这个包下面提供了大部分所需要的声音处 理类。注:sun包下面还有很多很有意思的技术支持,如java2D,Tools 等,大家可自己尝试去使用。
java sun.audio包,里面包含大部分音频操作的类,给需要的朋友
sun.misc.BASE64Decoder 其中包括 Android Base64Jar包 以及Java源代码 sun.misc.BASE64Decoder 其中包括 Android Base64Jar包 以及Java源代码 sun.misc.BASE64Decoder 其中包括 Android Base64Jar包 以及...
山西移动的eOA项目采用了Sun公司的整体解决方案,其中包括Sun公司的Sun Fire V880、V480及280R等硬件产品, Sun ONE软件套件中的Sun ONE Integration Server、Sun ONE Portal Server和Sun ONE Identity Server 等;...
Sun工作站资料Sun工作站资料Sun工作站资料Sun工作站资料
JDK7源码 包含rt.jar包下的 sun包源码 sun.security包等源码
安装完JDK后,会在%JAVA_HOME% /jdk文件夹下生成一个src.zip,此文件夹对应rt.jar中的java源码,但细心研究后发现rt.jar中sun包下的文件不存在,也就是说sun包下的java源码并没有打包到src.zip中,可以到...
主页:http://java.sun.com/javase/6/docs/technotes/guides/imageio/index.html JAI 中的 Image I/O Tools,支持更多图片类型,例如JPEG-LS, JPEG2000, 和 TIFF。 主页:https://jai-imageio.dev.java.net/。JAI ...
免费下载,解压后将tld和lib文件夹放入WEB-INF下面即可,绝对有效立竿见影
sun.misc.BASE64Encoder源码及jar包
sun公司sun的java实例手册!