Commit Graph

2420 Commits

Author SHA1 Message Date
samskivert 7f76e4f876 Depot now lives in its own project.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2480 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-11-16 07:49:17 +00:00
samskivert 206433c80b Unified Query and Modifier under Operation which cleans up some niggles in
PersistenceContext.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2479 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-11-13 23:35:12 +00:00
samskivert b9005b1aa8 Pedantry.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2478 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-11-13 21:16:47 +00:00
samskivert ac64f8df4a A connection provider that obtains connections from a DataSource, which
supports pooling.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2477 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-11-13 21:16:24 +00:00
samskivert a6fe58f662 The twisty maze of jar file references knows no bounds.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2476 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-11-11 18:21:55 +00:00
samskivert 184aa88660 If a looping thread does terminate due to a runtime exception, log it on the
way out rather than letting it propagate up to the JVM where it'll get written
to stderr which isn't always useful.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2475 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-11-11 00:34:38 +00:00
samskivert dd28c6bf09 Use the version number free ehcache.jar.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2474 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-11-10 19:50:17 +00:00
samskivert 24f1fb611a Added isRunning() to RunQueue, made BasicRunQueue work both in separate-thread
mode and in just-call-run()-yourself mode.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2473 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-11-08 00:05:57 +00:00
samskivert f2ff2491f5 Added Queue.newQueue().
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2472 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-11-07 01:16:22 +00:00
par.winzell 405fa50a48 Don't fill the array with zeroes when we reinitialize the Throttle with the same number of operations as we already had, as that allows a potentially dangerous burst of operations.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2471 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-11-05 17:16:59 +00:00
par.winzell 0415bf7502 That was broken code-in-progress and not meant to be commnitted.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2470 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-11-05 00:19:59 +00:00
par.winzell 2045c0d563 When we reinitialize the Throttle with a smaller number of allowed operations within a time period, we should preserve the oldest rather than the newest ones, or we'll most likely be in immediate and unfair violation of the limit.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2469 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-11-05 00:18:21 +00:00
par.winzell 26ca5335c6 Change these hard-coded defaults. Should also be made configurable.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2468 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-11-04 19:20:33 +00:00
samskivert dbbf679cc7 Nixed unused import, commented out others that go with commented out code.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2467 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-11-01 05:39:27 +00:00
samskivert afbf6c1ea9 Make the 1.5 compiler happy.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2466 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-10-31 00:42:53 +00:00
samskivert 5a71283b5e When we can switch entirely to 1.6 we can use Postgres's value = any(?::int[])
form to pass as many damned keys we want in a giant array. At that time we can
nix all the >32,768 key fiddly business.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2465 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-10-31 00:17:36 +00:00
samskivert 182f6cae60 Dave points out that we can extend FailureListener here and save ourselves a
noopy method.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2464 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-10-29 06:41:49 +00:00
samskivert 930c2c6354 Fixed javadoc.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2463 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-10-29 00:33:47 +00:00
samskivert 67d0140701 (Heavily modified) patch from Dave to allow varargs key/value logging bits to
be supplied to ComplainingListener.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2462 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-10-25 00:52:40 +00:00
samskivert f0d55037d1 Let's not use trim() here and avoid creating an intermediate object.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2461 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-10-24 06:26:56 +00:00
samskivert ddf70fc45f Oops, avoid introducing a bug when nulls == zeros == values.length. We want to
return null in that case.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2460 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-10-24 05:18:50 +00:00
samskivert 84d34803de Compromise on our 0 == null stance for primary key columns. See the code
comments for further details.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2459 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-10-24 05:13:28 +00:00
samskivert eac4608b7a A new StringUtil method (a rare occurance!): trim() which safely handles null.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2458 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-10-23 20:57:56 +00:00
samskivert 327b9581b9 Make sure we use the up to date metadata when doing our stale column check.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2457 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-10-22 01:09:22 +00:00
samskivert 8ac0e012ce New convenience functions from Dave. What are the chances?
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2456 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-10-22 00:55:40 +00:00
samskivert 39c9f7a499 Patch from Charlie to allow a Random object to be passed into many of the
pick methods.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2455 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-10-20 16:07:29 +00:00
samskivert 6d7bfd6d7b Incorporated Jamie's Throttle reinitialization code. Added support for updating
the period as well.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2454 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-10-08 19:35:12 +00:00
samskivert ecf0dd6213 More javadoc cleanup.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2453 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-30 00:23:57 +00:00
samskivert 9d66acc2bd Javadoc fixes.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2452 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-30 00:12:08 +00:00
samskivert 2e93d12396 Allow the default auto-commit settings for a connection to be configured along
with the other JDBC properties.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2451 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-26 00:04:16 +00:00
samskivert 6a2b870cf9 Only disable auto-commit if we appear to need to.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2450 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-25 23:58:46 +00:00
samskivert 480ae9edbe Added support for data migrations, which are run after all schema migrations
have been run and are also coordinated between disparate processes by an
in-database lock system.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2449 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-25 23:40:01 +00:00
samskivert 296495a88f Call EntityMigration SchemaMigration because that's what it's for and I want to
add a new DataMigration mechanism so that people can stop using schema
migrations to do data migration.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2448 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-25 22:27:58 +00:00
samskivert 0bf5b3fbd9 More compactification.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2447 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-24 23:44:10 +00:00
samskivert 50be959ac8 Properly implement CountEntryImpl.equals(). Other formatting cleanup.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2446 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-24 23:30:54 +00:00
samskivert 9837f96396 Let's preserve the ability for callers with uncomplicated needs to create and
initialize a persistence context in one fell swoop.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2445 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-24 19:09:17 +00:00
samskivert 462e92e324 Change the way initialization is handled (a bit). It is now possible to create
a PersistenceContext and give it out to all of your repositories and delay
activating the context until you are ready for everyone to start talking to the
database. In this way you can enforce that no one does any database fooling
around before it's OK.

