<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"><channel><title>Disruptive Library Technology Jester &#187; DRC</title> <atom:link href="http://dltj.org/category/ohiolink/drc/feed/" rel="self" type="application/rss+xml" /><link>http://dltj.org</link> <description>We&#039;re Disrupted, We&#039;re Librarians, and We&#039;re Not Going to Take It Anymore</description> <lastBuildDate>Mon, 06 Feb 2012 20:04:22 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <cloud domain='dltj.org' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' /> <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/us/</creativeCommons:license> <item><title>A View of Regional Digitization Centers</title><link>http://dltj.org/article/regional-digitization-centers/</link> <comments>http://dltj.org/article/regional-digitization-centers/#comments</comments> <pubDate>Mon, 18 Jun 2007 19:29:02 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[DRC]]></category> <category><![CDATA[digital libraries]]></category> <category><![CDATA[imaging]]></category> <category><![CDATA[libraries]]></category> <category><![CDATA[library consortia]]></category><guid isPermaLink="false">http://dltj.org/2007/06/regional-digitization-centers/</guid> <description><![CDATA[As a part of work for an OhioLINK strategic task force, I have been exploring the creation and operation of regional/collaborative/shared digitization centers. This is a report of findings to date after an open call for information. The report is &#8230; <a href="http://dltj.org/article/regional-digitization-centers/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2007/06/regional-digitization-centers/"></abbr><p>As a part of work for an OhioLINK strategic task force, I have been exploring the creation and operation of regional/collaborative/shared digitization centers.  This is a report of findings to date after <a href="http://dltj.org/2007/05/seeking-information-about-regional-digitization-centers/">an open call for information</a>.  The report is structured with questions to be explored when considering a regional digitization center followed by narratives from conversations with the Collaborative Digitization Program (formerly the Colorado Digitization Program), the Mountain West Digital Library, and the Ohio Historical Society.  My thanks go out to Leigh Grinstead, Liz Bishoff, Karen Estlund, Angela O&#8217;Neal, and Phil Sager for their assistance.</p><p>I am still interested in talking with collaboratives about similar programs, both &#8220;on the record&#8221; and in private conversations.  Please get in touch with me if you would like to chat.<br /><br /><h2>Questions for Exploration</h2><br />Here are some items to be considered when forming a regional digitization center collaborative that came from the conversations supplemented with reading materials from various projects around the country.</p><ol><li><em>Who does the digital conversion?</em> Is it staff at the hosting institution (where the equipment is located), or does the institution contributing the materials perform the scanning operation at the host institution?</li><li><em>Where and when is the description done?</em> Description of the digitized item was universally done by the contributing institution, but the location (at the scanning center or at the contributing institution) and timing (before conversion, during conversion, or after conversion) vary.  Answers to the first question &#8212; whether contributing staff members are performing the conversion &#8212; affect this question.</li><li><em>Is contribution of materials to the Ohio Digital Resource Commons required?</em> If the regional scanning center is used to digitize materials (or in the case where the consortium is subsidizing a scanning service to perform the digital conversion), what conditions are put in place for contributing those materials to the central repository.</li><li><em>What is the cost structure for use of the regional scanning center?</em> Options range from complete subsidy by consortium (most notably when the CDP funded the equipment at their regional scanning centers) to contributing institutions being charged at cost recovery rates by hosting institutions.  There can be various cost structures applied, such as a consortial subsidy for equipment and training with labor supplied by contributing institution or contracted from hosting institution.</li><li><em>What training is offered?</em> Topics for training range from optimal use of digitization equipment to digitization project planning to metadata creation standards.  The training can be based on group instruction, one-on-one consultation with contributing institutions, or a combination of both.</li><li><em>Who will fill the role of &#8220;metadata editor&#8221;?</em> The need for a collective expert in metadata creation was found in many of the projects.  This person is typically charged with training contributing staff on the appropriate use of local metadata conventions, coaching individual staff on particular projects, and reviewing records that will become part of a consortial database.</li></ol><p><h2>Report from the CDP</h2><br />In 1998 the project began as the Colorado Digitization Project (CDP) and they started with a survey of institutional needs and institutional capacity. Within the first year found a need for scanners at many institutions public and academic libraries, as well as historical societies and, museums. Starting in 1999, the CDP established seven regional scan centers over five years, distributed throughout Colorado such that no institution was more than an hour and a half to two hours from a center. This narrative is derived from research and phone conversations with Leigh Grinstead and Liz Bishoff.</p><p>The original climate that generated the interest in scanners was one where institutions did not want to outsource digitization because they didn&#8217;t want the materials leaving their direct control. The CDP, on the other hand, did not want institutions to buy cheap scanners that would result in lower-quality scans. The CDP purchased the scanners ($2,500 each, in 1999 dollars) plus desktop workstations and created a training program for the use of the equipment.  The center provided the location for the equipment and hands-on assistance with using the equipment; it was incumbent on the staff at the institution with materials to be digitized to perform the scanning themselves.  Before using the equipment, those performing the scanning had to attend a CDP &#8220;Introduction to Digital Imaging&#8221; training session on the proper use and techniques for obtaining high-quality images. Scanning projects that received CDP funding had priority over other users of the equipment, but there was little contention for the equipment at the centers. Descriptive metadata could be keyed at the time of the scan; CDP provided a web-based template (called &#8220;DC builder&#8221;) or staff could use their own system (an ILS, ContentDM, etc.). Contribution of the associated metadata to the CDP union catalog of metadata &#8212; Heritage West &#8212; was required for CDP-funded grant projects.  Images were locally hosted.</p><p>In 2003, the CDP conducted an evaluation of the scan centers in the form of focus groups.  They found two different responses.  First, institutions on the western slopes of Colorado made much heavier use of their scan centers.  These institutions tended to be smaller and/or economically disadvantaged, and the availability of the hardware and software to conduct the scanning operations was more critical.  In front range libraries, where institutions tend to be better-funded, the centers were not as heavily used for projects and tended to be used for training and demonstration sites; these participants felt that the greatest value in the CDP came from the professional networking and training opportunities the locations, the grants that the CDP provided and the creation of the best practices and website that brought all this together.</p><p>The regional scan centers are not used today.  The primary reason is the diffusion of experience within the community that was spurred by the early success of the centers.  As funding cycles continued, institutions purchased their own equipment (generally replicating the equipment at the centers) so as avoid the need to transport materials and staff to a regional center for larger projects. The focus of grant funding within CDP also shifted from image-based collections to EAD and sound collections.  There is still an &#8220;Introduction to Digital Imaging&#8221; workshop, but the focus is now on requirements for in-house equipment and/or what to seek from a vendor in an RFP.  The imaging workshop is typically taught as part of a three-day workshop series with an &#8220;Introduction to Digital Project Management&#8221; (storage, preservation, handling socially sensitive materials, how to display them) before and &#8220;Introduction to Metadata&#8221; (focused on Dublin Core) after.  The biggest issue facing the consortium now is oversized scanning; only the very largest university library would have this kind of equipment.</p><p>The Colorado model of teaching staff at the institution on the use of the equipment along with the creation of regional scan centers was picked up by several states: North Carolina; Alabama; Kansas; Missouri; and Wyoming (except that regional centers were not practical due to the wide population dispersion).  Tennessee is working under a current IMLS grant to build three regional center plus a suite of mobile equipment.</p><p>Liz suggests that we should look for ways to support collaborative efforts within the institution with museum and archives on the campus. The Florida Center for Library Automation (FCLA) has a program in place where the local university library is the contact in partnerships with public libraries and local museums.</p><p>Leigh noted that in recent years, CDP projects include a &#8220;metadata editor&#8221; that is hired to look at record quality and work with individual institutions to improve records.  Having a metadata editor, someone familiar with the CDP guidelines and the field in general, look at four or five records at the very early stage of a project is critical to the success of the quality of the rest of the project.  In a recent project, nearly half of the partners were going to export records out of a local collection management system.  It was discovered that the records were not consistent; local implementation/practice of cataloging standards has a higher overall impact than community best practice.  Having a local cataloger participate on the team migrating the records from a local system to a central system is key to success.</p><p><h2>Mountain West Digital Library</h2><br />The Mountain West Digital Library (MWDL) was established approximately six years ago.  My contact was Karen Estlund at the University of Utah; although the University of Utah was the lead institution in the MWDL project, Karen has been with the project only since August 2006.  The MWDL is made up of a federation of ContentDM installations at seven institutions in the region (five in Utah: Univ of Utah, Brigham Young Univ, Utah State Univ, Weber State Univ and Southern Utah Univ; and two in Nevada: Univ of Nevada Reno and Univ of Nevada Las Vegas; plus the Utah State Archives).  Metadata is harvested from these ContentDM installations via OAI-PMH to a portal operating at the University of Utah.  (Up until the recent past, MWDL used the ContentDM Multi-site server; they recently switched to using OAI harvesting.)</p><p>Content is ingested into the MWDL either through digital conversion centers at the regional institutions or through the efforts of the contributing institution.  The regional institutions perform digital conversion for contributing institutions at cost-recovery rates.  These regional centers use the equipment and staff at the hosting institution, and are very busy at times resulting in difficult choices to balance needs of the host institution with that of requests from other institutions.</p><p>The regional centers also conduct on-site training and technical education at contributing institutions about best practice for digital conversion.  The on-site program includes a technical evaluation of the equipment to be used to ensure that it can produce conversions that meet the minimum requirements for the MWDL.  In the course of this evaluation, staff at contributing institutions are taught some technical aspects of scanning such as the actual DPI scanning capabilities of the hardware versus interpolated resolutions (and why this is important). Staff also receive an introduction to Photoshop for de-skewing and other standard practices.  They also are instructed in the Western Standard Metadata Best Practices. This hands-on approach &#8212; with the contributing institution&#8217;s people, equipment and materials &#8212; enables strong connections between the contributing institution and the hosting institution.  It makes the contributing institution feel like a part of the larger program.  Most contributing institutions with local digital conversion operations will FTP files to the ContentDM server at the regional institution; some institutions contribute materials through the transportation of a portable hard drive.</p><p>Each regional hosting center is responsible for the digital preservation of the material on their server.  At this point there is no common agreement across the MWDL for standards on digital preservation; this is an area of work to be addressed in the near future by the cooperative.</p><p>The cooperative is starting work in several new areas.  First is the digital conversion and posting of oral histories from contributing institutions.  While it is anticipated that such resource will be highly valued, quick progress on this project is hampered by the same permission problems that face similar projects with relatively old audio.  The cooperative also has a state LSTA grant for a Utah institutional repository with a portal connected to the MWDL.  The state archives are also beginning a program to post state government documents, including items related to the Olympic Games held in Utah. The hands-on approach to training staff at contributing institutions is very labor-intensive and uneven across the project participants.  MWDL is in the process of hiring a program director, and a component of that job description is to provide this kind of training across the project.</p><p><h2>Ohio Memory Project (Ohio Historical Society)</h2><br />The Ohio Historical Society (OHS) provided scanning support for the Ohio Memory Project (OMP).  At the beginning of the project in 2000, institutions contributing to the OMP generally wanted to send materials to OHS to be digitized.  By the end of the grant-funded phase of the project in 2003, most institutions shifted to using their own equipment. OHS will still digitized for some cultural heritage institutions on a contract basis, although the primary focus of late has been on oversized materials that must be digitized on specialized equipment.</p><p>OHS staff will work with contributing institutions on a one-on-one basis as well as conduct workshops on introduction to scanning.  Many of the participants are from contributing institutions that have had staff changes and the new staff want to know how to use the equipment purchased during the grant-funded phase of the project.  There is also a desire for more advanced training, such as Photoshop basics.</p><p>OHS staff recognize that a compromise is needed between institutional capabilities for scanning and the very best practices in the field. They have found it hard to establish and mandate an absolute standard for the parameters and quality of digital scans.  Institutions that scan their own materials are responsible for their own storage and preservation.</p>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/regional-digitization-centers/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Two Personal Repository Services</title><link>http://dltj.org/article/two-personal-repository-services/</link> <comments>http://dltj.org/article/two-personal-repository-services/#comments</comments> <pubDate>Mon, 04 Jun 2007 03:03:23 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[DRC]]></category> <category><![CDATA[Unified Content Repository]]></category> <category><![CDATA[eprints]]></category> <category><![CDATA[jisc]]></category> <category><![CDATA[preservation]]></category><guid isPermaLink="false">http://dltj.org/2007/06/two-personal-repository-services/</guid> <description><![CDATA[This year has seen the release of two personal repository services: http://PublicationsList.org/ and the U.K. Depot. These two services have an admittedly different focus, but I think it is still interesting to compare and contrast them to see what we &#8230; <a href="http://dltj.org/article/two-personal-repository-services/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2007/06/two-personal-repository-services/"></abbr><p>This year has seen the release of two personal repository services: <a href="http://publicationslist.org/" title="Homepage: PublicationsList.org">http://PublicationsList.org/</a> and the <a href="http://depot.edina.ac.uk/" title="Homepage: The Depot">U.K. Depot</a>.  These two services have an admittedly different focus, but I think it is still interesting to compare and contrast them to see what we can learn.<br /><span id="more-244"></span><br /><h2>The Depot</h2><br /><i>The Depot</i> provides one-stop place for U.K.-based researchers to deposit refereed articles, book chapters, and conference papers.  It is &#8220;one-stop&#8221; in that The Depot can forward the author to his/her institution-based repository <em>or</em>, in the case where the author&#8217;s institution does not have a repository, upload and host the content right from The Depot.</p><p>The deposit interface, for those putting content directly into the centralized Depot repository, has four main stages.  First, the &#8220;Type&#8221; stage, specifying whether the object is an article, a book chapter, or a conference paper: <img src="http://cdn.dltj.org/wp-content/uploads/2007/06/depot-01-type.png" alt="The Depot - “Type” Screen" /></p><p>Next, the &#8220;Upload&#8221; stage, where one can upload the file and supply a few more properties: <img src="http://cdn.dltj.org/wp-content/uploads/2007/06/depot-02-upload.png" alt="The Depot - “Upload” Screen" /></p><p>Then the &#8220;Details&#8221; stage, where the descriptive metadata (minus the controlled vocabulary subjects &#8212; that comes in the next screen) is input: <img src="http://cdn.dltj.org/wp-content/uploads/2007/06/depot-03-details.png" alt="The Depot - “Details” Screen" /></p><p>And finally, the &#8220;Subjects&#8221; page, with an AJAX-driven expanding-and-collapsing hierarchy of subjects:<img src="http://cdn.dltj.org/wp-content/uploads/2007/06/depot-04-subjects.png" alt="The Depot - “Subjects” Screen" /></p><p>To retrieve contents from the repository, there is a &#8220;<a href="http://deposit.depot.edina.ac.uk/view/" title="Browse Items - the Depot">browse</a>&#8221; interface for looking by &#8216;year&#8217; or by &#8216;subject&#8217; &#8212; no other browse facets and no search interface.  The Depot was just formally released this month, so I would bet that functionality like that is in the works.</p><p><h2>PublicationsList.org</h2><br /><a href="http://publicationslist.org/" title="Homepage: PublicationsList">PublicationsList</a> is a commercial service with a free, limited-functionality version.  Unlike The Depot (and similar institutional repository systems), the focus is on putting together and publishing a personal bibliography with the deposit function taking a secondary role (and only for paid subscribers of the service).</p><p>The single item entry page is a just-the-facts interface.  Note that the content hosting service is only available to those who have upgraded to the &#8220;Publications List Professional&#8221; version (which <a href="http://publicationslist.org/faq.html" title="Publications List FAQ">costs</a> £9.99, or approx $20/€15, per year).<br /><img src="http://cdn.dltj.org/wp-content/uploads/2007/06/single-item-reference-entry.png" alt="PublicationList single item entry" /></p><p>The system can also accept a variety of citation manager file formats for bulk entry. (See snapshot to the right.) <img src="http://cdn.dltj.org/wp-content/uploads/2007/06/import-references.png" alt="PublicationsList Import" style="float: right;" /> PublicationsList also has a built in <a href="http://publicationslist.org/pubmed.html" title="PubMed - keep your online publications list up to date with import from NLM / NIH PubMed / MEDLINE">search-and-select interface to PubMed</a> for finding publications matching your name and automatically populating the metadata fields in your personal citation.</p><p>Then end result is a web-based bibliography with links to the publications (either hosted on PublicationsList or on other sites).  The free version is hosted on PublicationsList.org (see the <a href="http://publicationslist.org/rcc" title="rcc - Publications List">service founder&#8217;s </a>page as an example) and the professional version can <a href="http://publicationslist.org/embed.html" title="Embedding a publications list in another web page">embed the publications list in your own page</a>.</p><p>PublicationsList does provide discounts and additional functionality for <a href="http://publicationslist.org/group.html" title="Register a group publications list">groups</a> (such as departments, research centers, etc.).<br /><br clear="all" /></p><p><h2>Observations</h2><br />Both The Depot and PublicationsList provide interesting suites of features for academics seeking to get their content online, but neither really addresses the problems of getting academics to put their content online. <sup><a href="http://dltj.org/article/two-personal-repository-services/#footnote_0_244" id="identifier_0_244" class="footnote-link footnote-identifier-link" title="For a really good discussion of that problem, see Davis, P.M., &amp;#038; Connolly, M.J.L. (2007). Institutional Repositories: Evaluating the Reasons for Non-use of Cornell University&amp;#8217;s Installation of DSpace. D-Lib Magazine, 13(3/4). Retrieved March 14, 2007, from http://www.dlib.org/dlib/march07/davis/03davis.html.">1</a></sup> The search-and-select interface for PubMed is very helpful in cutting down on the data entry required to populate a citation entry.  If OhioLINK were to replicate this service, we could tap into not only PubMed but also the wide variety of index/abstract databases and electronic journals that we host.  The automatic handling of various forms of citation management data is also nice.  I don&#8217;t think PublicationsList offers an <em>export</em> feature, which would be good to have so that an author can add entries found through the search-and-select interface back into their personal bibliographic management software.</p><p>The one-stop, redirection service in The Depot is a good concept, too. <em>If</em> a researcher wanted to deposit their content in a repository and they weren&#8217;t sure if their institution had a repository to hold it, OhioLINK would be a natural place to look for a content hosting service in the state and we could redirect the author to the appropriate location on a campus.  OhioLINK could also be playing the role of repository-of-last-resort for Ohio academic researchers by providing a space and services for published content, whether or not the institution in question has set up a formal repository space on the DRC.</p><h2>Footnotes</h2><ol class="footnotes"><li id="footnote_0_244" class="footnote">For a really good discussion of that problem, see Davis, P.M., &#038; Connolly, M.J.L. (2007). Institutional Repositories: Evaluating the Reasons for Non-use of Cornell University&#8217;s Installation of DSpace. <i>D-Lib Magazine</i>, 13(3/4). Retrieved March 14, 2007, from <a href="http://www.dlib.org/dlib/march07/davis/03davis.html" title="Article: Institutional Repositories: Evaluating the Reasons for Non-use of Cornell University&#039;s Installation of DSpace">http://www.dlib.org/dlib/march07/davis/03davis.html</a>.</li></ol>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/two-personal-repository-services/feed/</wfw:commentRss> <slash:comments>10</slash:comments> </item> <item><title>Planning a digital preservation assessment using TRAC:CC and DRAMBORA</title><link>http://dltj.org/article/trac-and-drambora/</link> <comments>http://dltj.org/article/trac-and-drambora/#comments</comments> <pubDate>Wed, 23 May 2007 20:06:51 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[DRC]]></category> <category><![CDATA[policy]]></category> <category><![CDATA[digital libraries]]></category> <category><![CDATA[drambora]]></category> <category><![CDATA[jisc]]></category> <category><![CDATA[oais]]></category> <category><![CDATA[OCLC]]></category> <category><![CDATA[preservation]]></category> <category><![CDATA[standards]]></category> <category><![CDATA[trac]]></category><guid isPermaLink="false">http://dltj.org/2007/05/trac-and-drambora/</guid> <description><![CDATA[OhioLINK is engaged in building a &#8220;trusted digital repository&#8221; on behalf of its membership. As we build it, we want to have an understanding of what &#8220;trusted&#8221; means, and so we are engaging in an audit process to assess whether &#8230; <a href="http://dltj.org/article/trac-and-drambora/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2007/05/trac-and-drambora/"></abbr><p>OhioLINK is engaged in building a &#8220;trusted digital repository&#8221; on behalf of its membership.  As we build it, we want to have an understanding of what &#8220;trusted&#8221; means, and so we are engaging in an audit process to assess whether we can claim to be trustworthy.  This process is panning out to have four major phases:</p><ol><li>Research common and best practices for preservation.</li><li>Evaluate the OhioLINK policies and processes against common and best practices.</li><li>Perform a gap analysis between where we are now and where common and best practices suggest we should be.</li><li>Propose and adopt policies and processes that get us closer to the ideal common and best practices.</li></ol><p>This is a report at the end of phase 1.  Earlier this year, two major reports were released that address how one measures a &#8220;trustworthy repository.&#8221;  The two reports are summarized below, followed by a recommendation.<br /><span id="more-241"></span><br /><h2>Trustworthy Repositories Audit &amp; Certification: Criteria and Checklist</h2><br />The first is the OCLC/CRL/NARA <i><a href="http://bibpurl.oclc.org/web/16712" title="Trustworthy Repositories Audit &amp; Certification: Criteria and Checklist homepage">Trustworthy Repositories Audit &amp; Certification: Criteria and Checklist</a></i> (TRAC:CC).  This document &#8220;represents best current practice and thought about the organization and technical infrastructure required to be considered trustworthy and capable of certification.&#8221;  Quoting again:</p><blockquote><p>The nestor working group says a trusted, “long-term digital repository is a complex and interrelated system” (nestor 2006). However, more than just the “digital preservation system” drives the management of the digital materials. In determining trustworthiness, one must look at the entire system in which the digital information is managed, including the organization running the repository: its governance; organizational structure and staffing; policies and procedures; financial fitness and sustainability; the contracts, licenses, and liabilities under which it must operate; and trusted inheritors of data, as applicable. Additionally, the digital object management practices, technological infrastructure, and data security in place must be reasonable and adequate to fulfill the mission and commitments of the repository.</p><p>A trusted digital repository will understand threats to and risks within its systems. As articulated by Rosenthal et al. (2005), these potential threats include media failure, hardware failure, software failure, communication errors, failure of network services, media and hardware obsolescence, software obsolescence, operator error, natural disaster, external attack, internal attack, economic failure, and organizational failure. Constant monitoring, planning, and maintenance, as well as conscious actions and strategy implementation will be required of repositories to carry out their mission of digital preservation. All of these present an expensive, complex undertaking that depositors, stakeholders, funders, the designated community(ies), and other digital repositories will need to rely on in the greater collaborative digital preservation environment that is required to preserve the vast amounts of digital information generated now and into the future.</p></blockquote><p>The <i>TRAC:CC</i> contains 84 criteria broken out into three main sections:  Organizational infrastructure; Digital object management; and Technologies, technical infrastructure, and security. Within each of these sections are various subsections and under the subsections are the criteria themselves.</p><ol type="A" start="1"><li>Organizational infrastructure<ol><li>Governance &amp; organizational viability</li><li>Organizational structure &amp; staffing</li><li>Procedural accountability &amp; policy framework</li><li>Financial sustainability</li><li>Contracts, licenses, &amp; liabilities</li></ol></li><li>Digital object management<ol><li>Ingest: acquisition of content</li><li>Ingest: creation of the archivable package</li><li>Preservation planning</li><li>Archival storage &amp; preservation/maintenance of AIPs</li><li>Information management</li><li>Access management</li></ol></li><li>Technologies, technical infrastructure, and security<ol><li>System infrastructure</li><li>Appropriate technologies</li><li>Security</li></ol></li></ol><p>Some sample criteria are:</p><ul><li>A1.1 Repository has a mission statement that reflects a commitment to the long-term retention of, management of, and access to digital information.</li><li>A2.2 Repository has the appropriate number of staff to support all functions and services.</li><li>A3.5 Repository has policies and procedures to ensure that feedback from producers and users is sought and addressed over time.</li><li>A5.4 Repository tracks and manages intellectual property rights and restrictions on use of repository content as required by deposit agreement, contract, or license.</li><li>B2.5 Repository has and uses a naming convention that generates visible, persistent, unique identifiers for all archived objects (i.e., AIPs).</li><li>B2.9 Repository acquires preservation metadata (i.e., PDI) for its associated Content Information.</li><li>B3.4 Repository can provide evidence of the effectiveness of its preservation planning.</li><li>B4.4 Repository actively monitors integrity of archival objects (i.e., AIPs).</li><li>B5.3 Repository can demonstrate that referential integrity is created between all archived objects (i.e., AIPs) and associated descriptive information.</li><li>C1.1 Repository functions on well-supported operating systems and other core</li><li>infrastructural software.</li><li>C1.5 Repository has effective mechanisms to detect bit corruption or loss.</li><li>C1.7 Repository has defined processes for storage media and/or hardware change (e.g., refreshing, migration).</li><li>C1.9 Repository has a process for testing the effect of critical changes to the system.</li><li>C3.3 Repository staff have delineated roles, responsibilities, and authorizations related to implementing changes within the system.</li></ul><p><i>TRAC:CC</i> states that the &#8220;criteria are written to be applicable to any kind of digital repository or archives.&#8221;  As such, criteria should be placed within the context of vision and goals of the Ohio DRC.  One demonstrates compliance with the criteria through documentation (evidence), transparency (open examination of the evidence), adequacy (degree to which the evidence meets the vision/goals), and measurability.</p><p><h2>Digital Repository Audit Method Based On Risk Assessment</h2><br />The second major report was <i><a href="http://www.repositoryaudit.eu/" title="DCC/DPE Digital Repository Audit Method Based on Risk Assessment homepage">Digital Repository Audit Method Based On Risk Assessment</a></i> (DRAMBORA).  Written by the Digital Curation Centre (U.K. JISC-funded effort researching best practice for storage management and preservation of digital information) and Digital Preservation Europe (European Commission-funded project to improve coordination and cooperation among member states for digital preservation), <i>DRAMBORA</i> is a more methodical approach to assessing the trustworthiness of a repository.  A systematic process guides the auditor to identify risks to long-term preservation of repository content, and then scores each risk as a product between the likelihood of the risk occurring with the impact associated with that event.  Mitigation of the risks could then be prioritized based on a descending order of the score.</p><p>The process has six stages, some with multiple tasks:</p><ol><li>Identify organizational context<ul><li>Specify mandate of your repository or the organization in which it is embedded</li><li>List goals and objectives of your repository</li></ul></li><li>Document policy and regulatory framework<ul><li>List your repository&#8217;s strategic planning documents</li><li>List the legal, regulatory, and contractual frameworks or agreements to which your repository is subject</li><li>List the voluntary codes to which your repository has agreed to adhere</li><li>List any other documents and principles with which your repository complies</li></ul></li><li>Identify activities, assets and their owners<ul><li>Identify your repository&#8217;s activities, assets and their owners</li></ul></li><li>Identify risks<ul><li>Identify risks associated with activities and assets of your repository</li></ul></li><li>Assess risks<ul><li>Assess the identified risks</li></ul></li><li>Manage risks<ul><li>Manage the risks</li></ul></li></ol><p>The report includes a catalog of risks taken from other checklists and repository audits that can be used to spur the thinking of the auditor.</p><p><h2>Recommendation</h2><br />As other reviewers of these documents have noted, <i>DRAMBORA</i> takes a more quantified approach to assessing repositories.  As such, I think it would work best for an established repository self-review. <i>TRAC:CC</i> is more open-ended and exploratory, taking into account vision and goals and plans for a repository.  The authors of <i>DRAMBORA</i> estimate that it would take 28 to 40 hours to complete the audit; <i>TRAC:CC</i> does not provide an estimate, but I think its more general nature means that it would take less time.</p>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/trac-and-drambora/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>Disseminators As the Core of an Object Repository</title><link>http://dltj.org/article/disseminator-centric-repository/</link> <comments>http://dltj.org/article/disseminator-centric-repository/#comments</comments> <pubDate>Thu, 26 Apr 2007 13:58:32 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[DRC]]></category> <category><![CDATA[Fedora]]></category> <category><![CDATA[asset actions]]></category> <category><![CDATA[digital libraries]]></category> <category><![CDATA[java]]></category> <category><![CDATA[restlet]]></category> <category><![CDATA[seam]]></category><guid isPermaLink="false">http://dltj.org/2007/04/disseminator-centric-repository/</guid> <description><![CDATA[I&#8217;ve been working to get JBoss Seam tied into Fedora, and along the way thought it would be wise to stop and document a core concept of this integration: the centrality of Fedora Disseminators in the the design of the &#8230; <a href="http://dltj.org/article/disseminator-centric-repository/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2007/04/disseminator-centric-repository/"></abbr><p>I&#8217;ve been working to get JBoss Seam tied into <a href="http://www.fedora.info/" title="Fedora Digital Object Repository homepage">Fedora</a>, and along the way thought it would be wise to stop and document a core concept of this integration:  the centrality of <a href="http://www.fedora.info/download/2.2/userdocs/digitalobjects/objectModel.html#DISS" title="Overview:The Fedora Digital Object Model">Fedora Disseminators</a> in the the design of the <a href="http://info.drc.ohiolink.edu/" title="Information about the Ohio Digital Resource Commons">Ohio Digital Resource Commons</a>.  Although there is nothing specific to <a href="http://www.jboss.com/products/seam" title="JBoss Seam homepage">JBoss Seam (a Java Enterprise Edition application framework)</a> in these concepts, making an object &#8220;render itself&#8221; does make the Seam-based interface application easier to code and understand.  A disseminator-centric architecture also allows us to put our code investment where it matters the most &mdash; in the repository framework &mdash; and exploit that investment in many places.  So what does it mean to have a disseminator-centric architecture and have objects &#8220;render themselves&#8221;?</p><p><h2>How It Works</h2><br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/sequence.png" title="Sequence Diagram"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/sequence.png" alt="Sequence Diagram " style="float:right;width:50%;margin-left:1.5em;" /></a>This is a sequence diagram showing all of the pieces:</p><ul><li>Browser:  The user&#8217;s browser</li><li>DRCseam:  A JBoss Seam application that generates the user interface and performs much of the business logic.  DRCseam, however, does <strong>not</strong> render the objects or their metadata into browser-consumable artifacts.  Read on!</li><li>Fedora:  A basic Fedora digital object repository.</li><li>Disseminator:  A simple servlet that performs various transformations on object datastreams to render content usable by the browser.</li></ul><p>With these components in play, here is the description of a sequence to render a page showing the metadata for a repository item:</p><ol><li><span style="font-weight:bolder;font-style:italic">request item page</span>: The browser follows a link to an item detail page.</li><li><span style="font-weight:bolder;font-style:italic">API-A ObjectProfile</span>: The interface application asks the repository for the &#8216;Object Profile&#8217; of the item&#8230;</li><li><span style="font-weight:bolder;font-style:italic">return object profile</span>: &#8230;which the repository returns.  The interface application now knows basic details about the object:  that it exists, the creation and updated timestamps, and so forth.</li><li><span style="font-weight:bolder;font-style:italic">API-A DatastreamDissemination for fullDisplay</span>: The interface application needs the object&#8217;s metadata display, so it asks the object to &#8220;render itself&#8221; by making a call to the Fedora repository for the object&#8217;s &#8220;FullDisplay&#8221; disseminator.</li><li><span style="font-weight:bolder;font-style:italic">call getFullDisplay</span>: The Fedora repository in turn calls the object&#8217;s disseminator with the Persistent Identifier (PID) of the object as a parameter.</li><li><span style="font-weight:bolder;font-style:italic">API-A Datastream for metadata</span>: Using the object PID, the disseminator calls back to the Fedora repository for the descriptive metadata datastream (the DC datastream, in this case)&#8230;</li><li><span style="font-weight:bolder;font-style:italic">XML metadata</span>: &#8230;which the Fedora repository returns.</li><li><span style="font-weight:bolder;font-style:italic">transform metadata</span>: The disseminator performs some transformation or derivation on the  descriptive datastream to create an XHTML representation&#8230;</li><li><span style="font-weight:bolder;font-style:italic">XHTML fragment</span>: &#8230;which it returns to the Fedora software&#8230;</li><li><span style="font-weight:bolder;font-style:italic">XHTML fragment</span>: &#8230;which is returned to the interface application&#8230;</li><li><span style="font-weight:bolder;font-style:italic">XHTML page</span>: &#8230;which inserts it at the appropriate place in the XHTML page it has built and returns the XHTML page to the browser.</li></ol><p>Step #4 is where we diverge from previous architectures.  Instead of making the interface application transform the metadata into a human-readable format, the interface application calls the object&#8217;s disseminator to do the job.</p><p><h3>The Heart of It All:  The Disseminator</h3><br />The key to this architecture is <em>asking the object to &#8220;render itself&#8221;</em>.  This puts the task of creating the appropriate representation at the object level.  The object can be an image, a video, a spreadsheet, or a PDF file.  More importantly, the object can be a PDF of a journal article or a PDF of a thesis; in both cases the metadata describing that PDF file will be different (journal/volume/issue in one case and department/degree/advisor in the other).</p><p>Rather than putting special case code in the interface application to render the description of the journal article one way and the thesis another way, that special case code is bound to the object in the form of a &#8220;disseminator&#8221;.  The disseminator methods for the journal article and the thesis share the same name &mdash; <code>getFullDisplay</code> &mdash; but will return entirely different XHTML fragments &mdash; one for a journal article and one for a thesis.  For both objects, though, the interface application will make a call to the object in the Fedora repository asking for the output of each <code>getFullDisplay</code> dissemination.  In the case of a Dublin Core description, the dissemination output could look like this:</p><div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&amp;lt;table class=&quot;drc_dublinCore_table&quot;&amp;gt;
&amp;lt;tr class=&quot;drc_dublinCore_row drc_dublinCore_title&quot;&amp;gt;
&amp;lt;td class=&quot;drc_dublinCore_label drc_dublinCore_title&quot;&amp;gt;Title:&amp;lt;/td&amp;gt;
&amp;lt;td class=&quot;drc_dublinCore_value drc_dublinCore_title&quot;&amp;gt;Jester Example&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr class=&quot;drc_dublinCore_row drc_dublinCore_identifier&quot;&amp;gt;
&amp;lt;td class=&quot;drc_dublinCore_label drc_dublinCore_identifier&quot;&amp;gt;Identifier:&amp;lt;/td&amp;gt;
&amp;lt;td class=&quot;drc_dublinCore_value drc_dublinCore_identifier&quot;&amp;gt;demo:exampleObject&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;</pre></div></div><p>You&#8217;ll note that there is a liberal application of CSS styles on all of the XHTML elements, allowing for the look of the dissemination to be further transformed in the browser via CSS stylesheets.  A <code>getFullDisplay</code> dissemination for a journal article could look like this:</p><div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&amp;lt;table class=&quot;drc_ejc_table&quot;&amp;gt;
&amp;lt;tr class=&quot;drc_ejc_row drc_ejc_title&quot;&amp;gt;
&amp;lt;td class=&quot;drc_ejc_label drc_ejc_title&quot;&amp;gt;Article Title:&amp;lt;/td&amp;gt;
&amp;lt;td class=&quot;drc_ejc_value drc_ejc_title&quot;&amp;gt;Taking Advantage of Fedora Disseminations&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr class=&quot;drc_ejc_row drc_ejc_volume&quot;&amp;gt;
&amp;lt;td class=&quot;drc_ejc_label drc_ejc_volume&quot;&amp;gt;Volume:&amp;lt;/td&amp;gt;
&amp;lt;td class=&quot;drc_ejc_value drc_ejc_volume&quot;&amp;gt;3&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr class=&quot;drc_ejc_row drc_ejc_issue&quot;&amp;gt;
&amp;lt;td class=&quot;drc_ejc_label drc_ejc_issue&quot;&amp;gt;Issue:&amp;lt;/td&amp;gt;
&amp;lt;td class=&quot;drc_ejc_value drc_ejc_issue&quot;&amp;gt;2&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;</pre></div></div><p><h3>Looking at the Pieces</h3><br />There is a demonstration system set up for a short period of time that shows all of the pieces.  First, the disseminator:</p><ul><li><span class="removed_link" title="http://drc-dev.ohiolink.edu:8080/BaseDisseminator/getFullDisplay/demo:exampleObject">http://drc-dev.ohiolink.edu:8080/BaseDisseminator/getFullDisplay/demo:exampleObject</span></li></ul><p>Next, how this disseminator looks as accessed through the Fedora repository:</p><ul><li><span class="removed_link" title="http://drc-dev.ohiolink.edu:8080/fedora/get/demo:exampleObject/demo:bDefExample/getFullDisplay/">http://drc-dev.ohiolink.edu:8080/fedora/get/demo:exampleObject/demo:bDefExample/getFullDisplay/</span></li></ul><p>And finally, how this result looks through the Seam-based interface application.  (A note about this application &mdash; only this URL works at the moment even though there are other links on the page.  This is also the &#8216;trunk&#8217; version of our interface code, so it is likely to change and/or break and/or work better at any time.)</p><ul><li><span class="removed_link" title="http://drc-dev.ohiolink.edu:8080/drc/item.seam?itemId=demo%3AexampleObject">http://drc-dev.ohiolink.edu:8080/drc/item.seam?itemId=demo%3AexampleObject</span></li></ul><p><h2>Fedora Setup</h2><br />In addition to the Seam-based interface application and the disseminator code, there is setup required at the Fedora repository &mdash; specifically, the creation of a Behavior Definition (bDef) that describes the disseminators that the objects share in common and the creation of a Behavior Mechanism (bMech) that describes the implementation of that definition for a particular object type.  Below is a series of screen shots that show the steps to create the bDef and bMech.</p><p><h3>Disseminator Behavior Definition (bDef)</h3><br />Using the Fedora Admin client, under the &#8220;Builders&#8221; menu, select &#8220;Behavior Definition Builder&#8221;.  The first pane, &#8220;General&#8221; parameters, use a specific PID of &#8216;<code>demo:bDefExample</code>&#8216; and put something in for the Behavior Object Name, Behavior Object Description, and one of the Dublin Core Metadata fields.  (It doesn&#8217;t matter what you put in for these values.)<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/bdbgeneral.png" title="Fedora Admin Behavior Definition Builder “General” pane"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/bdbgeneral.png" alt="Fedora Admin Behavior Definition Builder “General” pane" style="width:85%;" /></a></p><p>Under the &#8220;Abstract Methods&#8221; pane, create new definitions for each of the disseminator methods.<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/bdbabstractmethods.png" title="Fedora Admin Behavior Definition Builder “Abstract Methods” pane"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/bdbabstractmethods.png" alt="Fedora Admin Behavior Definition Builder “Abstract Methods” pane" style="width:85%;" /></a></p><p>Under the &#8220;Documentation&#8221; pane, put something in the first entry.  Again, it doesn&#8217;t matter what is put in for these values, but they are required.<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/bdbdocumentation.png" title="Fedora Admin Behavior Definition Builder “Documentation” pane"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/bdbdocumentation.png" alt="Fedora Admin Behavior Definition Builder “Documentation” pane" style="width:85%;" /></a></p><p>Select &#8220;Ingest&#8221; at the bottom of the window, and the <code>demo:bDefExample</code> bDef will be created.  Alternatively, you could import the <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/BaseDisseminator/trunk/resources/foxml/demo_bDefExample.xml?rev=774"><code>demo:bDefExample</code> saved in the DRC source code repository</span> (choose &#8220;original format&#8221; at the bottom of that page).</p><p><h3>Disseminator Mechanism Definition (bMech)</h3><br />The bMech is a little more complicated.  Under the &#8220;Builders&#8221; menu, select &#8220;Behavior Mechanism Builder&#8221;.  The first pane, &#8220;General&#8221; parameters, use a specific PID of &#8216;<code>demo:bMechExample</code>&#8216; and put something in for the Behavior Object Name, Behavior Object Description, and one of the Dublin Core Metadata fields.  (It doesn&#8217;t matter what you put in for these values.)  In the &#8220;Behavior Definition Contract&#8221; pick the bDef just created (<code>demo:bDefExample</code>).<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbgeneral.png" title="Fedora Admin Behavior Mechanism Builder “General” pane"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbgeneral.png" alt="Fedora Admin Behavior Mechanism Builder “General” pane" style="width:85%;" /></a></p><p>In the &#8220;Service Profile&#8221; pane, put in values in the &#8220;General&#8221; area (it doesn&#8217;t matter what).  In the Service Binding area, make sure the Message Protocol is <code>HTTP GET</code>, put in <code>text/html, text/xml</code> for Input MIME Types and put in <code>text/html, text/xml, text/plain</code> for Output MIME Types.<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbserviceprofile.png" title="Fedora Admin Behavior Mechanism Builder “Service Profile” pane"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbserviceprofile.png" alt="Fedora Admin Behavior Mechanism Builder “Service Profile” pane" style="width:85%;" /></a></p><p>Under the Service Methods pane, put in <code>http://localhost:8080/BaseDisseminator</code> for the Base URL.  (The disseminator is also loaded in the same servlet as the Fedora repository and the Seam interface application, and it is loaded at the &#8220;/BaseDisseminator&#8221; context path in the servlet.)  Create Service Method Definitions that correspond to the Abstract Methods in the bDef.<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbservicemethods.png" title="Fedora Admin Behavior Mechanism Builder “Service Methods” pane"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbservicemethods.png" alt="Fedora Admin Behavior Mechanism Builder “Service Methods” pane" style="width:85%;" /></a></p><p>Select &#8220;Properties&#8221; for each one of the Service Method Definitions in turn.  &#8220;echo&#8221; is a unique disseminator method that simply echos back the context parameters of the disseminator request.  This is useful for seeing exactly what the Fedora server is going to give to the disseminator.<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbservicemethods-echo.png" title="Fedora Admin Behavior Mechanism Builder “Service Methods” Definitions for “echo” Method"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbservicemethods-echo.png" alt="Fedora Admin Behavior Mechanism Builder “Service Methods” Definitions for “echo” Method" style="width:85%;" /></a></p><p>With the exception of &#8220;echo&#8221; all of the other Service Method Definitions are the same.  The Method Binding consists of the disseminator method followed by a slash and the PID placeholder followed by a question mark and &#8216;dc&#8217; equals the DC placeholder.  Since the Method Binding field has two placeholders, there are two entries in the Method Parameter Definitions area.  The first is for PID &mdash; a &#8220;Default&#8221; parameter that is required and passed by value to the disseminator.  The default value is the special value <code>$PID</code>, which the repository software will replace with the PID of the object as the disseminator is called.  The second is for DC, a &#8220;Datastream&#8221; parameter that is required and passed to the disseminator by URL reference.  The disseminator doesn&#8217;t actually use this reference to a datastream, but it is a requirement that all bMechs pass a datastream of one sort or another to the disseminator.<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbservicemethods-getfulldisplay.png" title="Fedora Admin Behavior Mechanism Builder “Service Methods” Definitions for “getFullDisplay” Method"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbservicemethods-getfulldisplay.png" alt="Fedora Admin Behavior Mechanism Builder “Service Methods” Definitions for “getFullDisplay” Method" style="width:85%;" /></a></p><p>If you have followed all of the steps so far, under the &#8220;Datastream Input&#8221; pane there will be one entry for DC in the table.  The only thing that needs to be done here is adding &#8220;text/xml&#8221; in the MIMEType column.<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbdatastreaminput.png" title="Fedora Admin Behavior Mechanism Builder “Datastream Input” pane"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbdatastreaminput.png" alt="Fedora Admin Behavior Mechanism Builder “Datastream Input” pane" style="width:90%;" /></a></p><p>Under the &#8220;Documentation&#8221; pane, put something in the first entry.  Again, it doesn&#8217;t matter what is put in for these values, but they are required.<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbdocumentation.png" title="Fedora Admin Behavior Mechanism Builder “Documentation” pane"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/bmbdocumentation.png" alt="Fedora Admin Behavior Mechanism Builder “Documentation” pane" style="width:85%;" /></a></p><p>Select &#8220;Ingest&#8221; at the bottom of the window, and the <code>demo:bMechExample</code> bMech will be created.  Alternatively, you could import the <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/BaseDisseminator/trunk/resources/foxml/demo_bMechExample.xml?rev=774"><code>demo:bMechExample</code> saved in the DRC source code repository</span> (choose &#8220;original format&#8221; at the bottom of that page).</p><p><h3>Sample Object</h3><br />The last step is to add this disseminator bDef/bMech combination to an object.  Edit any object in the repository and go to the &#8220;Disseminators&#8221; pane.  If there are other disseminators already defined for this object, select &#8220;New&#8221; along the left side.  Put in a label &mdash; any label will do.  Next to &#8220;Behavior defined by&#8230;&#8221; select <code>demo:bDefExample</code>.  Then next to &#8220;Mechanism&#8221; select <code>demo:bMechExample</code>.  The admin client will prompt for a DC binding; select &#8220;Add&#8221; and choose the DC datastream in the pop-up window.<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/objectdisseminatorsdatastream.png" title="Fedora Admin Sample Object’s “Disseminators” pane in progress"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/objectdisseminatorsdatastream.png" alt="Fedora Admin Sample Object’s “Disseminators” pane in progress" style="width:85%;" /></a></p><p>Select &#8220;Save Changes&#8221; at the bottom.  The completed disseminator looks like this:<br /><a href="http://cdn.dltj.org/wp-content/uploads/2007/04/objectdisseminators.png" title="Fedora Admin Sample Object’s “Disseminators” pane completed"><img src="http://cdn.dltj.org/wp-content/uploads/2007/04/objectdisseminators.png" alt="Fedora Admin Sample Object’s “Disseminators” pane completed" style="width:85%;" /></a></p><p>There is <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/BaseDisseminator/trunk/resources/foxml/demo_exampleObject.xml?rev=774">a sample object in the DRC source code repository</span> that has the disseminator already defined.</p><p><h2>Notes</h2><br />Comments about this architecture are certainly welcome.  I&#8217;m sure I&#8217;ll be writing about it more in the future, but here are some thoughts at this point:</p><p><h3>Future Directions</h3><br />In this case, I&#8217;m using an XSLT stylesheet to transform the Dublin Core XML into an XHTML table.  That stylesheet is stored in the BaseDisseminator WAR file.  The stylesheet could just as easily be a datastream of a special &#8220;formatting&#8221; object in the repository.  One of the key distinctions of OhioLINK&#8217;s Fedora implementation is that institutions using the repository will be able to &#8220;brand&#8221; their content in any way they choose.  Having the flexibility of storing metadata transformations just like any other object in the repository would seem to be of great advantage in that scenario.</p><p>On a related front, this style of implementation would be greatly enhanced by the work of the Fedora <a href="http://www.cs.cornell.edu/payette/fedora/designs/cmda/" title="CMDA Proposal">Content Model Dissemination Architecture</a> (CMDA).  Because disseminators must be bound to specific objects rather than classes of objects, management of the variety of bMechs in a scenario such as this will likely become difficult very soon.  I&#8217;m heartened by the fact that the CMDA work is going on and will cut our management complexity dramatically when it becomes available.</p><p><h3>Acknowlegements</h3><br />These concepts are based in part on the work of the Digital Library Federation&#8217;s <a href="https://wiki.dlib.indiana.edu/display/DLFAquifer/Asset+Action+Project" title="Aquifer Digital Collections Asset Actions homepage">Aquifer Asset Actions</a> technical working group and discussions among members of the OAI <a href="http://www.openarchives.org/ore/" title="Open Archives Initiative Protocol - Object Exchange and Reuse homepage">Object Reuse and Exchange</a> technical committee as well as conversations with many Fedora developers and implementors.  Thanks, everyone.</p><p>[Update 20070426T1147 : Fixed the sample object URL.  Thanks, Jodi.]<p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/BaseDisseminator/trunk/resources/foxml/demo_exampleObject.xml?rev=774 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/BaseDisseminator/trunk/resources/foxml/demo_bMechExample.xml?rev=774 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/BaseDisseminator/trunk/resources/foxml/demo_bDefExample.xml?rev=774 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu:8080/drc/item.seam?itemId=demo%3AexampleObject on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu:8080/fedora/get/demo:exampleObject/demo:bDefExample/getFullDisplay/ on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu:8080/BaseDisseminator/getFullDisplay/demo:exampleObject on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;">The text was modified to update a link from http://rama.grainger.uiuc.edu/assetActions/ to https://wiki.dlib.indiana.edu/display/DLFAquifer/Asset+Action+Project on January 19th, 2011.</p>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/disseminator-centric-repository/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Building an Institutional Repository Interface Using EJB3 and JBoss Seam</title><link>http://dltj.org/article/drc-ir-ejb3-seam/</link> <comments>http://dltj.org/article/drc-ir-ejb3-seam/#comments</comments> <pubDate>Fri, 19 Jan 2007 04:00:49 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[DRC]]></category> <category><![CDATA[Fedora]]></category> <category><![CDATA[Raw Technology]]></category> <category><![CDATA[ejb3]]></category> <category><![CDATA[icor2007]]></category> <category><![CDATA[java]]></category> <category><![CDATA[programming]]></category> <category><![CDATA[seam]]></category><guid isPermaLink="false">http://dltj.org/2007/01/drc-ir-ejb3-seam/</guid> <description><![CDATA[This tour is designed to show the overall architecture of a FEDORA digital object repository application within the JBoss Seam framework while at the same time pointing out individual design decisions and extension points that are specific to the Ohio &#8230; <a href="http://dltj.org/article/drc-ir-ejb3-seam/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2007/01/drc-ir-ejb3-seam/"></abbr><p>This tour is designed to show the overall architecture of a <a href="http://www.fedora.info/" title="Fedora">FEDORA digital object repository</a> application within the <a href="http://www.jboss.com/products/seam" title="JBoss.com - JBoss Seam">JBoss Seam framework</a> while at the same time pointing out individual design decisions and extension points that are specific to the <a href="http://drc-dev.ohiolink.edu/" title="Digital Resource Commons - Trac">Ohio Digital Resource Commons application</a>. Geared towards software developers, a familiarity with <a href="http://java.sun.com/products/servlet/" title="Java Servlet Technology">Java Servlet programming</a> is assumed, although not required.  Knowledge of JBoss Seam, <a href="http://www.hibernate.org/" title="hibernate.org - Hibernate">Hibernate</a>/<a href="http://java.sun.com/javaee/overview/faq/persistence.jsp" title="Java Persistence API FAQ">Java Persistence API</a>, <a href="http://jcp.org/en/jsr/detail?id=220" title="The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 220">EJB3</a> and <a href="http://java.sun.com/javaee/" title="Java EE at a Glance">Java EE</a> would be helpful but not required; brief explanations of core concepts of these technologies are included in this tour.</p><p>The tour is based on <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk?rev=709">revision 709 of /drc/trunk</span> and was last updated on 18-Jan-2007.</p><p>This tour will also be incorporated into a <span class="removed_link" title="http://openrepositories.org/program/fedora#session4">presentation at Open Repositories 2007 on Tuesday afternoon</span>.</p><p><h2 id="DirectoryLayout">Directory Layout</h2></p><p>The source directory tree has four major components:  &#8216;lib&#8217;, &#8216;resources&#8217;, &#8216;src&#8217;, and &#8216;view&#8217;.</p><p><strong>lib &#8211; libraries required by the application.</strong> The <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/lib?rev=709">lib directory</span> contains all of the JAR libraries required by the application. Its contents is a mix of the Seam-generated skeleton (pretty much everything at the top level of the &#8216;lib&#8217; directory) and JAR libraries that are specific to the DRC application (in subdirectories of &#8216;lib&#8217; named for the library in use).  For instance, the &#8216;commons-codec-1.3&#8242; and the &#8216;hibernate-all&#8217; and the &#8216;jboss-seam&#8217; JAR files were all brought into the project via &#8216;seam-gen&#8217; while &#8216;lib/commons-net-1.4.1/commons-net-1.4.1.jar&#8217; library was added specifically for this project. A convention has been established whereby new libraries added to the project appear as entries in the <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/lib/lib.properties?rev=709">lib.properties file</span> which is used by <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/build.xml?rev=709#L65">series of directives in the build.xml file</span> to setup the classpaths <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/build.xml?rev=709#L101">for compiling</span> and <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/build.xml?rev=709#L116">for building the EJB JAR</span>. This is done to make the testing and transition of new libraries into the application more explicit and easily testable. Note that the newly included library directory also includes a copy of any license file associated with that library; this is not only a requirement to use some libraries but is also a good practice to show the lineage of some of the lesser known libraries. (For an example of what is required, see the changes <span class="removed_link" title="http://drc-dev.ohiolink.edu/changeset/699%23file2">to build.xml</span> and <span class="removed_link" title="http://drc-dev.ohiolink.edu/changeset/699%23file3">to lib.properties</span> in order to bring the Apache Commons Net library into the application.)</p><p><strong>resources &#8211; configuration files and miscellaneous stuff.</strong> The <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/resources?rev=709">resources directory</span> holds the various configuration files required by the application plus other files used for testing and demonstration.  Much of this was generated by the Seam-generated skeleton as well.  Some key files here are the <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/resources/import.sql?rev=709">import.sql file</span> (SQL statements that are used to preload the RDBMS used by Hibernate as the mocked up repository system) and the <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/resources/test-datastreams?rev=709">test-datastreams directory</span> which has sample files for each of the media types.</p><p><strong>src &#8211; Java source code.</strong> The <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src?rev=709">src directory</span> contains all of the Java source code for the application.  Everything exists in a package called &#8216;edu.ohiolink.drc&#8217; with subpackages for <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/action?rev=709">classes handling actions</span> from the view component of the MVC, <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/entity?rev=709">entity beans</span> (sometimes known as Data Access Objects &#8212; or DAOs &#8212; I think), <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/exceptions?rev=709">exception classes</span> (more on this below), <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/fedora?rev=709">classes for working with FEDORA</span> (not currently used), <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/handler?rev=709">media type handler classes</span> (more on this below), <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/test?rev=709">unit test classes</span> (not currently used), and <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/utility?rev=709">utility classes</span>.</p><p><strong>view &#8211; XHTML templates, CSS files, and other web interface needs.</strong> The <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/view?rev=709">view directory</span> holds all of the files for the &#8220;view&#8221; aspect of the Model-View-Controller paradigm. More information about the view components is below.</p><p><h2 id="EntityClasses">Entity Classes</h2></p><p>The <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/entity?rev=709">entity beans package</span> has three primary entity beans defined: <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/entity/Item.java?rev=709">Item.java</span>, <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/entity/Datastream.java?rev=709">Datastream.java</span>, and <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/entity/Description.java?rev=709">Description.java</span>. (The FedoraServer.java entity bean is not used at this time.)  Item.java is the primary bean that represents an object in the repository.  Datastream.java and Description.java are component beans that only exist in the lifecycle of an Item.java bean; Datastream.java holds a representation of a FEDORA object datastream and Description.java holds a representation of a Dublin Core datastream for that object.</p><p>The Datastream and Description objects are annotated with <tt>@Embedded</tt> in the Item.java source; this is Hibernate&#8217;s way of saying that these objects do not stand on their own.  Item.java also has numerous methods marked with a <tt>@javax.persistence.Transient</tt> annotation meaning that this is information not stored in the backing Hibernate database; these methods are for the various content handlers, which will be outlined below.</p><p><h2 id="MockRepository">Mock Repository</h2></p><p>As currently configured, the entity beans pull their information from a static RDBMS using Hibernate rather than from an underlying FEDORA digital object repository. (You&#8217;ll need to go back to <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk?rev=691">revision 691</span> to see how far we got with the FEDORA integration into JBoss Seam before we switched our development focus to the presentation &#8216;view&#8217; aspects of the application.) As <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/resources/drc-ds.xml?rev=709">currently configured</span>, Hibernate uses an embedded Hypersonic SQL database for its datastore.  As part of the application deploy process, the Java EE container will instantiate a Hypersonic database and preload it with the contents of the <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/resources/import.sql?rev=709">import.sql file</span>. (The import.sql file contains just three sample records at the moment:  one each for a text file, a PDF file, and a graphic file.)</p><p>All of the data for a repository object is contained in a single table record. Hibernate manages the process for us of reading that record out of the database and creating the three corresponding Java objects:  Item, Datastream and Description. (Hibernate could also handle the process of updating the underlying table record if we were to change a value in one of the Java objects.) The mapping of table column to Java object field is handled by the <tt>@Column(name="xx")</tt> annotations in the entity beans.</p><p>For Datastream, what is stored in the database is not the datastream content itself but rather a filename that points to the location of the datastream file.  The file path in this field can either be absolute (meaning a complete path starting from the root directory of the filesystem) or a relative path.  In the case of the latter, the path is relative to the deployed application&#8217;s WAR directory (something like &#8220;&#8230;/jboss-4.0.5.GA/server/default/deploy/drc.ear/drc.war/&#8221; for instance). Note that the getter/setter methods for the contentLocation are <tt>private</tt> &#8212; the rest of the application does not need to know the location of the datastreams; this will also be true when the DRC application is connected to a FEDORA digital object repository. The method marked <tt>public</tt> instead is getContent, and the implementation of getContent hides the complexity of the fact that the datastream is coming from a disk file rather than a FEDORA repository call. For the three records/repository-objects currently defined in &#8216;import.sql&#8217; there are three corresponding demo datastreams in the <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/resources/test-datastreams?rev=709">test-datastreams directory</span>.</p><p>In all likelihood, this representation of the FEDORA repository will be too simple for us to move forward much further. In particular, the current notion of one datastream per repository object is too simplistic. The Datastream embedded object will likely need to be broken out into a separate table and as a corresponding distinct Java applet. (We may reach the same point soon for the Description object as well.)</p><p>By using the Entity Beans as a buffer between the business logic and the view components of the rest of the application, I hope we can minimize/localize the changes required in the future in order to replace the mock repository with a real underlying FEDORA repository.</p><p><h2 id="ViewTemplates">View Templates</h2></p><p>The preferred view technology for JBoss Seam is <a class="ext-link" href="http://facelets.dev.java.net/" title="301 Moved Permanently"><span class="icon">Facelets</span></a>, an implementation of Java Server Faces that does not require the use of Java Server Pages (JSP). Although the &#8216;.xhtml&#8217; pages in the view directory bear a passing resemblance to JSP, behind the scenes they are radically different.  Of note for us is the <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/view/layout?rev=709">clean templating system</span> used to generate pages. The <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/view/home.xhtml?rev=709">home.xhtml file</span> has a reference to the <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/view/layout/template.xhtml?rev=709">template.xhtml file in the &#8216;layout&#8217; directory</span>. If you read through the template.xhtml file, you can see where the Facelets engine will pull in other .xhtml files in addition to the content within the <tt>&lt;ui:define name="body"&gt;</tt> tag of home.xhtml.</p><p><h2 id="ContentHandlers">Content Handlers</h2></p><p>The paradigm of handling different media types within the DRC application is guided in large part by the notion of <a class="ext-link" href="http://dltj.org/2006/05/fedora-disseminators/"><span class="icon">disseminators for FEDORA objects</span></a> and the <a class="ext-link" href="https://wiki.dlib.indiana.edu/display/DLFAquifer/Asset+Action+Project" title="Aquifer Digital Collections"><span class="icon">Digital Library Federation Aquifer Asset Actions experiments</span></a>.  The underlying concept is to push the media-specific content handling into the digital object repository and to have the presentation interface consume those content handlers as it is preparing the end-user presentation.</p><p>For instance, the DRC will need to handle content models for PDFs, images, video, and so forth.  Furthermore, how a video datastream from the Digital Video Collection is offered to the user may be different than how a video datastream from a thesis is offered to the user. Rather than embedding the complexity of making those interface decisions into the front-end DRC application, this model of content handlers pushes that complexity closer to the objects themselves by encoding those behaviors a disseminators of the object.  What the presentation layer gets from the object is a chunk of XHTML that it inserts into the dynamically generated HTML page at the right place.</p><p>There is work beginning on a framework for FEDORA disseminators at <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/BaseDisseminator/trunk?rev=691">/BaseDisseminator/trunk</span> in the source code repository; that work has been put on hold at the moment in favor of focusing on the presentation interface.  In order to prepare for the time when the presentation behaviors are encoded as FEDORA object disseminators, the current presentation layer makes use of Content Handlers for each of the media types.  The <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/handler/Handler.java?rev=709">Handler interface</span> defines the methods required by each handler and the <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/handler/TextHandler.java?rev=709">TextHandler class</span>, the <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/handler/ImageHandler.java?rev=709">ImageHandler class</span>, and the <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/handler/PdfHandler.java?rev=709">PdfHandler class</span> implement the methods for the three media types already defined.</p><p>Of these, <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/handler/TextHandler.java?rev=709">TextHandler class</span> is the most complete, so I&#8217;ll use it as an example.</p><ul><li>The <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/handler/TextHandler.java?rev=709#L63">getRawDatastream method</span> takes the datastream and sends it back to the browser with the HTTP headers that cause a File-Save dialog box to open.</li><li>The <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/handler/TextHandler.java?rev=709#L92">getFullDisplay method</span> returns a chunk of XHTML that presents the full metadata in a manner that can be included in a full metadata display screen.</li><li>The <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/handler/TextHandler.java?rev=709#L132">getRecordDisplay method</span> (currently unwritten) returns a chuck of XHTML used to represent the object in a list of records that resulted from a user&#8217;s search or browse request.</li><li>The <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/handler/TextHandler.java?rev=709#L140">getThumbnail method</span> (currently unwritten) returns a static graphic thumbnail rendition of the datastream (e.g. a cover page, a key video frame, etc.).</li></ul><p>By making these content handlers distinct classes, it is anticipated that the rendering code for each of these methods can be more easily moved to FEDORA object disseminators with minimal impact to the surrounding DRC interface application.</p><p><h2 id="ExceptionHandling">Exception Handling</h2></p><p>The DRC application follows the practice suggested by Barry Ruzek in <a href="http://www.oracle.com/technetwork/articles/entarch/effective-exceptions-092345.html" title="Effective Java Exceptions">Effective Java Exceptions</a> (found via <a href="http://www.theserverside.com/news/thread.tss?thread_id=43820" title="http://www.theserverside.com/news/thread.tss?thread_id=43820">this link on The Server Side</a>).  The article can be summarized as:</p><blockquote><p>One type of exception is a <strong>contingency</strong>, which means that a process was executed that cannot succeed because of a known problem (the example he uses is that of a checking account, where the account has insufficient funds, or a check has a stop payment issued.) These problems should be handled by way of a distinct mechanism, and the code should expect to manage them.</p><p>The other type of exception is a <strong>fault</strong>, such as the IOException. A fault is typically not something that is or should be expected, and therefore handling faults should probably not be part of a normal process.</p><p>With these two classes of exception in mind, it&#8217;s easy to see what should be checked and should be unchecked: the <strong>contingencies should be checked</strong> (and descend from Exception) and the faults should be unchecked (and descend from Error).</p></blockquote><p>All unchecked exceptions generated by the application are subclasses of <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/exceptions/DrcBaseAppException.java?rev=709">DrcBaseAppException</span>. (<tt>DrcBaseApplication</tt> itself is a subclass of <tt>RuntimeException</tt>.)  For an example, see <span class="removed_link" title="http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/exceptions/NoHandlerException.java?rev=709">NoHandlerException</span>.  By setting up all of the applications exceptions to derive from this point, we have one place where logging of troubleshooting information can take place (although this part of the application has not been set up yet). Except when there is good reason to do otherwise, this pattern should be maintained.</p><p>At this point, no checked (or <em>contingency</em>) exceptions specific to the DRC have been defined.  When they are needed, though, they will follow the same basic structure with a base exception derived from <tt>Exception</tt>.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/lib?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/build.xml?rev=709#L65 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/resources?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/changeset/699%23file3 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/changeset/699%23file2 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/build.xml?rev=709#L116 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/build.xml?rev=709#L101 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/lib/lib.properties?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/view/layout?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/resources/drc-ds.xml?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk?rev=691 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/entity/Description.java?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/entity/Datastream.java?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/entity/Item.java?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/view?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/utility?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/test?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/exceptions/DrcBaseAppException.java?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/handler/TextHandler.java?rev=709#L140 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/handler/TextHandler.java?rev=709#L132 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/handler/TextHandler.java?rev=709#L92 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/handler/TextHandler.java?rev=709#L63 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/handler/PdfHandler.java?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/handler/ImageHandler.java?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/handler/TextHandler.java?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/BaseDisseminator/trunk?rev=691 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/exceptions/NoHandlerException.java?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/resources/import.sql?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/resources/import.sql?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/view/layout/template.xhtml?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/handler?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/fedora?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/exceptions?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/entity?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/action?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/src?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/resources/test-datastreams?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/src/edu/ohiolink/drc/handler/Handler.java?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://drc-dev.ohiolink.edu/browser/drc/trunk/view/home.xhtml?rev=709 on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://openrepositories.org/program/fedora#session4 on January 19th, 2011.</p><p style="padding:0;margin:0;font-style:italic;">The text was modified to update a link from http://rama.grainger.uiuc.edu/assetActions/ to https://wiki.dlib.indiana.edu/display/DLFAquifer/Asset+Action+Project on January 19th, 2011.</p><p style="padding:0;margin:0;font-style:italic;">The text was modified to update a link from http://dev2dev.bea.com/pub/a/2006/11/effective-exceptions.html to http://www.oracle.com/technetwork/articles/entarch/effective-exceptions-092345.html on January 20th, 2011.</p>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/drc-ir-ejb3-seam/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Looking Forward to Version 2.2 of FEDORA</title><link>http://dltj.org/article/fedora-2-point-2/</link> <comments>http://dltj.org/article/fedora-2-point-2/#comments</comments> <pubDate>Mon, 01 Jan 2007 01:46:39 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[DRC]]></category> <category><![CDATA[Fedora]]></category> <category><![CDATA[icor2007]]></category> <category><![CDATA[java]]></category> <category><![CDATA[jboss]]></category> <category><![CDATA[library service-oriented architecture]]></category> <category><![CDATA[open source]]></category><guid isPermaLink="false">http://dltj.org/2006/12/fedora-2-point-2/</guid> <description><![CDATA[Sandy Payette, Co-Director of the Fedora Project and Researcher in the Cornell Information Science department, announced a tentative date for the release 2.2 of the FEDORA digital object repository.The Fedora development team would like to announce that Fedora 2.2 will &#8230; <a href="http://dltj.org/article/fedora-2-point-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2006/12/fedora-2-point-2/"></abbr><p><a href="http://www.cs.cornell.edu/payette" title="Sandy Payette&#039;s homepage">Sandy Payette</a>, Co-Director of the Fedora Project and Researcher in the Cornell Information Science department, <a href="http://article.gmane.org/gmane.comp.cms.fedora-commons.user/2330/" title="Posting to the Fedora-Users mailing list by Sandy Payette with the subject &#039;Release Date for Fedora 2.2&#039; dated Fri, Dec 22, 2006 at 15:25:56 EST"> announced a tentative date for the release 2.2 of the FEDORA</a> digital object repository.</p><blockquote><p>The Fedora development team would like to announce that Fedora 2.2 will be released on Friday, January 19, 2007.</p><p>This new release will contain many significant new features and enhancements, including <i>[numbers added to the original for the sake of subsequent commentary]</i>:</p><ol><li>Fedora repository is now a web application (.war) that can be installed in any container</li><li>Fedora authentication has been refactored to use servlet filters (no longer Tomcat realms)</li><li>A new Fedora installer makes it easy to get started with Fedora (with both &#8220;quick&#8221; and &#8220;custom&#8221; install options)</li><li>GSearch service (backed by Lucene or Zebra) &#8211; flexible, configurable, indexes any datastream</li><li>Journaling service to create a backup/mirror repository</li><li>New checksum features for datastreams</li><li>Support for Postgres database configuration</li><li>Standard system logging with Log4J</li><li>Over 40 bug fixes</li><li>Many other enhancements</li></ol><p>Be on the lookout for the release announcement the new year!   Also, there will be opportunities to talk with the Fedora development team at Open Repositories 2007 (<a href="http://openrepositories.org/" title="Open Repositories 2007 homepage">http://openrepositories.org/</a>).</p></blockquote><p>This is great news and a major step forward for the project.  Here are some reasons why I think this is true.</p><p><h2>1. Fedora repository is now a web application (.war)</h2><br />To this point, the FEDORA repository application distribution has been pre-bundled inside a Tomcat Java servlet container.  The binding has been pretty tight with certain dependencies written into the Tomcat configuration itself.  That made it very difficult to install FEDORA into an organization&#8217;s existing servlet container (be it another installation of Tomcat or Jetty/JBoss/Glassfish, etc.).  Even more problematic, there were reports of problems trying to get JSP-based applications to work inside the FEDORA-supplied container (we ran into this ourselves) meaning that organizations wanting to run both FEDORA and another servlet-based application needed to run <i>two</i> servlet containers; pretty inefficient.  (OhioLINK was in this position in its early implementations of the <a href="http://info.drc.ohiolink.edu/" title="Ohio Digital Resource Commons home page">Ohio DRC</a> project.)</p><p>With release 2.2, the core developers have effectively turned the software distribution inside out.  The primary output of the new build process is a standard <b>W</b>eb <b>AR</b>chive (or <b>WAR</b>) file that can be put inside any servlet container.  The new installation program (see #3 below) comes with a Tomcat distribution, should a new installation need it, but it is no longer required.  There have been reports that the new WAR-based distribution works inside the Jetty servlet container; we&#8217;re hoping it will work in the JBoss Application Server as well (<a href="http://dltj.org/2006/10/java-framework/">since that is what we&#8217;re using to build our next generation interface</a>).</p><p><h2>2. Fedora authentication has been refactored to use servlet filters</h2><br />I&#8217;m not quite sure what this means, but I have hopes that it will make integration with <a href="http://shibboleth.internet2.edu/" title="Project Shibboleth home page">Shibboleth</a> easier.  Can anyone else see the path between FEDORA and Shibboleth and comment on it?</p><p><h2>3. A new Fedora installer makes it easy to get started with Fedora</h2><br />From the start, FEDORA required a Java servlet container in order to run.  To make the installation job easier for those that are not familiar with Java servlet containers, the FEDORA installation process did everything for you.  Now that the relationship between the FEDORA application and the servlet container have been flipped around (see #1 above), the core developers devised an easy-to-use installation application that mimics the simplicity of the previous installation style while allowing others to make use of FEDORA as an integrated application within an existing servlet container.</p><p><h2>4. GSearch service</h2><br />The original FEDORA search service, the appropriately-named &#8220;basic search,&#8221; indexes only the Dublin Core (DC) datastream of each object.  As has been mentioned on the Fedora-Users mailing list several times, the DC datastream is really meant as an administrative metadata datastream and not necessarily the full description of the object; <a href="http://dltj.org/2006/09/description-datastream/">that full description can be stored in other datastreams of a FEDORA object</a>.  Not only did basic search not index these other descriptive metadata streams, but it also wouldn&#8217;t index the full text of PDF, text, and other indexable datastreams.</p><p><span class="removed_link" title="http://defxws2006.cvt.dk/fedoragsearch/">GSearch</span> &mdash; where &#8220;G&#8221; stands for &#8220;General&#8221; but could equally well stand for &#8220;Gert&#8221; Schmeltz Pedersen, its lead developer from the Technical University of Denmark &mdash; does all of the above as a new component in the FEDORA Service Framework.  We extend our gratitude to Gert and his colleagues for contributing their work to the general FEDORA distribution as well as to <a href="http://www.deff.dk/" title="Danmarks Elektroniske Fag- og Forskningsbibliotek">DEFF, Denmark&#8217;s Electronic Research Library</a>, which funded the GSearch project.</p><p><h2>5. Journaling service</h2><br />Like a journaling file system or a journaling database, this capability allows one to capture all of the transactions applied to the repository and replay them against a secondary repository instance or to restore a repository from backup.</p><p><h2>6. Datastream checksums</h2><br />As part of its ingestion and maintenance functions, the FEDORA software can now calculate, store, and verify checksums of datastreams.  This helps ensure the integrity of the repository content, or at least detect when something goes wrong.</p><p><h2>7. Support for PostgreSQL</h2><br />In the battle between which relational database engine is best, FEDORA now supports most of the big ones out-of-the-box:  Oracle, MySQL, and new PostgreSQL.  Here at OhioLINK, we&#8217;ve started with MySQL but are considering a migration to PostgreSQL as our in-house, preferred RDBMS, so the timing of this announcement is great.</p><p><h2>8. Standard system logging with Log4J</h2><br />Put this one in the category of &#8220;playing nicely with others.&#8221;  We&#8217;ve already reaped the benefit of the refactored logging code in the client JAR file in a pre-release version of the code.</p><p><h2>9 and 10.  Bug fixes and many other enhancements</h2><br />The core code is evolving along a nice trajectory.  This is good to see for the health of the overall project!</p><p>Version 2.2 represents another monumental step towards the vision of a <b>F</b>lexible, <b>E</b>xtensible <b>D</b>igital <b>O</b>bject <b>R</b>epository <b>A</b>rchitecture.  Congratulations to the core developers for what sounds like is going to be a great release.<p style="padding:0;margin:0;font-style:italic;">The text was modified to update a link from http://comm.nsdl.org/pipermail/fedora-users/2006-December/002330.html to http://article.gmane.org/gmane.comp.cms.fedora-commons.user/2330/ on January 19th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://defxws2006.cvt.dk/fedoragsearch/ on January 19th, 2011.</p>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/fedora-2-point-2/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Managing a Gentoo Linux Server Configuration with Subversion, GLCU, and Trac</title><link>http://dltj.org/article/gentoo-config-subversion-glcu-trac/</link> <comments>http://dltj.org/article/gentoo-config-subversion-glcu-trac/#comments</comments> <pubDate>Fri, 22 Dec 2006 17:49:00 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[DRC]]></category> <category><![CDATA[Raw Technology]]></category> <category><![CDATA[Gentoo]]></category> <category><![CDATA[Subversion]]></category> <category><![CDATA[system administration]]></category><guid isPermaLink="false">http://dltj.org/2006/12/gentoo-config-subversion-glcu-trac/</guid> <description><![CDATA[Keeping track of configuration changes to servers is a tough job made tougher when some of the sysadmins work from home. Questions of who did what when and why can be exacerbated by the lack of physical proximity &#8212; in &#8230; <a href="http://dltj.org/article/gentoo-config-subversion-glcu-trac/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2006/12/gentoo-config-subversion-glcu-trac/"></abbr><p>Keeping track of configuration changes to servers is a tough job made tougher when some of the sysadmins work from home.  Questions of who did what when and why can be exacerbated by the lack of physical proximity &mdash; in other words, I can&#8217;t simply yell over the cubical wall to the colleague down the hall to ask him about the new package installed on the server.  Besides, that oral history tradition is difficult to maintain and harder to sustain as the number of machines grows.  This essay describes a practice for maintaining a <a href="http://www.gentoo.org/" title="Gentoo Linux distribution homepage">Gentoo Linux distribution</a> using GLCU, Subversion, and Trac that is lightweight (doesn&#8217;t impose a large burden on the sysadmin staff), effective (although it is lightweight it better documents and makes accessible the state of our systems over the oral history tradition), and cheap (no operating budget dollars were harmed in the creation of this process &mdash; only staff time overhead).</p><p><h2>Create an All-Encompassing Configurations Directory</h2><br />The first step is to put the system configuration files into a revision control system (RCS).  An RCS allows us to track the history of files by storing information about changes such as the date/time a change was made, what the change was, who made it, and a free-text field explaining why the change was made.  RCS systems are common for software development shops as a way to track changes to source code.  In this circumstance we are tracking changes to the text configuration files that make up the operating system and its components.  We are using the <a href="http://subversion.tigris.org/" title="Subversion RCS homepage">Subversion</a> RCS, but the same concepts apply whether you are using other systems (such as CVS or Arch).</p><p>The RCS will want to act on a single directory tree, but in most cases our configuration files are spread out over the file system.  Most are in /etc, but others exist elsewhere.  (The portage &#8220;world&#8221; file, a record of everything installed on your system, for instance, is in /var/lib/portage.)  What we do is create a directory called /server-rcs that will be managed by the RCS, and in that directory is copies or links to all of the configuration files on the system.</p><p><h3>Putting /etc (or any other directory) Under Version Control</h3><br />One of the things we&#8217;re going to want to do, obviously, is put the entire /etc directory into the RCS.  Ideally, we would simply put a link to /etc in /server-rcs.  Unfortunately, we can&#8217;t use the simple filesystem-based linking methods (soft links and hard links) because a) our RCS is smart enough to see the soft link and <a href="http://subversion.tigris.org/faq.html#symlinks" title="Subversion FAQ">records it as a soft link in the revision control database</a> rather than following the link to the contents of that directory; and b) one cannot make a hard link to a directory:</p><div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">/server-rcs # ln ../etc .
ln: `../etc': hard link not allowed for directory</pre></div></div><p>What we need to do instead is a trick using the &#8216;<span class="removed_link" title="http://gentoo-wiki.com/MAN_mount_8">mount</span>&#8216; command to <i>bind</i> one portion of the file system to another part.  From the mount MAN page:</p><blockquote><p>Since Linux 2.4.0 it is possible to remount part of the file hierarchy somewhere else. The call is</p><pre>mount --bind olddir newdir</pre><p>After this call the same contents is accessible in two places. One can also remount a single file (on a single file).</p></blockquote><p>So we can bind the entire /etc directory into our RCS space with this command:</p><div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #660033;">--bind</span> <span style="color: #000000; font-weight: bold;">/</span>etc <span style="color: #000000; font-weight: bold;">/</span>server-rcs<span style="color: #000000; font-weight: bold;">/</span>etc</pre></div></div><p>Better yet, we put this in our /etc/fstab file (also adding the /var/spool/cron directory as well):</p><pre>/etc                            /system-rcs/etc                         none    bind/var/spool/cron/crontabs        /system-rcs/var-spool-cron-crontabs     none    bind</pre><p>Since the /etc directory (and other directories) already exist, we&#8217;re going to have to play some games to get them into the repository.  For the trick do to this with Subversion, see <a href="http://subversion.tigris.org/faq.html#in-place-import" title="Subversion FAQ">the FAQ entry on in-place imports</a>.</p><p><h3>Handling Individual Files Under Version Control</h3><br />Not everything we want to track is in /etc or neatly packaged into directories.  Some application-specific configuration files, most notably web applications, exist somewhere else in the directory structure.  We want to track things like the &#8216;phpmyadmin&#8217; configuration file, for instance.</p><p>We could use the mount &#8216;bind&#8217; trick to put individual files into the /server-rcs space, but that seems overly complicated.  Our servers are generally configured with few filesystems, so in many cases the files we need to track in the RCS are within the same filesystem and we can use hard links to put them into the /server-rcs directory.  Another alternative is to write a cron job to copy configuration files into the /server-rcs directory, but then realize that this kind of revision control is one way &mdash; if we restore a previous version of a file from the RCS, we need to manually copy it back to the original location.</p><p>(On the other hand, using the mount &#8216;bind&#8217; method is a form of self-documenting the otherwise invisible hard links to files in the same filesystem.  For that reason, it might be worth considering that option.)</p><p><h3>Special Case:  /var/lib/portage/world</h3><br />One special case is the portage &#8216;<span class="removed_link" title="http://gentoo-wiki.com/MAN_emerge#lbAN">world</span>&#8216; file.  This file records all of the user-specified (e.g. non-profile) packages that have been installed on your Gentoo system.  Unfortunately, each time &#8216;<span class="removed_link" title="http://gentoo-wiki.com/MAN_emerge_1">emerge</span>&#8216; runs, the world file is rewritten and the order of package names is seemingly random.  This wrecks havoc with the &#8216;diff&#8217; function of the RCS &mdash; it seems like a lot more has changed than just the addition or removal of a package or two.</p><p>What we do instead is patch into a hook of the &#8216;emerge&#8217; command that will save a sorted copy of the world file into /server-rcs.  This patch goes into <code>/etc/portage/profile/profile.bashrc</code>:</p><div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${EBUILD_PHASE}</span>&quot;</span> == <span style="color: #ff0000;">&quot;setup&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #000000; font-weight: bold;">then</span>
        <span style="color: #c20cb9; font-weight: bold;">sort</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>portage<span style="color: #000000; font-weight: bold;">/</span>world <span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #000000; font-weight: bold;">/</span>server-rcs<span style="color: #000000; font-weight: bold;">/</span>misc<span style="color: #000000; font-weight: bold;">/</span>var-lib-portage-world
<span style="color: #000000; font-weight: bold;">fi</span></pre></div></div><p>Every time &#8216;emerge&#8217; goes through the &#8216;setup&#8217; mode when installing a package, it will run this sort command.  Note that there is no file locking going on here, so there is a remote chance that the /server-rcs version (but not the /var/lib/portage version) could get corrupted.  Such a problem is minor, though, and easily fixed.</p><p><h3>Importing into Subversion</h3><br />With the /server-rcs directory prepared, we now just need to get it into the RCS.  These are Subversion commands:</p><div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">svn</span> add <span style="color: #660033;">--force</span> <span style="color: #000000; font-weight: bold;">/</span>server-rcs
<span style="color: #c20cb9; font-weight: bold;">svn</span> checkin <span style="color: #660033;">--message</span> <span style="color: #ff0000;">&quot;Importing the configuration files for the server&quot;</span> <span style="color: #000000; font-weight: bold;">/</span>server-rcs https:<span style="color: #000000; font-weight: bold;">//</span>svn.repository.url<span style="color: #000000; font-weight: bold;">/</span>svn<span style="color: #000000; font-weight: bold;">/</span>configurations<span style="color: #000000; font-weight: bold;">/</span>server</pre></div></div><p>Because of the in-place import problem for pre-existing directories (described earlier), we likely had to create some of the repository directory structure already.  (In this example, we would have executed a <code>svn mkdir https://svn.repository.url/svn/configurations/server/etc</code> command already to &#8220;prime the pump&#8221; for adding /etc to the repository.)  In line #1, the &#8211;force option makes the &#8216;svn add&#8217; command continue the recursive directory parse to add files and directories to the RCS structure even if some component of those paths were already in the RCS structure.  Line #2 checks in our completed /server-rcs directory.</p><p><h2>Daily Usage</h2><br />With all of this setup done, it is finally time to make use of this configuration management infrastructure.  Doing so is pretty easy &mdash; work as you normally do when installing packages and making changes to configuration files.  (As you do so, you also have the added safety net of <code>svn revert <i>filename</i></code> should you make a mistake and want to go back to the previous version of a file.)  When you&#8217;ve done a defined chunk of work, simply run this command:</p><div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">svn</span> status <span style="color: #000000; font-weight: bold;">/</span>server-rcs
<span style="color: #c20cb9; font-weight: bold;">svn</span> checkin <span style="color: #000000; font-weight: bold;">/</span>server-rcs <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;Free-text description of why you made the changes.&quot;</span></pre></div></div><p>The first line will show you the files modified since the last check-in &#038;mdash hopefully only the files you intended to modify, although this is a good point to check to make sure an inadvertent change didn&#8217;t happen.  The second line will copy changes to the /server-rcs directory into the RCS along with the free-text note describing why you made the change.</p><p>Isn&#8217;t this great?  It is sort of self-documenting.  Not only to you have your brief description of what you did but you also have the exact changes made to the configuration files.  If a change doesn&#8217;t work out, you have easy access to past configurations that allow you to revert back to a previous state.  (Note, though, that we&#8217;re not saving actual applications in the RCS &mdash; you may have to recompile and install older versions of applications to get back to the previous state.)</p><p><h3>Portage Updates with GLCU</h3><br />We can make our system management lives even easier by using the semi-automated tool <a href="http://glcu.sourceforge.net/" title="Gentoo Linux Cron Update (GLCU) hompage">Gentoo Linux Cron Update</a> (GLCU).  This script breaks up the process of updating packages into two pieces.  The first that runs in the off-hours via cron that syncs the local portage copy, download and compiles updated packages, and stages ready-to-install binary distributions of those updates.  The second piece has the human interface:  seeing the list of updated packages in the staging area, selecting which to install, and prompting the sysadmin to install any updates as a result of Gentoo Linux Security Announcements (GLSAs).</p><p>See the <a href="http://glcu.sourceforge.net/" title="Gentoo Linux Cron Update (GLCU) hompage">project on SourceForge</a> for all of the details on installing, configuring and running GLCU.  We make one tweak to the GLCU configuration to prompt the sysadmin to complete all of the housekeeping chores:  running <code>dispatch-conf</code> to merge changes to configuration files and <code>revdep-rebuild</code> to make sure all of the applications using updated linked libraries are properly recompiled.  To do this, add a line to <code>/etc/conf.d/glcu</code>:</p><pre>updatetc: dispatch-conf &#038;&#038; revdep-rebuild -X -pv</pre><p>A typical update for us looks like:</p><pre># glcu /tmp/glcuUpdate-23112****************************************&gt;&gt; Welcome to glcu's easy update featurePrebuilt packages:------------------(  1 ) [binary     U ] app-editors/nano-2.0.1 [1.3.12-r1] USE="ncurses nls spell unicode  -debug -justify -minimal -slang"(  2 ) [binary     U ] media-libs/libsdl-1.2.11 [1.2.8-r1] USE="X esd* -aalib -alsa -arts  -dga -directfb -fbcon -ggi -libcaca -nas -noaudio -noflagstrip -nojoystick -novideo  -opengl -oss -svga -xinerama -xv (-pic%)" Do you want to install the prebuilt package(s) [Y/n]   (or you can either install only specified package number(s) #,     or NOT install package with -# and use i# for injecting)&gt; y[...pre-compiled packages are installed...]&gt;&gt;&gt; Auto-cleaning packages...&gt;&gt;&gt; No outdated packages were found on your system. * GNU info directory index is up-to-date.* IMPORTANT: 1 config files in /etc need updating.* Type emerge --help config to learn how to update config files.glsa's:  ['200612-03'](  1 ) 200612-03 [N] GnuPG: Multiple vulnerabilities ( app-crypt/gnupg ) Do you want to fix all glsa's now? [Y/n]    (or you can either install only specified glsa number(s) #,     or NOT install glsa with -# and use i# for injecting)&gt; y[...packages related to the GLSA are downloaded, compiled and installed...] Do you want to run dispatch-conf &#038;&#038; revdep-rebuild -X -pv now? [Y/n] &gt; y[...dispatch-conf and revdep-rebuild are run...]</pre><p>With the system nicely updated, we can check in all of the changes to the RCS with a note about what we did:</p><div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">svn</span> ci <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;After running 'glcu' to update app-editors/nano, media-libs/libsdl, and GLSA for app-crypt/gnupg&quot;</span></pre></div></div><p><h3>Tracking Configuration Changesets and Trouble Tickets with Trac</h3><br />So far we&#8217;ve done quite a lot to document changes to the configuration of our server.  What we&#8217;re missing is a nice way to view and track those changes over time.  Since everything is in the Subversion RCS, one way to accomplish this is to put a web interface (like ) on top of Subversion repository.  For just a little bit more effort and complexity, though, we can have a very nice documentation and issue tracking system bundled with the display of our configuration changes repository by using <a href="http://trac.edgewall.org/" title="The Trac Project - Trac">Trac</a>.</p><p>Trac is an open source wiki and issue tracking system for software development projects.  Its stated mission is to  &#8220;help developers write great software while staying out of the way.&#8221;  In this case we&#8217;ll be using it to help sysadmins manage complex systems while staying out of the way.  Trac is a web-based tool that &#8220;allow wiki markup in issue descriptions and commit messages, creating links and seamless references between bugs, tasks, changesets, files and wiki pages. A timeline shows all &#8230; events in order, making the acquisition of an overview of the [state of the system] and tracking progress very easy.&#8221;</p><p>Trac is synchronized with our Subversion source code repository, so the <a href="http://trac.edgewall.org/wiki/TracTimeline" title="TracTimeline help page from the Trac project">timeline of changes</a> (<a href="http://trac.edgewall.org/timeline" title="Timeline help page from the Trac project">demo</a>) shows each <a href="http://trac.edgewall.org/wiki/TracChangeset" title="TracChangeset help page from the Trac project">check in to the Subversion RCS</a> (<a href="http://trac.edgewall.org/changeset/4501" title="Demonstration of Trac Changesets">demo</a>), which can be tied to an <a href="http://trac.edgewall.org/wiki/TracTickets" title="TracTickets help page from the Trac project">issue ticket</a> (<span class="removed_link" title="Demonstration of Trac Issue Tickets">demo</span>) for a problem or task that is requested, worked on, then closed via simple wiki-like markup.  One can also <a href="http://trac.edgewall.org/wiki/TracBrowser" title="TracBrowser help page from the Trac project">browse through the stored changes</a> (<a href="http://trac.edgewall.org/browser/trunk/htdocs/css/trac.css?rev=4501" title="Demonstration of Trac RCS Browser">demo</a>) and look at a <a href="http://trac.edgewall.org/wiki/TracRevisionLog#InspectingChangesBetweenRevisions" title="TracRevisionLog - The Trac Project - Trac">graphical difference between any two revisions of a file</a> (<span class="removed_link" title="http://trac.edgewall.org/changeset?new=trunk%2Fhtdocs%2Fcss%2Ftrac.css%404501&amp;old=trunk%2Fhtdocs%2Fcss%2Ftrac.css%404390">demo</span>) but also review the <a href="http://trac.edgewall.org/wiki/TracRevisionLog" title="TracRevisionLog help page from the Trac project">log of check in messages</a> (<a href="http://trac.edgewall.org/log/trunk/htdocs/css/trac.css?rev=4501" title="Demonstration of Trac Revision Logs">demo</a>) associated with that file over time.</p><p><h2>Conclusion</h2><br />With a few tools and some modest changes to current system maintenance practices, the history of the configuration of machines can be documented and the changes viewed over time.  The changes in practices are designed to be very minimal and simple yet return a large payoff over time if consistently followed.  The practices also enhance communication between geographically dispersed staff tasked with managing the same platforms by regularly creating snapshots of the configuration state and documenting who did what changes and why.<p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to Demonstration of Trac Issue Tickets on December 30th, 2010.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://gentoo-wiki.com/MAN_emerge_1 on January 19th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://gentoo-wiki.com/MAN_mount_8 on January 19th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://gentoo-wiki.com/MAN_emerge#lbAN on January 19th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://trac.edgewall.org/changeset?new=trunk%2Fhtdocs%2Fcss%2Ftrac.css%404501&#038;old=trunk%2Fhtdocs%2Fcss%2Ftrac.css%404390 on January 19th, 2011.</p>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/gentoo-config-subversion-glcu-trac/feed/</wfw:commentRss> <slash:comments>15</slash:comments> </item> <item><title>Colorado Alliance of Research Libraries to build a consortial repository using FEDORA</title><link>http://dltj.org/article/coalliance-adr/</link> <comments>http://dltj.org/article/coalliance-adr/#comments</comments> <pubDate>Wed, 25 Oct 2006 16:38:33 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[DRC]]></category> <category><![CDATA[Economies of Scale]]></category> <category><![CDATA[Fedora]]></category> <category><![CDATA[Unified Content Repository]]></category> <category><![CDATA[coalliance_adr]]></category> <category><![CDATA[digital libraries]]></category> <category><![CDATA[library consortia]]></category><guid isPermaLink="false">http://dltj.org/2006/10/coalliance-adr/</guid> <description><![CDATA[On Friday, the Colorado Alliance of Research Libraries announced the creation of a consortium-wide digital repository project similar to that of the Ohio Digital Resource Commons.Colorado Alliance Digital Repository Project ApprovedThe Board of Directors of the Colorado Alliance of Research &#8230; <a href="http://dltj.org/article/coalliance-adr/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2006/10/coalliance-adr/"></abbr><p>On Friday, the Colorado Alliance of Research Libraries <a href="http://www.coalliance.org/index.php?option=com_content&#038;task=view&#038;id=187&#038;Itemid=103" title="Colorado Alliance of Research Libraries">announced the creation of a consortium-wide digital repository project</a> similar to that of the <a href="http://info.drc.ohiolink.edu/" title="403 Forbidden">Ohio Digital Resource Commons</a>.</p><blockquote><p><h2>Colorado Alliance Digital Repository Project Approved</h2><br /><em>The Board of Directors of the Colorado Alliance of Research Libraries has approved initial funding for a consortium-wide digital repository project at its October 19, 2006 meeting.</em></p><p>The Board of Directors of the Colorado Alliance of Research Libraries has approved initial funding for a consortium-wide digital repository project at its October 19, 2006 meeting.  The project will use the Fedora open source software which was selected after a long evaluation process by the Institutional Repository Implementation Team, chaired by John Culshaw from the University of Colorado at Boulder.</p><p>The Alliance Digital Repository (ADR) project allows the participating member libraries to develop a shared technical and development infrastructure to store, preserve and disseminate a whole variety of digital objects including images, text, audio, video, learning objects, data sets or any other kind of material.  The project will make use of open source tools developed by others in order to fast track functionality.  As new software is developed as part of the project it will also be made available to the open source community.</p><address>via <a href="http://www.earlham.edu/~peters/fos/2006_10_22_fosblogarchive.html#116172247445198709" title="Peter Suber, Open Access News">Peter Suber&#8217;s Open Access News</a></address></blockquote><p>Welcome to the party!</p>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/coalliance-adr/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Picking a Java Web Application Framework</title><link>http://dltj.org/article/java-framework/</link> <comments>http://dltj.org/article/java-framework/#comments</comments> <pubDate>Wed, 25 Oct 2006 15:16:21 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[DRC]]></category> <category><![CDATA[Raw Technology]]></category> <category><![CDATA[ejb3]]></category> <category><![CDATA[java]]></category> <category><![CDATA[programming]]></category> <category><![CDATA[seam]]></category> <category><![CDATA[spring framework]]></category><guid isPermaLink="false">http://dltj.org/2006/10/java-framework/</guid> <description><![CDATA[We&#8217;re beginning a new phase of our digital library development at OhioLINK and an oversimplification of one of the consequences of this new phase is that we will be developing more software from scratch rather than adapting stuff that we &#8230; <a href="http://dltj.org/article/java-framework/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2006/10/java-framework/"></abbr><p>We&#8217;re beginning a new phase of our digital library development at OhioLINK and an oversimplification of one of the consequences of this new phase is that we will be developing more software from scratch rather than adapting stuff that we find out there on the net.  (Another consequence of this new phase is our interest in <a href="http://dltj.org/tag/librarysoa">applying the Service-Oriented Architecture paradigm to library applications</a>.)  In previous phases, we were somewhat at the mercy of whatever development framework was used in the application we were adopting.  As we start this new development where we control more of our own destiny, we wanted to take a step back and look at the available frameworks to support our development efforts.  The options we identified at the start were plain Java servlets, Apache Struts, Spring Framework, and EJB3 with JBoss SEAM.</p><p>Our analysis is admittedly by proxy rather than through direct experience.  If we had more time, we would start our new phase in each one of these (with the associated learning curve for some of them) and pick the one that worked out the best.  We have neither the luxury of time nor of excess developer talent, so we looked at what others were saying, created some sample applications, and discussed our gut reactions to each option.  In the end, we decided to start with EJB3/SEAM.</p><p><h2>Summary of Options</h2></p><p>Over the years, the Java community has developed frameworks to support the creation of applications in the Java programming language.  These frameworks consist of a combination of code libraries, programming rules, and best practices that have evolved based on the research and experience of the developer community.  Just as almost no one designs, codes, debugs, and documents their own low-level file I/O libraries any more, these frameworks provide a level of abstraction over the raw programming language that enables developers to create better code faster.</p><p>Within the web application arena, arguably the earliest successful framework was Apache Struts.  It was one of the first frameworks to promote a <em>Model-View-Controller</em> (MVC) architecture: the <em>Model</em> represents the business or database code, the <em>View</em> represents the page design code, and the <em>Controller</em> represents the navigational code.  By creating these three layers, Struts promoted a practice of design and development away from commingling database code, page design code, and control flow code in the same JavaServer Pages files.  In practice it was found that unless these three concerns are separated, larger applications become difficult to maintain.</p><p>The latest revolution in design architectures is Dependency Injection (DI).  Sometimes also referred to as Inversion of Control (or IoC), it is a programming design pattern and architectural model in which the responsibility for object creation and object linking is removed from the code of the objects themselves.  As the term &#8220;Dependency Injection&#8221; may imply, it is the <em>framework</em> that instantiates the component objects and binds them to each other through the use of setters and/or constructors rather than the components linking themselves together.  In this pattern, the objects themselves become loosely coupled, allowing for a more dynamic and testable integration of the component objects.  The creation and binding of objects is defined in an XML configuration file (Spring Framework) or via Java Annotations (EJB3).</p><p>Two primary frameworks have emerged for the Dependency Injection paradigm:  Spring Framework and EJB3.  The Spring Framework is the grandparent of subsequent IoC efforts (including EJB3).  A <i>de facto</i> standard, it is widely used in the Java programming community with a large number of tools and documentation.  EJB3 is a formal specification adopted by participants in the Java Community Process for standardizing Java-related developments.  Coupled with the JBoss SEAM framework, the EJB3/SEAM combination is roughly on par with raw technical capabilities of the Spring Framework.  SEAM removes some of the complexity of raw EJB3 by providing and preconfiguring popular choices for views (JSF) and models (Hibernate) as well as integrated AJAX-based Remoting and jPBM.  Both promote the same MVC architecture as Struts.</p><p>The distinguishing characteristics are that Spring acts as an open integration tool at the expense of a complicated XML-based configuration process whereas EJB3/SEAM is simpler in its configuration and more restrictive in what other tools can be easily brought into the framework.  In other words, Spring has a wide array of choices for the various framework components and for the most part the developer must manage the integration; EJB3/SEAM lessens the complexity of the framework by limiting the choices available for the various components to only the most popular options.  Note that there is overlap between Spring and EJB3; the Pitchfork project allows for JSR-250 (Common Annotations) dependency injection and EJB 3.0 style interception as an add-on to the Spring framework.  One should also note that a full EJB3 implementation is a kind of superset to SEAM, and if the needs of our applications go beyond that of SEAM it is possible to reduce our dependency on the SEAM framework by beginning to integrate other choices (and managing that integration ourselves).</p><p>OhioLINK staff would have a learning curve associated with both Spring and EJB3/SEAM (and Apache Struts as well, although it has been discounted as an option as a mostly dead-end architecture at this point).  On the question of whether the learning curve is greater than the effort of doing things the &#8220;plain Java&#8221; way, one can point to the large number of developers who have made the leap to these frameworks and are arguably more productive for doing so.  Since we are beginning the development of a new code base, it seems to be the ideal time to start up that learning curve with the creation and deployment of a new service.  The learning curve might be easier for Spring than for EJB3/SEAM due to the wide variety of materials already produced for Spring, although the corporate backers of EJB3/SEAM seem to be filling this gap at a steady pace.  The learning curve for EJB3/SEAM may be shallower, though, because SEAM simplifies the configuration of the framework itself.</p><p>At our development team meeting yesterday, we decided that <strong>OhioLINK will adopt a Dependency Injection (DI) paradigm</strong> over use of Apache Struts and plain Java servlets because of the anticipated large productivity gains after the learning curve.  Of the two DI/IoP frameworks widely available now, we <strong>decided to adopt EJB3 coupled with JBoss SEAM</strong>.  The standards-driven nature of EJB3 reduces the risk of adopting a technology that may not be supported in the medium-term.  It is expected that JBoss SEAM will flatten the learning curve to make EJB3 more readily understood in the short term while providing a migration path to a broader EJB3 implementation (beyond the capabilities of SEAM) if needed in the future.  The Spring Framework, to its credit, also makes it possible to envelop EJB3 objects as part of a Spring-based application, which could smooth the transition to that framework should it become necessary.  We also understand that there is some risk of &#8220;vendor lock-in&#8221; by relying on JBoss SEAM &mdash; in our limited experience, applications seemed to deploy better under JBoss Application Server as opposed to a stock Apache Tomcat 5.5 installation.  On the other hand (if the &#8220;standards&#8221; nature of EJB3 is to be trusted), it should be possible to move our code to other application servers, leaving SEAM behind, with minimal changes.  We may also be able to further flatten the learning curve by buying a support contract with JBoss in the short- to medium-term.</p><p><h2>Details about the Candidates</h2></p><p><h3>Enterprise Java Beans 3 (EJB3)</h3></p><blockquote><p>The EJB 3.0 framework is a standard framework defined by the Java Community Process (JCP) and supported by all major J2EE vendors.  [The architecture of the Spring framework is based upon the Dependency Injection (DI) design pattern.]  Open source and commercial implementations of EJB 3.0 specifications are already available from JBoss and Oracle. EJB 3.0 makes heavy use of Java annotations.</p></blockquote><ul><li>Based on standards work (the Java Community Process)</li><li>&#8220;Configuration by default&#8221; using Java Annotations backed by more complicated XML configuration files, if needed</li><li>A more compact, rigidly-defined framework stack; easier configuration, but fewer choices</li><li>Brand new (recently ratified); fewer tools, books, tutorials available</li></ul><p><h3>JBoss SEAM</h3></p><blockquote><p>JBoss Seam is a powerful new application framework to build next generation Web 2.0 applications by unifying and integrating popular service oriented architecture (SOA) technologies like AJAX, Java Server Faces (JSF), Enterprise Java Beans (EJB3), Java Portlets and Business Process Management (BPM) and workflow.</p><p>Seam has been designed from the ground up to eliminate complexity at the architecture and the API level. It enables developers to assemble complex web applications with simple annotated Plain Old Java Objects (POJOs), componentized UI widgets and very little XML. The simplicity of Seam 1.0 will enable easy integration with the JBoss Enterprise Service Bus (ESB) and Java Business Integration (JBI) in the future.</p></blockquote><ul><li>Based on EJB3</li><li>Integrates together some of the most widely adopted components such as JavaServer Faces and Hibernate</li><li>Can reportedly be used outside of JBoss Application Server (direct experience show some problems with this)</li></ul><p><h3>Spring Framework</h3></p><blockquote><p>The Spring framework is a popular but non-standard open source framework. It is primarily developed by and controlled by Interface21 Inc. The architecture of the Spring framework is based upon the Dependency Injection (DI) design pattern. Spring can work standalone or with existing application servers and makes heavy use of XML configuration files.</p></blockquote><ul><li>Explicit configuration via XML file</li><li>More flexible than EJB3/SEAM in swapping in and out various modules; yet the decisions made early on limit the ability to swap in and out later.</li><li>Several years old; widely available tools, books, tutorials</li><li><i>De facto</i> standard of an open source community with benevolent control by a corporate entity.</li></ul><p><h3>Apache Struts</h3></p><blockquote><p>Apache Struts is a free open-source framework for creating Java web applications.</p></blockquote><ul><li>(Summary opinion) Generally seen as a deprecated framework; few new projects start with Struts.</li><li>Weak integration of new techniques such as AJAX.</li></ul><p><h3>Plain Java Servlet (No Framework)</h3></p><ul><li>Must build the entire application support layer (object data storage, presentation interfaces, helper functions, etc. from scratch).</li><li>No ready-made integration of new techniques such as AJAX.</li></ul><p><h2>Background Information</h2></p><ul><li><a href="http://www.devx.com/Java/Article/32314/1954?pf=true" title="Make the Right Decision with Our Side-by-Side Comparison of Spring and EJB 3.0">Make the Right Decision with Our Side-by-Side Comparison of Spring and EJB 3.0</a></li><li><a href="http://www.devx.com/Java/Article/32447/1954?pf=true" title="Make the Right Decision with Our Side-by-Side Comparison of Spring and EJB 3.0, Part 2">Make the Right Decision with Our Side-by-Side Comparison of Spring and EJB 3.0, Part 2</a></li><li><a href="http://www.devx.com/Java/Article/31327/1954?pf=true" title="Discover Seam and Sew Up Your Java Projects Faster than Ever">Discover Seam and Sew Up Your Java Projects Faster than Ever</a></li><li><a href="http://en.wikipedia.org/wiki/Dependency_injection" title="http://en.wikipedia.org/wiki/Dependency_injection">Dependency injection &#8211; Wikipedia, the free encyclopedia</a></li><li><a href="http://www.springsource.com/products/pitchfork/pitchfork-faq" title="Pitchfork FAQ<br /> &mdash;<br /> Interface21.com">Pitchfork project frequently asked questions</a></li><li><a href="http://weblogs.java.net/blog/bleonard/archive/2006/05/trying_out_jbos_2.html" title="Brian Leonard&#039;s Blog: Trying out JBoss&#039; Seam">Trying out JBoss&#8217; Seam (Brian Leonard&#8217;s Blog)</a></li><li><a href="http://wiki.jboss.org/wiki/Wiki.jsp?page=JBossSeamGettingStartedGuide" title="JBoss.com - Wiki - JBossSeamGettingStartedGuide">SEAM Getting Started Guide</a></li><li><span class="removed_link" title="http://seam.demo.jboss.com/">JBOSS-based SEAM demonstration site</span></li></ul><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://seam.demo.jboss.com/ on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;">The text was modified to update a link from http://interface21.com/pitchfork/pitchfork-faq.html to http://www.springsource.com/products/pitchfork/pitchfork-faq on January 19th, 2011.</p>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/java-framework/feed/</wfw:commentRss> <slash:comments>11</slash:comments> </item> <item><title>Why FEDORA?  Answers to the FEDORA Users Interview Survey</title><link>http://dltj.org/article/fedora-users-interview-survey/</link> <comments>http://dltj.org/article/fedora-users-interview-survey/#comments</comments> <pubDate>Fri, 15 Sep 2006 22:48:40 +0000</pubDate> <dc:creator>Peter Murray</dc:creator> <category><![CDATA[DRC]]></category> <category><![CDATA[Fedora]]></category> <category><![CDATA[Library SOA]]></category> <category><![CDATA[Unified Content Repository]]></category> <category><![CDATA[library service-oriented architecture]]></category><guid isPermaLink="false">http://dltj.org/2006/09/fedora-users-interview-survey/</guid> <description><![CDATA[The Fedora Outreach and Communications team is conducting a survey of the high-level sense of passion and commitment inherent in the Fedora community. I&#8217;ve posted some answers back to the FEDORA wiki on behalf of OhioLINK, and am also including &#8230; <a href="http://dltj.org/article/fedora-users-interview-survey/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<abbr class="unapi-id ignore noPrint" title="http://dltj.org/2006/09/fedora-users-interview-survey/"></abbr><p>The <span class="removed_link" title="http://www.fedora.info/wiki/index.php/Fedora_Outreach_User_Group">Fedora Outreach and Communications team</span> is <span class="removed_link" title="http://www.fedora.info/wiki/index.php/The_Fedora_Users_Interview_Survey">conducting a survey</span> of the high-level sense of passion and commitment inherent in the Fedora community.  I&#8217;ve posted some answers back to the FEDORA wiki on behalf of OhioLINK, and am also including the responses here as it fits into the &#8220;Why FEDORA?&#8221; series of blog postings.  (If you are reading this through a RSS news reader, I think you&#8217;ll have to actually come to the DLTJ website and scroll down to the bottom of this post to see the table of contents of the series.)  On with the responses!</p><p><h2>How did you hear about Fedora?</h2></p><p>I first remember hearing about FEDORA at a Coalition for Networked Information meeting in 2003. I only really remember it in passing because what was being presented was so radical that I didn&#8217;t appreciate what was being described.</p><p>I next encountered FEDORA during a conference call with the Internet2 Shibboleth core developers in mid-2004. The topic was enabling cross-repository access management &#8212; a topic that is still a challenge today (although the Shibboleth team is working on it). But that time I really started to catch on with what the FEDORA team was doing, and started paying closer attention.</p><p><h2>Why did you chose Fedora?</h2></p><p>When I arrived as project manager to the Ohio Digital Resource Commons (DRC) project in January 2005, OhioLINK was on the path to expand their existing Documentum installation to include a hosted institutional repository service. The Ohio DRC Steering Committee reviewed and accepted a proposal to use FEDORA as the foundation of this new hosted institutional repository service primarily because OhioLINK would be working with peers to develop the service (rather than working in isolation as likely would have happened with a Documentum-based solution).</p><p><h2>Were there economic advantages to your project/org. in selecting Fedora?</h2></p><p>The open source, free-to-license nature of FEDORA was definitely an advantage. It allowed us to turn grant funding that would have been used to pay for additional Documentum modules and licenses into to salary for temporary-hire programmers. In that way we felt that we had a better control over our destiny by creating the application code ourselves rather than relying on consultants.</p><p><h2>What is Fedora&#8217;s unique role in your production system?</h2></p><p>OhioLINK is beginning to look at the Service Oriented Architecture (SOAs) software design paradigm, and FEDORA fits right into that model as the content repository for all of our digital objects. If anything, FEDORA&#8217;s nature as a best-of-breed content repository &#8212; and nothing else &#8212; encourages us to think along the likes of sooner than we might otherwise have done.</p><p><h2>Is there one specific Fedora attribute that enables your project/organization to accomplish your overall goals.</h2></p><p>The fact that FEDORA is completely agnostic to what is contained in a datastream &#8212; be it audio, video, image, dataset, PDF, Dublin Core, MODS, EAD, FGDC, TEI, etc. &#8212; means that we can truly pursue a goal of managing all of our content in one place. The robustness of the content repository functions allows us to consider more interesting questions such as how this different content is ultimately presented to the end user.</p><p><h2>Do you see yourself as an active member of the Fedora community? Why?</h2></p><p>Yes. FEDORA represents the ability to take long-term control over the destiny of our digital objects. If, for some reason, the existing core developers at Cornell and UVa disappeared, a vibrant user community (OhioLINK included) can pick up the task of maintaining the software for the collective good. And if no one but OhioLINK is left in a &#8220;FEDORA community&#8221; our job of migrating out of it, should we desire to do so, is eased by the fact that we have the full view of the source code to help us move content and services to a new platform.</p><p><h2>What would inspire you to become more involved?</h2></p><p>It would take the existence of more hours in the day, I&#8217;m afraid!</p><p><h2>What should be the mission of an ongoing Fedora organization?</h2></p><p>A FEDORA community should first and foremost inspire communication among users of the FEDORA software. Almost all of us are working with extremely limited resources, and it weakens our collective effort if there is duplicated work underway. This communication should include not only developers but also users of the software.<p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://www.fedora.info/wiki/index.php/The_Fedora_Users_Interview_Survey on January 13th, 2011.</p><p style="padding:0;margin:0;font-style:italic;" class="removed_link">The text was modified to remove a link to http://www.fedora.info/wiki/index.php/Fedora_Outreach_User_Group on January 13th, 2011.</p><div class='series_links'><a href='http://dltj.org/article/description-datastream/' title='Best Practice Proposal for a DESCRIPTION Datastream'>Previous in series</a></div>]]></content:encoded> <wfw:commentRss>http://dltj.org/article/fedora-users-interview-survey/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> </channel> </rss>
<!-- Served from: dltj.org @ 2012-02-11 12:51:37 by W3 Total Cache -->
