Sunday, March 06, 2011

little plans

Last week I updated the littleware project site with a fresh binary code drop - including the first little distro zip bundle download. The little distro unzips into littleware/client, littleware/server, and littleware/webapp folders. The server runs an embedded derby (javadb) database and exports littleware's API services via RMI to standalone and web clients. There are more details on the getting started page.

C:\Users\pasquini\Apps\littleware\server\bin
> .\littleServer.bat
Mar 5, 2011 2:56:10 PM littleware.base.DynamicEnum registerMemberIfNecessary
FINE: Registering new new DynamicEnum type: littleware.asset.AssetType
Mar 5, 2011 2:56:11 PM littleware.base.DynamicEnum registerMemberIfNecessary
FINE: Registering new new DynamicEnum type: littleware.security.auth.ServiceType
Mar 5, 2011 2:56:11 PM littleware.bootstrap.AbstractLittleBootstrap bootstrap
FINE: Check bootstrap module: littleware.apps.filebucket.server.BucketServerModule
Mar 5, 2011 2:56:11 PM littleware.bootstrap.AbstractLittleBootstrap bootstrap
FINE: Check bootstrap module: littleware.apps.tracker.server.TrackerServerModule
Mar 5, 2011 2:56:11 PM littleware.bootstrap.AbstractLittleBootstrap bootstrap
FINE: Check bootstrap module: littleware.bootstrap.server.AssetServerModule
Mar 5, 2011 2:56:11 PM littleware.bootstrap.AbstractLittleBootstrap bootstrap
FINE: Check bootstrap module: littleware.bootstrap.server.SimpleServerBuilder$Bootstrap$1
Mar 5, 2011 2:56:11 PM littleware.bootstrap.server.AssetServerModule configure
INFO: Configuring JPA in standalone (hibernate) mode ...
Mar 5, 2011 2:56:11 PM littleware.base.PropertiesLoader loadProperties
FINE: Attempting to load properties for: littleware.properties, true
Mar 5, 2011 2:56:11 PM littleware.base.PropertiesLoader loadProperties
FINE: Loaded props: 2
Mar 5, 2011 2:56:11 PM littleware.base.PropertiesLoader loadPropsFromFile
INFO: Loading config\littleware.properties
Mar 5, 2011 2:56:11 PM littleware.base.PropertiesLoader loadProperties
FINE: Attempting to load properties for: littleware_jdbc.properties, true
Mar 5, 2011 2:56:11 PM littleware.base.PropertiesLoader loadProperties
FINE: Loaded props: 2
Mar 5, 2011 2:56:11 PM littleware.base.PropertiesLoader loadPropsFromFile
INFO: Loading config\littleware_jdbc.properties
Mar 5, 2011 2:56:11 PM littleware.db.DbGuice bindDataSource
INFO: Binding DataSource datasource.littleware to jdbc:derby:littleware
Mar 5, 2011 2:56:11 PM littleware.asset.server.db.jpa.AbstractGuice configure
FINE: Configuring JPA database access
Mar 5, 2011 2:56:11 PM littleware.base.PropertiesLoader loadProperties
FINE: Attempting to load properties for: littleware.properties, false
Mar 5, 2011 2:56:12 PM littleware.base.PropertiesLoader loadProperties
FINE: Attempting to load properties for: littleware.properties, false
15 [main] INFO org.hibernate.cfg.annotations.Version - Hibernate Annotations 3.5.0-Final
37 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.5.0-Final
39 [main] INFO org.hibernate.cfg.Environment - hibernate.properties not found
44 [main] INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist
52 [main] INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling
183 [main] INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.2.0.Final
202 [main] INFO org.hibernate.ejb.Version - Hibernate EntityManager 3.5.0-Final
316 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: littleware.asset.server.db.jpa
.AssetEntity
376 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity littleware.asset.server.db.jpa.AssetEntity on t
able asset
468 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: littleware.asset.server.db.jpa
.AssetAttribute
469 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity littleware.asset.server.db.jpa.AssetAttribute o
n table asset_attr
480 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: littleware.asset.server.db.jpa
.AssetDate
481 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity littleware.asset.server.db.jpa.AssetDate on tab
le asset_date
484 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: littleware.asset.server.db.jpa
.AssetLink
488 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity littleware.asset.server.db.jpa.AssetLink on tab
le asset_link
495 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: littleware.asset.server.db.jpa
.TransactionEntity
498 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity littleware.asset.server.db.jpa.TransactionEntit
y on table littleTran
506 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: littleware.asset.server.db.jpa
.AssetTypeEntity
510 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity littleware.asset.server.db.jpa.AssetTypeEntity
on table x_asset_type
586 [main] INFO org.hibernate.cfg.annotations.CollectionBinder - Mapping collection: littleware.asset.server.db.jpa.Asse
tEntity.attributeSet -> asset_attr
586 [main] INFO org.hibernate.cfg.annotations.CollectionBinder - Mapping collection: littleware.asset.server.db.jpa.Asse
tEntity.dateSet -> asset_date
587 [main] INFO org.hibernate.cfg.annotations.CollectionBinder - Mapping collection: littleware.asset.server.db.jpa.Asse
tEntity.linkSet -> asset_link
600 [main] INFO org.hibernate.cfg.AnnotationConfiguration - Hibernate Validator not found: ignoring
675 [main] INFO org.hibernate.cfg.search.HibernateSearchEventListenerRegister - Unable to find org.hibernate.search.even
t.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
684 [main] INFO org.hibernate.connection.ConnectionProviderFactory - Initializing connection provider: org.hibernate.ejb
.connection.InjectedDataSourceConnectionProvider
688 [main] INFO org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider - Using provided datasource
2821 [main] INFO org.hibernate.cfg.SettingsFactory - RDBMS: Apache Derby, version: 10.5.3.0 - (802917)
2821 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC driver: Apache Derby Embedded JDBC Driver, version: 10.5.3.0 -
 (802917)