I also introduced DepotRepository.init() where database fooling around is OK.
The general idea is that you register schema migrations in your constructor and
then if you have data migrations to be done (or initialization that requires
reading things from the database), you do that in init().


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2444 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-24 18:33:25 +00:00
samskivert 0950cb02cd Test updates.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2443 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-23 17:18:44 +00:00
samskivert 4c23586e3e Properly handle int[] fields when encountered as unassociated values. We
already do the right thing when we process them as fields of persistent
records.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2442 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-23 17:18:23 +00:00
samskivert 3fba685ca7 Formatting tweaks.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2441 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-23 17:17:05 +00:00
samskivert 52fa489fe5 Put that new method somewhere more sensible.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2440 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-22 16:57:48 +00:00
samskivert 12292b89f2 Patch from Charlie to add magic formatting to the AuditLogger.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2439 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-22 16:47:46 +00:00
samskivert 5248d137fc Don't try to manage the cache manager. Push that burden out to the caller who
may have their own needs and arrangements.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2438 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-20 03:30:49 +00:00
samskivert d1ef556a55 No using raw types. Also no annotating whole methods
@SuppressWarnings("unchecked") even if they're simple.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2437 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-18 17:23:56 +00:00
samskivert 52f5b41f44 Properly handle @GeneratedValue(strategy=GenerationType.IDENTITY,
initialValue=N) for non-zero values of N. This is complicated. Depot used to
"initialize" value generators pretty much every time a table schema was
migrated. For TableValueGenerator it could just NOOP if the proper row was in
the sequence table. IdentityValueGenerator was just broken and ignored any
request to configure an initialValue, so it never did anything.

First I looked into preserving this frequent reinitialization behavior, but it
turns out that it's not possible to read the current value of a sequence in
Postgres without modifying it. So trying to do something like:

SELECT setval('"FooRecord_fooId_seq"', max(currval('"FooRecord_fooId_seq"'),
                                           cast(initialValue as bigint)));

doesn't work because you can't call currval() without first having called
nextval() (and furthermore when you do that, the Postgres client grabs a block
of sequence values for this client so that multiple clients can add rows to a
table without having to coordinate with the server and one another to assign a
new value every time a row is inserted).

So I changed Depot around to not reinitialize value generators unless it really
believes that the column in question is newly added. We can't rely on our own
auto-column creation because it's possible for someone to create a column
through a custom entity migration, so instead we just keep track of what
columns we had before we started all of our migrations (automatic and custom)
and check to see if there are any new columns after all is said and done and if
any of those have value generators, we "create" them.

This allows us to just setval() the sequence to the desired initial value
without first reading it.

This all fails if someone renames a column with a value generator. The column
will appear to Depot to be new and it will try to recreate the value generator
on that column. For TableValueGenerators that will basically NOOP and
everything will be just like it was before. For IdentityValueGenerators,
because of the way that Postgres magically creates a tablename_columnname_seq
sequence for identity value generation, when the column is renamed, the
sequence will retain the old column name and when Depot goes to try to setval()
the sequence based on the new column name, it won't exist and the migration
will fail. So at least we're not silently reinitializing the value generator to
its initial value when a column (with an identity value generator) is renamed.
We also don't try to do anything if the initialValue is not 1 (the default). So
we avoid failing or doing anything wrong if those kinds of columns are renamed.

So we only fail if someone renames a column with an identity value generator
with a non-default initial value. Since one can only put a value generator on a
primary key field and an identity value generator generally means you have
something simple like FooRecord with fooId. This means someone is renaming
their simple auto incrementing primary key field which seems extremely unlikely
because those columns usually have an obvious name that you're never going to
change. No problem!

I also haven't fixed this problem for MySQL yet. I can only handle so much
database befuckaroundery in one go.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2436 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-17 19:09:08 +00:00
andrzej@threerings.net f1a2723292 Added shared true and false predicate instances, with type-safe
accessors (a la Collections.emptyList).


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2435 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-17 01:15:48 +00:00
samskivert 6245c3dd44 Use varying size blobs for int[] columns like we do byte[].
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2434 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-16 22:51:59 +00:00
samskivert ed224ab0cb Handle conversion from int[] to byte[] manually rather than relying on the JDBC
driver to know how to do it.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2433 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-16 22:49:11 +00:00
samskivert 534b224489 Javadoc fix from Dave.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@2432 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-16 21:54:21 +00:00
samskivert 129120794a Amazingly, we had apparently never tried to insert a preconfigured row into a
table that had field generators on its primary key. The code just blindly
overwrite the supplied primary key and ran the generators anyway.

We now only run the generators if the record has no primary key. This means we
can't use field generators on non-primary-key fields, but I'm not sure we ever
meant to support that in the first place.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2431 6335cc39-0255-0410-8fd6-9bcaacd3b74c
2008-09-16 21:33:22 +00:00