<style>
/* Changing the layout to use less space for mobiles */
@media screen and (max-device-width: 480px), screen and (-webkit-min-device-pixel-ratio: 2) {
#email-body { min-width: 30em !important; }
#email-page { padding: 8px !important; }
#email-banner { padding: 8px 8px 0 8px !important; }
#email-avatar { margin: 1px 8px 8px 0 !important; padding: 0 !important; }
#email-fields { padding: 0 8px 8px 8px !important; }
#email-gutter { width: 0 !important; }
}
</style>
<div id="email-body">
<table id="email-wrap" align="center" border="0" cellpadding="0" cellspacing="0" style="background-color:#f0f0f0;color:#000000;width:100%;">
<tr valign="top">
<td id="email-page" style="padding:16px !important;">
<table align="center" border="0" cellpadding="0" cellspacing="0" style="background-color:#ffffff;border:1px solid #bbbbbb;color:#000000;width:100%;">
<tr valign="top">
<td bgcolor="#003366" style="background-color:#003366;color:#ffffff;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;line-height:1;"><img src="http://jira.qos.ch/s/en_USet69y6/731/19/_/jira-logo-scaled.png" alt="" style="vertical-align:top;" /></td>
</tr><tr valign="top">
<td id="email-banner" style="padding:32px 32px 0 32px;">
<table align="left" border="0" cellpadding="0" cellspacing="0" width="100%" style="width:100%;">
<tr valign="top">
<td style="color:#505050;font-family:Arial,FreeSans,Helvetica,sans-serif;padding:0;">
<img id="email-avatar" src="http://jira.qos.ch/secure/useravatar?avatarId=10122" alt="" height="48" width="48" border="0" align="left" style="padding:0;margin: 0 16px 16px 0;" />
<div id="email-action" style="padding: 0 0 8px 0;font-size:12px;line-height:18px;">
<a class="user-hover" rel="rmayfiel" id="email_rmayfiel" href="http://jira.qos.ch/secure/ViewProfile.jspa?name=rmayfiel" style="color:#326ca6;">Rich Mayfield</a>
commented on <img src="http://jira.qos.ch/images/icons/newfeature.gif" height="16" width="16" border="0" align="absmiddle" alt="New Feature"> <a style='color:#326ca6;text-decoration:none;' href='http://jira.qos.ch/browse/LOGBACK-719'>LOGBACK-719</a>
</div>
<div id="email-summary" style="font-size:16px;line-height:20px;padding:2px 0 16px 0;">
<a style='color:#326ca6;text-decoration:none;' href='http://jira.qos.ch/browse/LOGBACK-719'><strong>Provide a mechanism to specify an appender factory class</strong></a>
</div>
</td>
</tr>
</table>
</td>
</tr>
<tr valign="top">
<td id="email-fields" style="padding:0 32px 32px 32px;">
<table border="0" cellpadding="0" cellspacing="0" style="padding:0;text-align:left;width:100%;" width="100%">
<tr valign="top">
<td id="email-gutter" style="width:64px;white-space:nowrap;"></td>
<td>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr valign="top">
<td colspan="2" style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 16px 0;width:100%;">
<div class="comment-block" style="background-color:#edf5ff;border:1px solid #dddddd;color:#000000;padding:12px;">Yes, logback would instantiate the the component factory itself and it would need to be visible to logback's classloader. The idea I'm advocating is to keep logback from having to know anything about the various OSGi bundles that implement Appender (and other) interfaces. Logback, in this case, would delegate to an OSGi bundle that is listening for other ComponentFactory implementations.
<br/>
<br/>
The deployment model looks something like the following:
<br/>
<br/>
1) Bundle A has an implementation of ComponentFactory - com.acme.logging.ComponentFactoryImpl. This bundle also registers an OSGi service listener that keeps track of any implementations of ComponentFactory that application bundles register. ComponentFactoryImpl will delegate to the implementations of ComponentFactory to create logback objects.
<br/>
<br/>
2) Bundle B is a fragment bundle with a host of ch.qos.logback-classic. It includes an Export-Package of com.acme.logging. This allows logback's classloader to see com.acme.logging.ComponentFactoryImpl.
<br/>
<br/>
3) Bundle C is an application bundle that includes an implementation of an appender - com.acme.appenders.MyAppender. It includes an implementation of ComponentFactory and registers this as an OSGi service.
<br/>
<br/>
4) Bundle D is another application bundle that has a logback.xml that includes:
<br/>
<br/>
<configuration>
<br/>
<componentFactory class="com.acme.logging.ComponentFactoryImpl"/>
<br/>
<appender name="MyAppender" class="com.acme.appenders.MyAppender">
<br/>
...
<br/>
</appender>
<br/>
...
<br/>
</configuration>
<br/>
<br/>
Bundles A & B live in Eclipse Virgo's kernel region. In fact, I would propose that these become a part of Virgo's medic rather than introducing anything new.
<br/>
<br/>
Bundles C & D would be an example of how to provide an appender without having to change Virgo's configuration. This would allow one to dynamically add appenders and other logback implementations using a whiteboard pattern.
<br/>
<br/>
By the way, this first came up and was proposed through the Eclipse Virgo forum. For reference only: <a href="http://www.eclipse.org/forums/index.php/mv/msg/357043/879420/#msg_879420">http://www.eclipse.org/forums/index.php/mv/msg/357043/879420/#msg_879420</a>
<br/>
<br/>
I actually have a working implementation of all of the above bundles as examples. It's actually pretty straightforward, as was the enhancement to logback. I'll try to carve out some time to include those in my github repository. Hopefully that will make the intent more clear.
<br/>
</div>
<div style="color:#505050;padding:4px 0 0 0;"> </div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td><!-- End #email-page -->
</tr>
<tr valign="top">
<td style="color:#505050;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:10px;line-height:14px;padding: 0 16px 16px 16px;text-align:center;">
This message is automatically generated by JIRA.<br />
If you think it was sent incorrectly, please contact your <a style='color:#326ca6;' href='http://jira.qos.ch/secure/ContactAdministrators!default.jspa'>JIRA administrators</a>.<br />
For more information on JIRA, see: <a style='color:#326ca6;' href='http://www.atlassian.com/software/jira'>http://www.atlassian.com/software/jira</a>
</td>
</tr>
</table><!-- End #email-wrap -->
</div><!-- End #email-body -->