2867 [main] INFO org.hibernate.dialect.Dialect - Using dialect: org.hibernate.dialect.DerbyDialect
2886 [main] INFO org.hibernate.transaction.TransactionFactoryFactory - Transaction strategy: org.hibernate.transaction.J
DBCTransactionFactory
2889 [main] INFO org.hibernate.transaction.TransactionManagerLookupFactory - No TransactionManagerLookup configured (in
JTA environment, use of read-write or transactional second-level cache is not recommended)
2889 [main] INFO org.hibernate.cfg.SettingsFactory - Automatic flush during beforeCompletion(): disabled
2895 [main] INFO org.hibernate.cfg.SettingsFactory - Automatic session close at end of transaction: disabled
2903 [main] INFO org.hibernate.cfg.SettingsFactory - Scrollable result sets: enabled
2904 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC3 getGeneratedKeys(): disabled
2911 [main] INFO org.hibernate.cfg.SettingsFactory - Connection release mode: auto
2914 [main] INFO org.hibernate.cfg.SettingsFactory - Default batch fetch size: 1
2916 [main] INFO org.hibernate.cfg.SettingsFactory - Generate SQL with comments: disabled
2919 [main] INFO org.hibernate.cfg.SettingsFactory - Order SQL updates by primary key: disabled
2923 [main] INFO org.hibernate.cfg.SettingsFactory - Order SQL inserts for batching: disabled
2926 [main] INFO org.hibernate.cfg.SettingsFactory - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
2934 [main] INFO org.hibernate.hql.ast.ASTQueryTranslatorFactory - Using ASTQueryTranslatorFactory
2935 [main] INFO org.hibernate.cfg.SettingsFactory - Query language substitutions: {}
2936 [main] INFO org.hibernate.cfg.SettingsFactory - JPA-QL strict compliance: enabled
2939 [main] INFO org.hibernate.cfg.SettingsFactory - Second-level cache: enabled
2942 [main] INFO org.hibernate.cfg.SettingsFactory - Query cache: disabled
2944 [main] INFO org.hibernate.cfg.SettingsFactory - Cache region factory : org.hibernate.cache.impl.NoCachingRegionFact
ory
2947 [main] INFO org.hibernate.cfg.SettingsFactory - Optimize cache for minimal puts: disabled
2949 [main] INFO org.hibernate.cfg.SettingsFactory - Structured second-level cache entries: disabled
2963 [main] INFO org.hibernate.cfg.SettingsFactory - Statistics: disabled
2963 [main] INFO org.hibernate.cfg.SettingsFactory - Deleted entity synthetic identifier rollback: disabled
2965 [main] INFO org.hibernate.cfg.SettingsFactory - Default entity-mode: pojo
2967 [main] INFO org.hibernate.cfg.SettingsFactory - Named query checking : enabled
2968 [main] INFO org.hibernate.cfg.SettingsFactory - Check Nullability in Core (should be disabled when Bean Validation
is on): enabled
3054 [main] INFO org.hibernate.impl.SessionFactoryImpl - building session factory
3447 [main] INFO org.hibernate.impl.SessionFactoryObjectFactory - Not binding factory to JNDI, no JNDI name configured
Mar 5, 2011 2:56:16 PM littleware.asset.server.db.jpa.SimpleJpaTransaction endDbUpdate
FINE: Transaction complete, rollback: false
Mar 5, 2011 2:56:17 PM littleware.bootstrap.server.AssetServerModule$Activator start
INFO: Looking for RMI registry on port: 1239
Mar 5, 2011 2:56:17 PM littleware.bootstrap.server.AssetServerModule$Activator start
INFO: littleware RMI start ok
Mar 5, 2011 2:56:17 PM littleware.bootstrap.AbstractLittleBootstrap bootstrap
FINE: Waiting for OSGi startup ...
Mar 5, 2011 2:56:17 PM littleware.bootstrap.AbstractLittleBootstrap$SetupActivator$1 frameworkEvent
FINE: Triggering startup barrier ...
< littleware RMI server bootstrap
< hit any key to shutdown
>

