这篇文章原作者不知何故,在几个关键点上一笔带过,想要让例子运行起来,得费自己好大功夫才能搞定,去年我搞好了一次,没记博客,结果服务器不知怎么原来东西没了,这次我是花了2天时间搞定的,记下来一是为自己备忘,也希望能帮助那些还在苦闷的同行者。
1:Taste 的安装与简单的 Demo 实现
这一部分还是写的比较好的,基本按照文档操作就能看到结果
2:使用 Taste 构建推荐引擎实例 – 电影推荐引擎
这一部分就比较头痛了,我也无法一一详细描述,中间有很多困难之处。
首先从原文下载作者提供的代码,导入到eclipse,我的eclipse是Eclipse Java EE IDE for Web Developers,版本是Indigo Service Release 2,导入之后是一堆错,这个估计每个人都不一样,自己通过google应该都能解决。我的错误都是lib下的jar包引起的,参考下面:
原文的代码使用的是mahout0.2的,这个显然太老了,我用mahout 0.5的版本替换了,从后面结果看基本无影响,但由于0.5版本有几个地方被修改了,需要修改到适应0.5版本的,到项目的属性里边修改即可。
原来的项目和tomcat相关的几个jar包,由于新版本tomcat没有common/lib目录了,需要将这几个jar包指到正确的位置,有个包还要改名字,修改后分别是:
TOMCAT_HOME/lib/jasper.jar,TOMCAT_HOME/lib/jsp-api.jar,TOMCAT_HOME/lib/servlet-api.jar,自己修改到对应的目录即可。
web.xml也有编译错误,头上几行修改为:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
这些都解决后,可以编译了,出来一堆编译错误,修改如下:
MovieDataModel.java,添加一行public final static String TIMESTAMP_COLUMN = "timestamp";这里的timestamp对应的是数据库表里边的字段名,不能乱写,再出错的super函数最后加上一个参数TIMESTAMP_COLUMN,这个编译错误消失。
还有个和IDRescorer相关的编译错误,由于参数类型变了,修改为正确的类型即可,实际上这一项在项目中根本没用到,改对类型就可以了。
完成上面这些基本可以编译通过,接着出来一个新问题,项目不能导出为war
在属性里找到project facets这一项,可以在这里将项目转化为dynamic web module,java版本要选高于1.5版本的,否则会编译出错。
至此,项目可以放置到tomcat下webapps下了,但是由于转过来的版本打包后有些文件都没有打进去,我只好手工拷贝这些文件到解压目录,应该会有更好的方法,不过我java刚学不久,不知道怎么做,主要拷贝了web.xml,index.html
到这一步,在浏览器里访问website:8080/MovieSite应该能看到登录页面了,但登录肯定会告诉你something wrong,是最后出大招的时候了。
3:初始化数据库
无法登录是因为数据库中无初始数据,需要自己加,怎么加呢?原文肯定没有了,幸好有好人写了个程序,http://www.cnblogs.com/abelstronger/articles/2093847.html
从上面的链接下载到程序之后,需要自己编译3个程序添加数据到数据库,代码自己看,有java基础的应该很容易知道怎么做,如果DBUtils.java报getJDBCConnection找不到,加入下面代码:
public static Connection getJDBCConnection()
{
String driverClassName = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost/movie";
String username = "username"; //修改为你自己用户名
String password = "password"; //修改为你自己密码
Connection conn = null;
try {
Class.forName(driverClassName);
conn = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void closeConnection(Connection conn)
{
if(conn!=null)
{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
数据库的添加和表的创建参考原文即可。
4:数据源配置:
修改tomcat的server.xml文件,找到<Host> ... </Host>,在</Host>之前加入:
<Context path="/MovieSite" docBase="/usr/local/tomcat/webapps/MovieSite" debug="0" reloadable="true">
<Resource name="jdbc/movie" auth="Container" type="javax.sql.DataSource"
username="username"
password="password"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/movie"
maxActive="15"
maxIdle="7"
defaultTransactionIsolation="READ_COMMITTED"
validationQuery="Select 1" />
</Context>
其中的docBase和username,password等修改为你自己对应的值,
5:mysql驱动我用的mysql-connector-java-5.0.6-bin.jar,重启tomcat,这个时候应该可以用了,如果有问题,查看tomcat的logs目录下对应的日志tail -f catalina.out
6:用户登录的邮件地址查找movie数据库下的users表,随便输入一个即可,一般是test****@gmail.com,其中****是1-6040的一个数字,密码不需要填