Hooray... sonews/0.5.0 final
HG: Enter commit message. Lines beginning with 'HG:' are removed.
HG: Remove all lines to abort the collapse operation.
3 * see AUTHORS for the list of contributors
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 package org.sonews.daemon;
21 import java.sql.Driver;
22 import java.sql.DriverManager;
23 import java.sql.SQLException;
24 import java.util.Enumeration;
25 import java.util.Date;
26 import org.sonews.feed.FeedManager;
27 import org.sonews.mlgw.MailPoller;
28 import org.sonews.daemon.storage.Database;
29 import org.sonews.util.Log;
30 import org.sonews.util.io.Resource;
33 * Startup class of the daemon.
34 * @author Christian Lins
37 public final class Main
44 /** Version information of the sonews daemon */
45 public static final String VERSION = "sonews/0.5.0";
46 public static final Date STARTDATE = new Date();
49 * The main entrypoint.
53 public static void main(String[] args) throws Exception
55 System.out.println(VERSION);
56 Thread.currentThread().setName("Mainthread");
58 // Command line arguments
59 boolean feed = false; // Enable feeding?
60 boolean mlgw = false; // Enable Mailinglist gateway?
63 for(int n = 0; n < args.length; n++)
65 if(args[n].equals("-c") || args[n].equals("-config"))
67 BootstrapConfig.FILE = args[++n];
68 System.out.println("Using config file " + args[n]);
70 else if(args[n].equals("-dumpjdbcdriver"))
72 System.out.println("Available JDBC drivers:");
73 Enumeration<Driver> drvs = DriverManager.getDrivers();
74 while(drvs.hasMoreElements())
76 System.out.println(drvs.nextElement());
80 else if(args[n].equals("-feed"))
84 else if(args[n].equals("-h") || args[n].equals("-help"))
89 else if(args[n].equals("-mlgw"))
93 else if(args[n].equals("-p"))
95 port = Integer.parseInt(args[++n]);
99 // Try to load the Database;
100 // Do NOT USE Config or Log classes before this point because they require
101 // a working Database connection.
104 Database.getInstance();
106 // Make sure some elementary groups are existing
107 if(!Database.getInstance().isGroupExisting("control"))
109 Database.getInstance().addGroup("control", 0);
110 Log.msg("Group 'control' created.", true);
113 catch(SQLException ex)
115 ex.printStackTrace();
116 System.err.println("Database initialization failed with " + ex.toString());
117 System.err.println("Make sure you have specified the correct database" +
118 " settings in sonews.conf!");
122 ChannelLineBuffers.allocateDirect();
125 Runtime.getRuntime().addShutdownHook(new ShutdownHook());
127 // Start the listening daemon
130 port = Config.getInstance().get(Config.PORT, 119);
132 final NNTPDaemon daemon = NNTPDaemon.createInstance(port);
135 // Start Connections purger thread...
136 Connections.getInstance().start();
138 // Start mailinglist gateway...
141 new MailPoller().start();
147 FeedManager.startFeeding();
150 // Wait for main thread to exit (setDaemon(false))
154 private static void printArguments()
156 String usage = Resource.getAsString("helpers/usage", true);
157 System.out.println(usage);