Home
About Us
Download
Information
Components Repository
Sandbox Components
Jakarta Community
Project Docs
|
Charter
|
ÀÚÄ«¸£Å¸ Commons¸¦ À§ÇÑ ´ÙÀ½ÀÇ ÇåÀåÀÌ ÀÚÄ«¸£Å¸ ÇÁ·ÎÁ§Æ®°ü¸®À§¿øȸ¿¡ ÀÇÇÏ¿© 2001³â 3¿ù 19ÀÏ¿¡ ½ÂÀεǾú´Ù.
(0) ±Ùº»
¾ÆÆÄÄ¡-ÀÚ¹Ù¿Í ÀÚÄ«¸£Å¸´Â ¿ø·¡ Çϳª·Î Å©°Ô ¹ÀÌ´Â Á¦Ç°-º£À̽ºµå ¼ºêÇÁ·ÎÁ§Æ®µéÀ» È£½ºÆ®Çß´Ù. ±×·¯³ª ÀÚ¹Ù ¾ð¾î´Â ÆÐÅ°Áö-º£À̽ºÀÌ°í,
À̵é Á¦Ç°ÀÇ ´ëºÎºÐÀº ¾µ¸¸ÇÑ ¸¹Àº À¯Æ¿¸®Æ¼µéÀ» °¡Áø´Ù. ¾à°£ÀÇ ÇÁ·ÎÁ§Æ®µéÀº ½º½º·Î¸¦ ±ú±â ½ÃÀÛÇß°í, ±×µéÀº µ¶¸³ÀûÀ¸·Î »ç¿ëµÉ ¼ö ¾ø¾ú´Ù.
µ¶¸³ÀûÀÎ ÆÐÅ°Áöµé·Î ¿Ü·Ó°Ô ¸¸µé¾îÁö°í À¯ÁöµÇ¾î¿Â ÀÚÄ«¸£Å¸ ¼ºêÇÁ·ÎÁ§Æ®µéÀÌ ÀÌ °úÁ¤À» ÃËÁøÇÏ°í °¡À̵åÇϱâÀ§ÇÏ¿© Á¦¾ÈÇÑ´Ù.
(1) ¼ºêÇÁ·ÎÁ§Æ®ÀÇ ¹üÀ§
¼ºêÇÁ·ÎÁ§Æ®´Â ÀÚ¹Ù¾ð¾î·Î ¾²¿©Áø ÆÐÅ°ÁöµéÀ» ¸¸µé°í À¯ÁöÇÒ °ÍÀÌ´Ù. ¼¹ö-°ü°èµÈ °³¹ß¿¡ »ç¿ëÀ» ÀǵµÇÑ, ±×¸®°í ¾î¶² ·¹À̾îÀÇ ÇÁ·ÎÁ§Æ®³ª
ÇÁ·¹ÀÓ¿öÅ©¿¡µµ µ¶¸³ÀûÀ¸·Î ¾µ ¼ö ÀÖ°Ô ¼³°èµÈ ÆÐÅ°Áöµé ¸»ÀÌ´Ù. °¢ ÆÐÅ°ÁöµéÀº Ä¿´Ù¶õ ÀÚÄ«¸£Å¸ Á¦Ç°°ú °°Àº ¹æ½ÄÀ¸·Î °ü¸®µÉ °ÍÀÌ´Ù. ´õ ³ª¾Æ°£
¸ñÇ¥´Â, ¼ºêÇÁ·ÎÁ§Æ®´Â ¶ÇÇÑ ÀÚÄ«¸£Å¸ Ä¿¹ÌÆ®µéÀ» À§ÇÑ ÀÛ¾÷°ø°£À» È£½ºÆ®ÇÏ°í Àç»ç¿ë°¡´ÉÇÑ ÆÐÅ°ÁöµéÀÇ ¸¶½ºÅÍ À妽º°¡ ÀÚÄ«¸£Å¸ Á¦Ç°µé¿¡ ¿¬°èµÉ
°ÍÀÌ´Ù.
(1.5) ¼ºêÇÁ·ÎÁ§Æ®µé°ú »óÈ£ÀÛ¿ë
(1.5.1) ¸ð·¡¹Ú½º
ÀÌ ¼ºêÇÁ·ÎÁ§Æ®´Â »õ·Î¿î ÆÐÅ°Áö ¶Ç´Â ´Ù¸¥ ÇÁ·ÎÁ§Æ®µéÀ» À§ÇÑ ÀÛ¾÷°ø°£À¸·Î¼, ¸ðµç ÀÚÄ«¸£Å¸ Ä¿¹ÌÅÍ¿¡°Ô À¯¿ëÇÑ CVSÀúÀå¼Ò¸¦ È£½ºÆ®ÇÒ
°ÍÀÌ´Ù. °ø°ø¿¡ ¸±¸®ÁîÇϱâ Àü¿¡, ¿©±â¿¡¼ °³¹ßµÈ Äڵ峪 ¹®¼µéÀº ÀÚÄ«¸£Å¸ ¼ºêÇÁ·ÎÁ§Æ®¿¡ ÀÇÇÏ¿© ÁöÁöµÇ¾î¾ß ÇÑ´Ù. ÁöÁöÇÏ´Â ¼ºêÇÁ·ÎÁ§Æ®(µé)´Â
ÀÌ Äڵ庣À̽º°¡ Á×À» ¶§±îÁö ÄÚµå¿Í ¹®¼¸¦ ¹èÆ÷ÇÒ °ÍÀÌ´Ù.
(1.5.2) µð·ºÅ丮
ÀÌ ¼ºê ÇÁ·ÎÁ§Æ®´Â ¶ÇÇÑ ´Ù¸¥ ÀÚÄ«¸£Å¸ ¼ºêÇÁ·ÎÁ§Æ®µé°ú ASF ÇÁ·ÎÁ§Æ®µé¿¡ ¿¬°üµÈ, °ø°ø¿¡ À¯¿ëÇÑ ÆÐÅ°Áöµé°ú ´Ù¸¥ ¸®¼Ò½ºµéÀÇ ¸ñ·ÏÀ» ¿°ÅÇÒ
°ÍÀÌ´Ù. ÀÌ´Â Bugzilla¿Í Jyve¿Í °°Àº, download.com,
cpan.org, ¶Ç´Â SourceForge.net
ÀÇ ±â´É°ú À¯»çÇÑ µ¿ÀûÀÎ Ä«Å»·Î±×°¡ µÉ °ÍÀÌ´Ù. »õ·Î¿î ¿£Æ®¸®°¡ ÀÚÄ«¸£Å¸ Ä¿¹ÌÅ͵é°ú °³¹ßÀÚ ±×¸®°í »ç¿ëÀڵ鿡 ÀÇÇÏ¿© Ãß°¡µÉ ¼ö ÀÖ°í, °ø°ø¿¡·Î
¹èÆ÷µÇ±âÀü¿¡ Ä¿¹ÌÅÍ¿¡ ÀÇÇÏ¿© ½ÂÀ뵃 °ÍÀÌ´Ù.
(2) ÀÌ ¼ºêÇÁ·ÎÁ§Æ®°¡ ¾îµð·ÎºÎÅÍ Á¤ÂøµÇ¾ú´Â°¡¸¦ ¸»ÇÑ´À Ãʱ⠼ҽº¸¦ Á¤ÀÇÇϱâ
Ãʱâ ÆÐÅ°ÁöµéÀº Á¸ÀçÇÏ´Â ASF ÄÚµå±â¹Ý¿¡ ±âÃ浃 °ÍÀÌ´Ù. ÀÌ´Â µ¥ÀÌŸ¼Ò½º/µ¥ÀÌŸº£À̽º Ç®µéÀ» À§ÇÑ ¼ºñ½ºµéÀ» Á¦°øÇÏ´Â °Íµé°ú XML
±¸¼º¹°, ¸Þ¼¼Áö ¸®¼Ò½ºµé°ú i18n, JNDI ¿Í Naming, ±×¸®°í Testing SuiteµéÀ» Æ÷ÇÔÇÑ´Ù. Ãʱâ Ä¿¹ÌÅ͵éÀº Å×½ºÆà ½¬Æ®µé°ú
¼¹öÇÁ·ÎÁ§Æ® ÀÎÇÁ¶ó±îÁö µ¥ÀÌŸº£À̽º ¿¬°á Ç® ÆÐÅ°ÁöµéÀ» ù¹ø°·Î ¸¸µé°í À¯ÁöÇѴٴµ¥ µ¿ÀÇÇÑ´Ù.
(3) âÁ¶µÈ Ãʱâ ÀÚÄ«¸£Å¸ ¸®¼Ò½º¸¦ Á¤ÀÇÇϱâ
(3.1) ¸ÞÀϸµ ¸®½ºÆ®(µé)
jakarta-commons
(3.2) CVS ÀúÀå¼Ò
jakarta-commons
jakarta-commons-sandbox
(3.3) Bugzilla
program - commons
components - Web site, Directory, dbcp
(3.4) Jyve FAQ (when available)
commons-general
commons-dbcp
commons-sandbox
(4) Ãʱâ Ä¿¹ÌÅ͵éÀÇ ±¸¼ºÀ» Á¤ÀÇÇϱâ
Morgan Delagrange
Ted Husted
Conor MacNeill
Geir Magnusson Jr.
Costin Manolache
Remy Maucherat
Craig R. McClanahan
Ignacio J. Ortega
Rodney Waldhoff
David Weinrich
|
|
Guidelines
|
Note :
- ÀÌ´Ù,°¡Áø´Ù,ÀÏ °ÍÀÌ´Ù,ÇؾßÇÑ´Ù - ÇʼöÀûÀÎ °Í.
- ÀÏÁöµµ ¸ð¸¥´Ù, ÇؾßÇÏÁö ¾Ê°Ú´Â´Ù,°Ý·ÁµÈ´Ù - ¼±ÅÃÀûÀ̳ª ÃßõµÇ´Â °Í.
- Àç¿ëµÇ°í ¹èÆ÷µÇ´Â ÁÖ¿ä ´ÜÀ§´Â ÆÐŰ¡ÀÌ´Ù.
- ÆÐÅ°Áö ¶óÀ̺귯¸®´Â ÇÁ·¹ÀÓ¿öÅ©°¡ ¾Æ´Ï¶ó µ¶¸³ÀûÀ¸·Î »ç¿ëµÇµµ·Ï µðÀÚÀÎµÈ ÄÄÇÁ³ÍÆ®µéÀÇ ÁýÇÕÀÌ´Ù.
- °¢ ÆÐÅ°µéÀº ¸íÈ®È÷ Á¤ÀÇµÈ ¸ñÀû°ú ¹üÀ§ ±×¸®°í API¸¦ °¡Á®¾ß ÇÑ´Ù. -- ÇÑ °¡Áö¶óµµ ÀßÇ϶ó, ±×¸®°í Â÷º°¼º¸¦ °ßÁöÇ϶ó!
- °¢ ÆÐÅ°ÁöµéÀº ÀÚ½ÅÀÇ ±Ç¸®¸¦ °¡Áø Á¦Ç°À¸·Î ´ë¿ì¹Þ´Â´Ù.
- °¢ ÆÐÅ°ÁöµéÀº ÀÚ½ÅÀÇ »óÅÂÈÀÏ°ú ¹èÆ÷ÀÏÁ¤, ¹öÀü, QA Å×½ºÆ®µé,¹®¼,¸ÞÀϸµ ¸®½ºÆ®,¹ö±×Ä«Å×°í¸®,±×¸®°í °³º°ÀûÀÎ JARÀ»
°¡Áø´Ù.
- °¢ ÆÐÅ°ÁöµéÀº ¾î¶°ÇÑ ¿ÜºÎÀûÀÎ(´Ù¸¥ Commons ÆÐÅ°Áöµé·Î Æ÷ÇÔÇÏ¿© ±×¸®°í ¿ä±¸µÇ´Â °¡Àå À̸¥ JDK¹öÀüµµ) ÀÇÁ¸¼ºµµ
¸íÈ®È÷ ¼³Á¤ÇØ¾ß ÇÑ´Ù.
- ¼±ÅÃÀûÀÎ ±×¸®°í ¿ÜºÎ¾÷üÀÇ Äڵ忡 ´ëÇÑ ¿ÜºÎÀÇÁ¸¼ºÀº ÃÖ¼Òȵžî¾ß ÇÑ´Ù.
- ¸ðµç ÇʼöÀûÀÎ ÀÇÁ¸¼ºÀº, '½Ã½ºÅÛ ¿¬Àå'À» ±â¼úÇÏ°í ÀÖ´Â JDK 1.3¿¡¼ ÃßõµÇ´Â ¹æ¹ýÀ» »ç¿ëÇÏ¿© ÆÐÅ°Áö JAR¾ÈÀÇ
MANIFEST.MF¿¡ ±â·ÏµÇ¾î¾ß ÇÑ´Ù.
- °¢ ÆÐÅ°ÁöµéÀº ÀÚ½ÅÀÇ »óÅ ÈÀÏ¿¡ ÀÚ½ÅÀÇ È°µ¿ÇÏ°í ÀÖ´Â Ä¿¹ÌÅ͵éÀÇ ¸®½ºÆ®¸¦ À¯ÁöÇØ¾ß ÇÑ´Ù.
- ÆÐÅ°ÁöµéÀº ¹öÀü´×(versioning), QA Å×½ºÆ®µé, ±×¸®°í µð·ºÅ丮 ·¹À̾ƿôµé¿¡ Ç¥ÁØ ½ºÅ°¸¶¸¦ »ç¿ëÇØ¾ß Çϸç, ±×¸®°í
¹®¼µé°ú ¾ÈÆ® ºôµåÈÀϵéÀ» À§ÇØ °øÅë Æ÷¸ËÀ» »ç¿ëÇØ¾ß ÇÑ´Ù.
- ÆÐÅ°ÁöµéÀº ÅëÀÏµÈ ÆÐÅ°Áö ±¸Á¶Æ®¸®³»¿¡ ¸ÂÃß¾î¾ß ÇÑ´Ù.
- ÀϹÝÀûÀ¸·Î, ÆÐÅ°ÁöµéÀº ÀÎÅÍÆäÀ̽º¿Í ±× ÀÎÅÍÆäÀ̽ºÀÇ Çϳª ¶Ç´Â Ãß°¡ÀÇ ±¸ÇöÀ» Á¦°øÇϰųª ÀÌ¹Ì »ç¿ëÁßÀÎ ´Ù¸¥ ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇؾß
ÇÑ´Ù.
- ÆÐÅ°ÁöµéÀº ±â´ÉÀûÀÎ À̸§µéÀ» µå·¯³»¾ß ÇÑ´Ù. ±¸ÇöµéÀº ´õ 'Àç¹ÌÀÖ´Â' ¸íĪÀ» °í¸¦ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù.
- ÆÐÅ°ÁöµéÀº ÄÚ¾î ¿ÀºêÁ§Æ®µé·Î¼ ÀÚ¹ÙºóÁ ¶Ç´Â ÀÚ¹Ùºó-½ºÅ¸ÀÏ api¸¦ »ç¿ëÇϵ簡 ¶Ç´Â ¼±ÅÃÀûÀÎ ÀÚ¹Ùºó ·¦ÆÛ¸¦ Á¦°øÇÒ °ÍÀ» °Ý·ÁÇÑ´Ù.
- ¿ÜºÎ ¼³Á¤ ÈÀϵéÀº ÁÁÁö ¾Ê´Ù. ±×·¯³ª ¸¸¾à ÇÊ¿äÇÏ´Ù¸é, XML Æ÷¸Ë ÈÀϵéÀÌ ¼³Á¤ ¿É¼ÇÀ» À§ÇØ ¼±È£µÈ´Ù.
- °¢ ÆÐÅ°Áö´Â ¼ºêÇÁ·ÎÁ§Æ® À¥ »çÀÌÆ®»óÀÇ ÀÚ½ÅÀÇ ÆäÀÌÁöÀ§¿¡¼ È£½ºÆ®µÇ¾îÁú °ÍÀÌ´Ù. ±×¸®°í ¶ÇÇÑ ¸¶½ºÅÍ µð·ºÅ丮¿¡¼ À妽ºµÇ¾î
Áú °ÍÀÌ´Ù.
- ¼ºêÇÁ·ÎÁ§Æ® µð·ºÅ丮´Â ¶ÇÇÑ ¹èÆ÷¸ÅÄ«´ÏÁòÀ» Á¦°øÇÒ °ÍÀÌ´Ù, ¶Ç´Â ÆÐÅ°Áöµé°ú ¿¬°üµÈ ¸®¼Ò½ºµéÀÇ Ä«Å»·Î±×°¡ Á¦°øµÉ °ÍÀÌ´Ù.
- The subproject will also host a top-level 'general' mailing list in addition
to any lists for specific packages.
- The subproject will also provide a single JAR of all stable package releases.
It may also provide a second JAR with a subset of only JDK 1.1 compatible
releases. A gump of nightly builds will also be provided.
- Volunteers become committers to this subproject in the same way they are
entered to any Jakarta subproject. Being a committer in another Jakarta
subproject is not a prerequisite.
- Each committer has karma to all the packages, but committers are required
to add their name to a package's status file before their first commit to
that package.
- The committers shall elect a committee of three committers to provide
general oversight, in the style of the Jakarta PMC.
- New packages may be proposed to the Jakarta Commons mailing list. To be
accepted, a package proposal must receive majority approval of the subproject
committers. Proposals are to identify the rationale for the package, its
scope, its interaction with other packages and products, the Commons resources,
if any, to be created, the initial source from which the package is to be
created, and the initial set of committers.
- As stated in the Jakarta guidelines, an action requiring majority
approval must receive at least 3 binding +1 votes and more +1 votes
than -1 votes.
- It is expected that the scope of packages may sometimes overlap.
- Anyone may propose a new package to the Commons, and list themselves as
the initial committers for the package. The vote on the proposal is then
also a vote to enter new committers to the subproject as needed.
- A CVS repository will be available to all Jakarta committers as a workplace
for new packages or other projects. Before release to the public, code or
documentation developed here must be sponsored by Jakarta subproject. The
sponsoring subproject(s) will distribute the code or documentation along
with the rest of their codebase.
- The subproject catalog will also list packages and resources available
to the public related to other Jakarta subprojects and ASF projects.
- As a Jakarta subproject, the Commons adopts all other guidelines and procedures
of Jakarta and the Apache Software Foundation, as they may be amended from
time to time.
|
|
Example Package Proposal
|
Proposal for Database
Connection Pool Package
(0) rationale
Many Jakarta products support interaction with a relational database. Creating a new connection for each user can be time consuming (often requiring multiple seconds of clock time), in order to perform a database transaction that might take milliseconds. Opening a connection per user can be unfeasible in a
publicly-hosted Internet application where the number of simultaneous users can be be very large. Accordingly, developers often wish to share a "pool" of open connections between all of the application's current users. The number of users actually performing a request at any given time is usually a very small percentage of the total number of active users, and during request processing is the only time that a database connection is required. The application itself logs into the DBMS, and a handles any user account issues internally.
There are several Database Connection Pools already available, both within Jakarta products and elsewhere.
A Commons package would give committers an opportunity to coordinate their efforts to
create and maintain a efficient, feature-rich package
under the ASF license.
(1) scope of the package
The package shall create and maintain a database connection pool package written in the Java language to be distributed under the ASF license. The package shall be available as a pseudo-JDBC driver and via a DataSource interface. The package shall
also support multiple logins to multiple database systems, reclamation of stale or dead connections, testing for valid connections, PreparedStatement pooling, and other features.
(1.5) interaction with other packages
Subclasses of the package should also be able to :
- be configured via an external file (e.g. Turbine), and
- expose its status, exceptions, or other events to an external logging system (e.g. Log4)..
(2) identify the initial source for the package
The initial codebase was contributed by Rodney Waldhoff from a working project and can be distributed under the Apache license. The source is available as dbpool.jar from < http://www.webappcabaret.com/rwald/dbcp/ >
(2.1) identify the base name for the package
org.apache.commons.dbcp
(3) identify any Jakarta-Commons resources to be created
(3.1) mailing list
Until traffic justifies, the package will use the Jakarta-Commons list for communications.
(3.2) CVS repositories
For the time being, the package will use a root branch of the Jakarta-Commons CVS.
(3.3) Bugzilla
The package should be listed as a component of under the Jakarta-Commons Bugzilla entry.
(3.4) Jyve FAQ (when available)
commons-dbcp
(4) identify the initial set of committers to be listed in the Status File.
Morgan Delagrange
Geir Magnusson Jr.
Craig R. McClanahan
Rodney Waldhoff
David Weinrich
|
|
FAQ
|
What are the actual requirements for a Commons package?
Most of the guidelines are advisory and meant to describe 'best practices'.
The hard requirements boil down to 'clearly declare your API and dependencies'.
Or, taken from the guidelines:
3. Each package must have a clearly defined purpose, scope, and API --
Do one thing well, and keep your contracts.
4.1. Each package must clearly specify any external dependencies, including any other Commons packages, and the earliest JDK version required.
4.1.2. All necessary dependencies must be recorded in the MANIFEST.MF file of the package JAR, in the manner recommended in the JDK 1.3 documentation describing 'system extensions'.
Of course, the other requirement is that the authors submit a proposal to the Commons committers for approval.
Why not have a separate CVS tree for each package?
It's possible that we may, but the decision should be deferred until we have more packages to manage.
For now, we just ask that a Commons committer enter their name in the Status File of a package before making their first commit/
Should other Jakarta subprojects move their utility packages to the Commons?
They are welcome to do so. If they would like to experiment with refactoring a package outside their own CVS tree, they can setup shop in the Commons sandbox. Any Jakarta committer is entitled to write access to this CVS repository upon request. They
could then decide to propose the package to the Commons, and thereby become committers to the Commons, or to move it back to their own CVS, and just list it in the Commons directory where other developers and users can find it.
What will be listed in the Commons directory?
Any package or other resource that is related to a Jakarta product may be entered into the directory. This will be a dynamic application, like Bugzilla or Jyve. Users and developers can complete an online form with their entry, which will be reviewed
by a Commons committer before public release. Jakarta committers may have a higher level of access so that their entry goes online without review.
Why not just enroll all the Jakarta committers in the Commons?
If Jakarta adopts an open-door policy for all its subprojects, then of course the Commons will follow suit.
We do have an open-door policy for the sandbox CVS (jakarta-commons-sandbox). Any Jakarta committer is entitled to write access to the sandbox upon request, no vote required, no questions asked. Just subscribe to jakarta-commons-sandbox, and request
authorization.
Why not just do this within Avalon, or another existing subproject?
Avalon is a large subproject that is being refactored. It's possible that the charter of one of the ensuing pieces may overlap with the Commons.
The focus of the Commons is squarely and solely on developing packages that can be reused by multiple products, both within and without Jakarta. To garner the interest of committers, it is important that the Commons and each of its packages be perceived as an
independent entity. Since this is a volunteer meritocracy, the perception of committers is vital. No subproject can succeed without the earnest support of individual committers.
It is our firm position that the Commons will attract more committers on its own than if it were aligned with any existing subproject. What "committers will commit to" has to be the prime consideration. Darwin has been trying to tell us that; it's time we listened.
|
|
Resources
|
From the Elements of Java Style - 6. Packaging Conventions
Rules and Principles only - commentary omitted (buy the book!)
104. Place types that are commonly used, changed, and released together, or mutually dependant on each other, into the same package.
- The Common Reuse Principle - A package consists of classes you reuse together. If you use one of the classes in the package, you use all of them.
- The Common Closure Principle - A package consists of classes, all closed against the same kind of changes. A change that affects the package affects all the classes in that package
- The Reuse/Release Equivalence Principle - The unit of reuse is the unit of release. Effective reuse requires tracking of releases from a change control system. The package is the effective unit of reuse and release.
- The Acyclic Dependencies Principle - The dependency structure between packages must be a direct acyclic graph; there must be no cycles in the dependency structure.
105. Isolate volatile classes and interfaces in separate packages.
106. Avoid making packages that are difficult to change dependent on packages that are easy to change.
- The Stable Dependencies Principle - The dependencies between packages should be orientated in the direction of increasing stability. A package should only depend on packages more stable than it is.
107. Maximize abstraction to maximize stability.
- The Stable Abstractions Principle - The stability exhibited by a package is directly proportional to its level of abstraction. The more abstract a package is, the most stable it tends to be. The more concrete a package is, the more unstable
it tends to be.
108. Capture high-level design and architecture as stable abstractions organized into stable packages.
For more about these rules, and 103 others - get the book - highly recommended.
|
|
|