ok, thanks for your detailed answer - now I understand! :)
So my problem is that I must import the MySQL Connector/J into my source
files because I need them. The nasty thing about that is that I just
need "import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;" in my
dataSource but that won't work because there shouldn't be any
dependencies on that because I must configure the web application to
use/provide the connector.
omg... Is there any example round here that shows such a configuration?
Am 16.02.2011 16:02, schrieb Sean Owen:
The output of taste-web is a .war file, a deployable web application.
By itself it does nothing; it has to be deployed in a servlet
container like Tomcat (or Glassfish, or Resin...)
The Maven script should also be able to run the example via a built-in
web container, inside Maven, which is based on yet another project
(Jetty, if I recall correctly).
If you change that example to use MySQLDataModel, that's fine. It
still compiles. There is no way it depends on MySQL Connector/J
directly. If you get such compile errors it's due to dependencies in
your project, not Mahout, so I couldn't really help with that.
To be clear: in general, you *never* use MySQL Connector/J directly in
your app. You configure your container to use it. So if you are having
compile-time problems with the connector, that's following the wrong
approach, and not one that Mahout uses.
The built-in Jetty container wouldn't run such a modification, even
though the result compiles, because the built-in Jetty container would
have no MySQL database connection configured. I suppose you could
manage to "fix" this by depending directly on MySQL Connector/J in the
Maven build, so that the classes are added to the web app instead of
container, but that's generally the wrong way to do it so I wouldn't
want to help you down that road.
To keep it simple I recommend you just look up how to configure a JDBC
data source in Tomcat and try deploying the .war in Tomcat. That's the
normal usage. I think if you read up on J2EE containers a bit it will
make a lot more sense.
2011/2/16 Daniel Mühlbachler<[email protected]>:
ok, so I must install tomcat too and write an extra application for tomcat
to realise a standalone server to handle SOAP request handling? Wouldn't
that be nonsense because "taste-web" does the same?
I'm sorry but maybe I have a simple problem understanding the purpose of the
"taste-web" thing because the provided grouplens example works too if I copy
the compiled jar file into the lib directory and so on. Because of that I
thought it would be the same - just edit the grouplens example to use
MySQLDataModel instead of FileDataModel, compile it, make a jar, copy it
into the same directory and run mvn package; then run mvn jetty:run-war and
everything should work. In fact, I can't compile my source files because
they need mahout core and MySQL Connector/J (to provide a dataSource).
I'm really confused now...
Quote from the source you provided me - that's what I meant that I want:
"
Standalone server
A Mahout recommender can also be run as an external server, which may be the
only option for non-Java applications. It can be exposed as a web
application via{{org.apach.mahout.cf.taste.web.RecommenderServlet}}, and
your application can then access recommendations via simple HTTP requests
and response, or as a full-fledged SOAP web service. See above, and see the
javadoc for details.
To deploy your Recommender as an external server:
* Obtain a copy of the Mahout distribution, either from SVN or as a
downloaded archive.
* Create an implementation of
org.apache.mahout.cf.taste.recommender.Recommender (must have a
no-arg constructor).
* Compile it and create a JAR file containing your implementation.
* Navigate to the directory where you unpacked the Mahout
distribution, and navigate to{{trunk}}.
* Run{{mvn install}}, which builds and installs Mahout core to your
local repository
* cd taste-web
* Copy your .jar file: cp [your .jar file] ./lib
* Edit recommender.properties and fill in the recommender.class with
your Recommender clas: recommender.class=[your recommender class]
* mvn package
* Your .war file is now available in the build directory as
mahout-taste-webapp.war (which can be renamed).
", but as I told you before, I can't compile my implementation - or better
my variation of the grouplens example - of the taste recommender...
Am 16.02.2011 15:38, schrieb Sean Owen:
Nope, it is something you deploy in your container like Tomcat. It's
nothing to do with Mahout or your web app directly.
MySQLDataModel does not depend on MySQL Connector directly, so you do
not need this dependency. It is simply an implementation which uses
MySQL-friendly SQL syntax.
2011/2/16 Daniel Mühlbachler<[email protected]>:
Ok, so if I understand that correctly, I must copy the MySQL Connector/J
into<mahout>/taste-web/lib, then make a mvn package and the connector
should work? But the problem is my recommender class. For test purposes I
just edited the grouplens example to make a MySQLDataModel instead of a
FileDataModel but I can't compile this file because of the unsolved
dependencies (mahout deps on my local environment via Eclipse, or MySQL
Connector deps on my server (e.g. with overwriting the grouplens examples
and compile the examples again)). Do you know a way to compile those
source
files without the need of those deps (it's a never ending circle :) )?