Metoda doIt() wczytuje z bazy danych parametry generowanej liczby (wartości bits i certainty), w pętli tworzy kolejne liczby o zadanej długości, aż utworzona liczba będzie pierwsza z zadanym prawdopodobieństwem, po czym zapisuje wygenerowaną liczbę do bazy danych. Metoda przekazuje wartość false, jeśli wystąpił jakiś błąd (klauzula catch), w przeciwnym wypadku przekazuje wartość true.
Metoda size() przekazuje iloczyn długości liczby oraz prawdopodobieństwa, że jest ona pierwsza. Spodziewany czas wygenerowania odpowiedniej liczby rośnie wraz z wartością tego iloczynu.
package jodl.example.prime; import jodl.task.TaskAdapter; import jodl.db.SQL; import jodl.util.*; import java.sql.Connection; import java.math.BigInteger; import java.util.*; public class GenerateAPrime extends TaskAdapter { int bits = 1; int certainty = 1; public boolean doIt() { try { String[] val = SQL.getRow(dbConnection, "select bits, certainty from prime where prime_id = " + taskId); bits = Conv.string2int(val[0]); certainty = Conv.string2int(val[1]); BigInteger bigint; do { bigint = new BigInteger(bits, new Random((new Date()).getTime())); } while (!bigint.isProbablePrime(certainty)); SQL.execute(dbConnection, "update prime set number = '" + bigint + "' where prime_id = " + taskId); return true; } catch (Exception e) { return false; } } public int size() { return bits*certainty; } } |
package jodl.example.prime; import jodl.server.*; import jodl.task.*; import jodl.db.*; import java.sql.*; public class Primes { public static void main(String[] args) { try { Server server = new Server(args); Family primes = server.getFamilyInstance("jodl_example_prime"); server.run(primes); String[] numbers = SQL.getArray(server.getDBConnection(), "select number from prime"); for (int i = 0; i < numbers.length; i++) System.out.println(numbers[i]); } catch (Exception e) { e.printStackTrace(); } } } |