“基于 Apache Mahout 构建社会化推荐引擎”一文例子运行纪实

这篇文章原作者不知何故,在几个关键点上一笔带过,想要让例子运行起来,得费自己好大功夫才能搞定,去年我搞好了一次,没记博客,结果服务器不知怎么原来东西没了,这次我是花了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的一个数字,密码不需要填

你可能感兴趣的:(apache,eclipse,tomcat,数据库,String,引擎)