The littleware/client folder currently just holds the lgo (littleware go) tool - which is a launcher for a small suite of littleware.lgo.LgoCommand derived tools that include a Swing-based GUI for browsing the littleware node tree database, and the command line version of the Voyager to Vufind harvester tool we developed at Auburn.

C:\Users\pasquini\Apps\littleware\client\bin
> ./lgo.bat help
Mar 5, 2011 3:07:40 PM littleware.security.auth.client.ClientLoginModule login
INFO: User authenticated: pasquini
Mar 5, 2011 3:07:41 PM littleware.base.PropertiesLoader loadPropsFromFile
INFO: Loading C:\Users\pasquini\.littleware\edu\auburn\library\voyager\Voyager.properties
Mar 5, 2011 3:07:41 PM littleware.db.DbGuice bindDataSource
Command use:
     lgo [+user name] [+mode client|app] [+url http://server:port] [+profile cli|swing] command options
        +mode [local|client] -- client establishes session with littleware server, default is client
        +profile [cli|swing] -- specify AppProfile to pass to AppModuleFactory modules at bootup time
        +user [username] -- user to authenticate as in client mode, defaults to current OS user
        +url  [server-info] -- url specifies host/port information for the littleware server in client mode

command.not.found:
   No help found for command: , available commands:
    littleware.apps.lgo.GetAssetCommand [get, cat] Get the asset at a given path
    littleware.apps.lgo.ListChildrenCommand [ls] List the children under a given path
    littleware.apps.lgo.DeleteAssetCommand [delete, rm] Delete as asset at a given path
    littleware.apps.lgo.GetByNameCommand [byname, nget] Get the asset at a given path
    littleware.lgo.XmlEncodeCommand [xencode, xenc] lgo xmlencode
    littleware.apps.lgo.CreateUserCommand [mkuser, adduser] Create a littleware.USER under /littleware.home/Users/
    littleware.apps.lgo.SetImageCommand [setimage] Associate an image with an asset at a given path
    littleware.lgo.EzHelpCommand [help] lgo help <command>
    littleware.apps.lgo.GetRootPathCommand [abspath] Convert the given path to a rooted path
    littleware.apps.lgo.LgoBrowserCommand [browse] launch littleware browser
    littleware.apps.lgo.CreateFolderCommand [mkdir] Create a littleware.GENERIC asset at a given path
    littleware.apps.lgo.CreateLockCommand [mklock] Create a littleware.LOCK asset at a given path
    edu.auburn.library.tool.vygr2vfind.view.V2vLgoCommand [v2v] Copy records from Voyager to a Vufind Solr index
C:\Users\pasquini\Apps\littleware\client\bin
> ./lgo.bat help v2v
Mar 5, 2011 3:09:45 PM littleware.security.auth.client.ClientLoginModule login
INFO: User authenticated: pasquini
Mar 5, 2011 3:09:45 PM littleware.base.PropertiesLoader loadPropsFromFile
INFO: Loading C:\Users\pasquini\.littleware\edu\auburn\library\voyager\Voyager.properties
Mar 5, 2011 3:09:45 PM littleware.db.DbGuice bindDataSource
Command use:
     lgo [+user name] [+mode client|app] [+url http://server:port] [+profile cli|swing] command options
        +mode [local|client] -- client establishes session with littleware server, default is client
        +profile [cli|swing] -- specify AppProfile to pass to AppModuleFactory modules at bootup time
        +user [username] -- user to authenticate as in client mode, defaults to current OS user
        +url  [server-info] -- url specifies host/port information for the littleware server in client mode

edu.auburn.library.tool.vygr2vfind.view.V2vLgoCommand:
   Copy records from Voyager to a Vufind Solr index

Copy records from Voyager to a Vufind Solr index.

      v2v -min [min] -max [max] [-halt [HH:mm] -continue [stubfile]] -solr /path/to/solr/index/biblio
      v2v -age [age] -solr /path/to/solr/index/biblio
      v2v -idfile [file full of bib-ids] -solr /path/to/solr/index/biblio

      Note: loading vufind.properties from  DocsFolder/vygr2vfind
      Note: specify jdbc URL for Voyager database in
           ~/.littleware/edu/auburn/library/voyager/Voyager.properties -
             datasource.voyager = jdbc:oracle:thin:user/password@host:port:vger
browser screen

There's not much useful there really, but it's nice to at least have something to show. The code drop also updates the IVY artifacts and web-start apps hosted by littleware's ivy2maven2 repository as well as the online javadoc and scaladoc API docs.

I was pretty happy with how smoothly the release process went thanks to the ivy build setup. The root build.xml file includes buildAll and buildAndTest rules that a local jenkins continuous integration server executes whenever I push a change to my personal repositories. Everything would have been great if not for the problems that with java 6 update 24 web-start security that plagued me. Ugh!

Anyway, I now need to decide what littleware tasks to tackle next. On the one hand there are several API and infrastructure design flaws that I need to eventually address, but on the other hand it would be good to build out some useful littleware-based applications to demonstrate the systems utility. On a 3rd hand the more application level code I write the more annoying an API-level refactoring will be to propagate, and a 4th hand realizes that application level development is the best way to get ideas for improving an API, and a 5th hand points out that the experience and learning I gain is the main benefit of working on littleware in the first place. I'll probably just continue with the tasks outlined in the current SCRUM sprint, and continue to develop the scala tools in littleware's catalog repository.

The academic library is a terrible market to work for as a library is amazingly cheap, and even if the library had money - it wouldn't want to change anything. A true librarian would turn the clock back to card catalog days in a heart beat. If a librarian ever gets the bomb, then we're all in trouble; he'll blast us back to the stone age smiling ear to ear. These negatives are positives for a loan frickjack that can bundle a suite of open source tools in a cloud-hosted library-in-a-box, and make money charging $200- a month. We'll see what I think next month.

No comments: