On Tuesday 05 August 2008 15:17, Julien Cornuwel wrote:
> Matthew Toseland a ?crit :
> > What's your consistency strategy going to be? Never commit, just set()
> > everywhere, thus can access from any thread (hopefully) ?
>
> I'm affraid I don't understand what you are talking about. Can you explain ?
Databases can be a major PITA. How do you propose to use db4o exactly? One
strategy, which you appear to be using now, is never to call commit() and to
just access it wherever you need it. This can work, although it does mean
that if you have an unclean shutdown, either all data is lost, or it is
rolled back to before startup. If you call commit() on the other hand, you
can be more sure of consistency, but you have various worries about
concurrence (i.e. what happens if one thread is doing X and another thread
is doing Y and the first thread commits before the second thread is done). On
the db4o branch, we do all database access on a single thread and commit
regularly, for this reason. Yet another option is to have multiple
transactions within one VM (which leads to having to update objects manually
in case they have been changed by another transaction...).
But with something simpler (WoT) you may be able to get away with some sort of
compromise.
>
> > On Monday 04 August 2008 20:00, batosai at freenetproject.org wrote:
> >> Author: batosai
> >> Date: 2008-08-04 18:59:59 +0000 (Mon, 04 Aug 2008)
> >> New Revision: 21600
> >>
> >> Modified:
> >> trunk/apps/WoT/src/plugins/WoT/WoTplugin.java
> >> Log:
> >> Added Homepage and OwnIdentities pages.
> >>
> >> Modified: trunk/apps/WoT/src/plugins/WoT/WoTplugin.java
> >> ===================================================================
> >> --- trunk/apps/WoT/src/plugins/WoT/WoTplugin.java 2008-08-03 16:24:28 UTC
> > (rev 21599)
> >> +++ trunk/apps/WoT/src/plugins/WoT/WoTplugin.java 2008-08-04 18:59:59 UTC
> > (rev 21600)
> >> @@ -6,10 +6,15 @@
> >>
> >> package plugins.WoT;
> >>
> >> +import com.db4o.Db4o;
> >> +import com.db4o.ObjectContainer;
> >> +import com.db4o.ObjectSet;
> >> +
> >> import freenet.client.HighLevelSimpleClient;
> >> import freenet.clients.http.PageMaker;
> >> import freenet.config.Config;
> >> import freenet.config.SubConfig;
> >> +import freenet.keys.FreenetURI;
> >> import freenet.node.fcp.FCPServer;
> >> import freenet.pluginmanager.FredPlugin;
> >> import freenet.pluginmanager.FredPluginHTTP;
> >> @@ -27,26 +32,31 @@
> >> */
> >> public class WoTplugin implements FredPlugin, FredPluginHTTP,
> > FredPluginThreadless, FredPluginVersioned {
> >>
> >> - public static String SELF_URI = "/plugins/plugins.WoT.WoTplugin/";
> >> + public static String SELF_URI = "/plugins/plugins.WoT.WoTplugin";
> >> private PluginRespirator pr;
> >> private PageMaker pm;
> >> private HighLevelSimpleClient client;
> >> private FCPServer fcp;
> >> + private ObjectContainer db;
> >>
> >> public void runPlugin(PluginRespirator pr) {
> >>
> >> Logger.error(this, "Start");
> >>
> >> this.pr = pr;
> >> + db = Db4o.openFile("WoT.db4o");
> >>
> >> Config nc = pr.getNode().config;
> >> SubConfig fc = nc.get("fproxy");
> >> String cssName = fc.getString("css");
> >>
> >> pm = new PageMaker(cssName);
> >> +
> >> + pm.addNavigationLink(SELF_URI, "Home", "Home page", false,
> >> null);
> >> + pm.addNavigationLink(SELF_URI + "/ownidentities", "Own
> > Identities", "Manage your own identities", false, null);
> >> + pm.addNavigationLink(SELF_URI + "/test", "Test", "Testing
> >> page",
false,
> > null);
> >> + pm.addNavigationLink("/plugins/", "Plugins page", "Back to
> >> Plugins
page",
> > false, null);
> >>
> >> - pm.addNavigationLink("/", "Fproxy", "Back to Fproxy", false,
> >> null);
> >> -
> >> client = pr.getHLSimpleClient();
> >>
> >> fcp = pr.getNode().clientCore.getFCPServer();
> >> @@ -54,16 +64,33 @@
> >> }
> >>
> >> public void terminate() {
> >> + db.close();
> >> }
> >>
> >> @Override
> >> public String handleHTTPGet(HTTPRequest request) throws
> > PluginHTTPException {
> >> - return makeHomePage();
> >> +
> >> + String page = request.getPath().substring(SELF_URI.length());
> >> + if(page.equals("/ownidentities")) {
> >> + return makeOwnIdentitiesPage();
> >> + }
> >> + else {
> >> + return makeHomePage();
> >> + }
> >> }
> >>
> >> @Override
> >> public String handleHTTPPost(HTTPRequest request) throws
> > PluginHTTPException {
> >> - return null;
> >> +
> >> + String page = request.getPath().substring(SELF_URI.length());
> >> + if(page.equals("/createIdentity")) {
> >> + FreenetURI[] keypair = client.generateKeyPair("WoT");
> >> + FreenetURI insertURI =
> > keypair[0].setKeyType("USK").setSuggestedEdition(0);
> >> + FreenetURI requestURI =
> > keypair[1].setKeyType("USK").setSuggestedEdition(0);
> >> +
> >> + return insertURI + "<br>" + requestURI;
> >> + }
> >> + else return makeHomePage();
> >> }
> >>
> >> @Override
> >> @@ -72,17 +99,56 @@
> >> }
> >>
> >> private String makeHomePage() {
> >> +
> >> + int nbOwnIdentities;
> >> + int nbIdentities;
> >> +
> >> + HTMLNode list = new HTMLNode("ul");
> >> +
> >> + ObjectSet<OwnIdentity> ownIdentities =
> > db.queryByExample(OwnIdentity.class);
> >> + nbOwnIdentities = ownIdentities.size();
> >> + list.addChild(new HTMLNode("li", "Own Identities : " +
nbOwnIdentities));
> >> +
> >> + ObjectSet<Identity> identities =
> >> db.queryByExample(Identity.class);
> >> + nbIdentities = identities.size();
> >> + list.addChild(new HTMLNode("li", "Known Identities : " +
nbIdentities));
> >> +
> >> +
> >> HTMLNode pageNode = getPageNode();
> >> HTMLNode contentNode = pm.getContentNode(pageNode);
> >> + HTMLNode box = pm.getInfobox("Summary");
> >>
> >> - HTMLNode box = pm.getInfobox("Summary");
> >> HTMLNode boxContent = pm.getContentNode(box);
> >> - boxContent.addChild("#", "The WoT plugin is running...");
> >> + boxContent.addChild(list);
> >>
> >> contentNode.addChild(box);
> >> return pageNode.generate();
> >> }
> >> +
> >> + private String makeOwnIdentitiesPage() {
> >>
> >> + HTMLNode pageNode = getPageNode();
> >> + HTMLNode contentNode = pm.getContentNode(pageNode);
> >> + HTMLNode box = pm.getInfobox("Own Identities");
> >> + HTMLNode boxContent = pm.getContentNode(box);
> >> +
> >> + ObjectSet<OwnIdentity> ownIdentities =
> > db.queryByExample(OwnIdentity.class);
> >> + if(ownIdentities.size() == 0) {
> >> + boxContent.addChild("p", "You have no own identites
> >> yet, you should
> > create one...");
> >> + }
> >> + else {
> >> + while(ownIdentities.hasNext()) {
> >> + boxContent.addChild(new HTMLNode("p",
> > ownIdentities.next().getRequestURI()));
> >> + }
> >> + }
> >> +
> >> + HTMLNode createForm = pr.addFormChild(boxContent, SELF_URI
> > + "/createIdentity", "createForm");
> >> + createForm.addChild("input", new String[] { "type", "name",
> >> "value" },
> > new String[] { "submit", "create", "Create a new identity !" });
> >> +
> >> + contentNode.addChild(box);
> >> + return pageNode.generate();
> >> + }
> >> +
> >> private HTMLNode getPageNode() {
> >> return pm.getPageNode("Web of Trust", null);
> >> }
> >>
> >> _______________________________________________
> >> cvs mailing list
> >> cvs at freenetproject.org
> >> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs
> >>
> >>
> >>
> >> ------------------------------------------------------------------------
> >>
> >> _______________________________________________
> >> Devl mailing list
> >> Devl at freenetproject.org
> >> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl
>
> _______________________________________________
> Devl mailing list
> Devl at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL:
<https://emu.freenetproject.org/pipermail/devl/attachments/20080805/00087494/attachment.pgp>