You can subscribe to this list here.
| 2003 |
Jan
|
Feb
(55) |
Mar
(100) |
Apr
(203) |
May
(330) |
Jun
(190) |
Jul
(302) |
Aug
(323) |
Sep
(197) |
Oct
(245) |
Nov
(490) |
Dec
(330) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2004 |
Jan
(194) |
Feb
(400) |
Mar
(416) |
Apr
(415) |
May
(359) |
Jun
(381) |
Jul
(491) |
Aug
(311) |
Sep
(291) |
Oct
(273) |
Nov
(355) |
Dec
(266) |
| 2005 |
Jan
(306) |
Feb
(303) |
Mar
(520) |
Apr
(346) |
May
(255) |
Jun
(221) |
Jul
(171) |
Aug
(247) |
Sep
(147) |
Oct
(125) |
Nov
(165) |
Dec
(65) |
| 2006 |
Jan
(90) |
Feb
(53) |
Mar
(121) |
Apr
(103) |
May
(113) |
Jun
(103) |
Jul
(104) |
Aug
(67) |
Sep
(78) |
Oct
(82) |
Nov
(78) |
Dec
(70) |
| 2007 |
Jan
(77) |
Feb
(76) |
Mar
(63) |
Apr
(30) |
May
(47) |
Jun
(41) |
Jul
(44) |
Aug
(44) |
Sep
(49) |
Oct
(33) |
Nov
(25) |
Dec
(21) |
| 2008 |
Jan
(45) |
Feb
(13) |
Mar
(15) |
Apr
(12) |
May
(9) |
Jun
(33) |
Jul
(30) |
Aug
(7) |
Sep
(20) |
Oct
(17) |
Nov
(20) |
Dec
(10) |
| 2009 |
Jan
(8) |
Feb
(5) |
Mar
(12) |
Apr
(17) |
May
(19) |
Jun
(97) |
Jul
(77) |
Aug
(33) |
Sep
(24) |
Oct
(41) |
Nov
(16) |
Dec
(32) |
| 2010 |
Jan
(24) |
Feb
(14) |
Mar
(50) |
Apr
(71) |
May
(70) |
Jun
(64) |
Jul
(45) |
Aug
(62) |
Sep
(32) |
Oct
(4) |
Nov
(12) |
Dec
(2) |
| 2011 |
Jan
(1) |
Feb
(3) |
Mar
(4) |
Apr
(3) |
May
(6) |
Jun
(1) |
Jul
(4) |
Aug
(3) |
Sep
(4) |
Oct
(6) |
Nov
(3) |
Dec
(3) |
| 2012 |
Jan
(4) |
Feb
(8) |
Mar
(6) |
Apr
(10) |
May
(2) |
Jun
(3) |
Jul
(11) |
Aug
(10) |
Sep
(4) |
Oct
|
Nov
(1) |
Dec
(1) |
| 2013 |
Jan
(4) |
Feb
(1) |
Mar
(9) |
Apr
(1) |
May
(8) |
Jun
(2) |
Jul
(5) |
Aug
(2) |
Sep
|
Oct
(3) |
Nov
(10) |
Dec
(8) |
| 2014 |
Jan
(3) |
Feb
(12) |
Mar
(9) |
Apr
(12) |
May
(2) |
Jun
|
Jul
(3) |
Aug
(1) |
Sep
(1) |
Oct
(4) |
Nov
|
Dec
(2) |
| 2015 |
Jan
(1) |
Feb
(3) |
Mar
(4) |
Apr
(9) |
May
(2) |
Jun
(2) |
Jul
|
Aug
(2) |
Sep
(7) |
Oct
(9) |
Nov
(7) |
Dec
(9) |
| 2016 |
Jan
(7) |
Feb
(5) |
Mar
(5) |
Apr
(5) |
May
(8) |
Jun
(4) |
Jul
(5) |
Aug
(4) |
Sep
(6) |
Oct
(7) |
Nov
(2) |
Dec
(3) |
| 2017 |
Jan
(7) |
Feb
(8) |
Mar
(7) |
Apr
(3) |
May
(4) |
Jun
(3) |
Jul
(5) |
Aug
(8) |
Sep
(4) |
Oct
(2) |
Nov
(3) |
Dec
|
| 2018 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
| 2019 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
| 2021 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2022 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
|
| 2024 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
| 2025 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
(2) |
Aug
(5) |
Sep
(2) |
Oct
|
Nov
|
Dec
(1) |
| 2026 |
Jan
(1) |
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: Claudio D'A. <cla...@ob...> - 2004-07-15 13:46:25
|
I've deployed the minimal application (see the spring's sample). There isn't Quarts, ibatis or hibernate. There is a controller with a test.jsp only. I don't understand about memory leak, weark or soft referance but I've see that CachedIntrospectionResults is referenced by CachedIntrospectionResults.classCache and there are 2 instances (org.springframework.context.support.ResourceBundleMessageSource and org.springframework.web.servlet.DispatcherServlet) Where I can call the java.beans.Introspector.flushCaches()? Please help. After 20 redeploy Tomcat goes in OutOfMemory and ELS craches At 15.17 15/07/2004 +0200, you wrote: >If this happens with Spring 1.0.2, it is typically caused by *other* code >that causes a leak. The ClassLoader is then still around, also showing >Spring classes like CachedIntrospectionResults. This is not Spring's >fault: Spring classes just keep hanging around as a side effect. > >Try calling "java.beans.Introspector.flushCaches()" on application >shutdown. This is a typical source of such leaks: The JavaBeans >Introspector might still refer to application classes. This is not caused >by Spring: It's rather other libraries that use the Introspector, for >example Quartz. > >Juergen > > >________________________________ > >Von: spr...@li... im Auftrag von >Rod Johnson >Gesendet: Do 15.07.2004 14:38 >An: spr...@li... >Betreff: Re: [Springframework-developer] CachedIntrospectionResults >classCache leak > > > >Claudio > >What version of Spring is your analysis against? > >R > >----- Original Message ----- >From: "Claudio D'Angelo" <cla...@ob...> >To: <spr...@li...> >Sent: Thursday, July 15, 2004 10:26 AM >Subject: [Springframework-developer] CachedIntrospectionResults classCache >leak > > > > Hi, > > I'm analyzing with OptimizeIt my web application: > > when I redeploy the application I note that instances of > > CachedIntrospectionResults still in memory and for any redeploy the > > instances raise. > > > > >------------------------------------------------------- >This SF.Net email is sponsored by BEA Weblogic Workshop >FREE Java Enterprise J2EE developer tools! >Get your free copy of BEA WebLogic Workshop 8.1 today. >http://ads.osdn.com/?ad_id=4721&alloc_id=10040&op=click >_______________________________________________ >Springframework-developer mailing list >Spr...@li... >https://lists.sourceforge.net/lists/listinfo/springframework-developer > > > > >------------------------------------------------------- >This SF.Net email is sponsored by BEA Weblogic Workshop >FREE Java Enterprise J2EE developer tools! >Get your free copy of BEA WebLogic Workshop 8.1 today. >_______________________________________________ >Springframework-developer mailing list >Spr...@li... >https://lists.sourceforge.net/lists/listinfo/springframework-developer Grazie e buon lavoro ---------- Claudio D'Angelo Software Consultant ObjectWay S.p.A. Via G.A. Boltraffio 7 20159 Milano (MI) http://www.objectway.it -- La presente comunicazione potrebbe contenere informazioni riservate e/o protette da segreto professionale ed e' indirizzata esclusivamente ai destinatari della medesima qui indicati. Se avete ricevuto per errore la presente comunicazione, siete invitati a segnalarcelo, rispondendo a questo stesso indirizzo di e-mail, e a cancellare il presente messaggio dal Vostro sistema. E' strettamente proibito e potrebbe essere fonte di violazione di legge qualsiasi uso, comunicazione, copia o diffusione dei contenuti di questa comunicazione da parte di chi la abbia ricevuta per errore o in violazione degli scopi della presente. Il messaggio e' stato analizzato alla ricerca di virus o contenuti pericolosi ed e' risultato NON infetto. |
|
From: Claudio D'A. <cla...@ob...> - 2004-07-15 13:19:35
|
1.0.2. The tests are running into Tomcat 5.0.25 and Weblogic 6.1 (in future will run in WLS 8.1,too). At 13.38 15/07/2004 +0100, you wrote: >Claudio > >What version of Spring is your analysis against? > >R > >----- Original Message ----- >From: "Claudio D'Angelo" <cla...@ob...> >To: <spr...@li...> >Sent: Thursday, July 15, 2004 10:26 AM >Subject: [Springframework-developer] CachedIntrospectionResults classCache >leak > > > > Hi, > > I'm analyzing with OptimizeIt my web application: > > when I redeploy the application I note that instances of > > CachedIntrospectionResults still in memory and for any redeploy the > > instances raise. > > > > >------------------------------------------------------- >This SF.Net email is sponsored by BEA Weblogic Workshop >FREE Java Enterprise J2EE developer tools! >Get your free copy of BEA WebLogic Workshop 8.1 today. >http://ads.osdn.com/?ad_id=4721&alloc_id=10040&op=click >_______________________________________________ >Springframework-developer mailing list >Spr...@li... >https://lists.sourceforge.net/lists/listinfo/springframework-developer Grazie e buon lavoro ---------- Claudio D'Angelo Software Consultant ObjectWay S.p.A. Via G.A. Boltraffio 7 20159 Milano (MI) http://www.objectway.it -- La presente comunicazione potrebbe contenere informazioni riservate e/o protette da segreto professionale ed e' indirizzata esclusivamente ai destinatari della medesima qui indicati. Se avete ricevuto per errore la presente comunicazione, siete invitati a segnalarcelo, rispondendo a questo stesso indirizzo di e-mail, e a cancellare il presente messaggio dal Vostro sistema. E' strettamente proibito e potrebbe essere fonte di violazione di legge qualsiasi uso, comunicazione, copia o diffusione dei contenuti di questa comunicazione da parte di chi la abbia ricevuta per errore o in violazione degli scopi della presente. Il messaggio e' stato analizzato alla ricerca di virus o contenuti pericolosi ed e' risultato NON infetto. |
|
From: <jue...@we...> - 2004-07-15 13:18:54
|
If this happens with Spring 1.0.2, it is typically caused by *other* = code that causes a leak. The ClassLoader is then still around, also = showing Spring classes like CachedIntrospectionResults. This is not = Spring's fault: Spring classes just keep hanging around as a side = effect. =20 Try calling "java.beans.Introspector.flushCaches()" on application = shutdown. This is a typical source of such leaks: The JavaBeans = Introspector might still refer to application classes. This is not = caused by Spring: It's rather other libraries that use the Introspector, = for example Quartz. =20 Juergen =20 ________________________________ Von: spr...@li... im Auftrag = von Rod Johnson Gesendet: Do 15.07.2004 14:38 An: spr...@li... Betreff: Re: [Springframework-developer] CachedIntrospectionResults = classCache leak Claudio What version of Spring is your analysis against? R ----- Original Message ----- From: "Claudio D'Angelo" <cla...@ob...> To: <spr...@li...> Sent: Thursday, July 15, 2004 10:26 AM Subject: [Springframework-developer] CachedIntrospectionResults = classCache leak > Hi, > I'm analyzing with OptimizeIt my web application: > when I redeploy the application I note that instances of > CachedIntrospectionResults still in memory and for any redeploy the > instances raise. ------------------------------------------------------- This SF.Net email is sponsored by BEA Weblogic Workshop FREE Java Enterprise J2EE developer tools! Get your free copy of BEA WebLogic Workshop 8.1 today. http://ads.osdn.com/?ad_id=3D4721&alloc_id=3D10040&op=3Dclick _______________________________________________ Springframework-developer mailing list Spr...@li... https://lists.sourceforge.net/lists/listinfo/springframework-developer |
|
From: <jue...@we...> - 2004-07-15 13:15:08
|
Colin, =20 What about simply invoking =20 getHibernateTemplate().setAllowCreate(false); =20 in the initDao implementation of your subclass? =20 Juergen =20 ________________________________ Von: spr...@li... im Auftrag = von Colin Sampaleanu Gesendet: Do 15.07.2004 05:34 An: spr...@li... Betreff: [Springframework-developer] HibernateDaoSupport Juergen, The existing code in HibernateDaoSupport created a HibernateTemplate with the allowCreate flag as true by default, and as the setSessionFactory method where the template was created was final, there was no way to override this. I have created a protected field called defaultTemplateAllowCreateValue (true by default to maintain existing behaviour), which a user HibernateDaoSupport subclass may override. Additionally, I have added a setter for this default value, so a DAO instance can be set to true or false specifically (without having to subclass). This value does not affect any HibernateTemplate passed in explicitly. Colin ------------------------------------------------------- This SF.Net email is sponsored by BEA Weblogic Workshop FREE Java Enterprise J2EE developer tools! Get your free copy of BEA WebLogic Workshop 8.1 today. http://ads.osdn.com/?ad_id=3D4721&alloc_id=3D10040&op=3Dclick _______________________________________________ Springframework-developer mailing list Spr...@li... https://lists.sourceforge.net/lists/listinfo/springframework-developer |
|
From: Rod J. <rod...@in...> - 2004-07-15 12:39:07
|
Claudio What version of Spring is your analysis against? R ----- Original Message ----- From: "Claudio D'Angelo" <cla...@ob...> To: <spr...@li...> Sent: Thursday, July 15, 2004 10:26 AM Subject: [Springframework-developer] CachedIntrospectionResults classCache leak > Hi, > I'm analyzing with OptimizeIt my web application: > when I redeploy the application I note that instances of > CachedIntrospectionResults still in memory and for any redeploy the > instances raise. |
|
From: Claudio D'A. <cla...@ob...> - 2004-07-15 09:26:14
|
Hi,
I'm analyzing with OptimizeIt my web application:
when I redeploy the application I note that instances of
CachedIntrospectionResults still in memory and for any redeploy the
instances raise.
I think that the problem is caused by ClassLoader that don't flush the
static variables.
To remove the problem I've modify the code of
CachedIntrospectionResults.forClass method:
if (results == null) {
// can throw BeansException
results = new CachedIntrospectionResults(clazz);
boolean cacheSafe = isCacheSafe(clazz);
if (logger.isDebugEnabled()) {
logger.debug("Class [" + clazz.getName() +
"] is " + (!cacheSafe ? "not " : "") + "cache-safe");
}
classCache.put(clazz, new WeakReference(results));
}
With the WeakReference the instances are flushed when I redeploy the
application.
Are there problems with this modification (in production/test environment)?
Grazie e buon lavoro
----------
Claudio D'Angelo
Software Consultant
ObjectWay S.p.A.
Via G.A. Boltraffio 7
20159 Milano (MI)
http://www.objectway.it
--
La presente comunicazione potrebbe contenere informazioni riservate e/o
protette
da segreto professionale ed e' indirizzata esclusivamente ai destinatari della
medesima qui indicati. Se avete ricevuto per errore la presente comunicazione,
siete invitati a segnalarcelo, rispondendo a questo stesso indirizzo di
e-mail,
e a cancellare il presente messaggio dal Vostro sistema. E' strettamente
proibito
e potrebbe essere fonte di violazione di legge qualsiasi uso, comunicazione,
copia
o diffusione dei contenuti di questa comunicazione da parte di chi la abbia
ricevuta per errore o in violazione degli scopi della presente.
Il messaggio e' stato analizzato alla ricerca di virus o contenuti pericolosi
ed
e' risultato NON infetto.
|
|
From: Colin S. <col...@ex...> - 2004-07-15 03:30:25
|
Juergen, The existing code in HibernateDaoSupport created a HibernateTemplate with the allowCreate flag as true by default, and as the setSessionFactory method where the template was created was final, there was no way to override this. I have created a protected field called defaultTemplateAllowCreateValue (true by default to maintain existing behaviour), which a user HibernateDaoSupport subclass may override. Additionally, I have added a setter for this default value, so a DAO instance can be set to true or false specifically (without having to subclass). This value does not affect any HibernateTemplate passed in explicitly. Colin |
|
From: Dmitriy K. <dko...@ru...> - 2004-07-14 11:53:56
|
Thank you James. Dmitriy. jas...@ma... wrote: > On 13 Jul 2004, at 18:25, Dmitriy Kopylenko wrote: > >> James, >> >> is preliminary Geronimo-Spring source in CVS? > > > Yes - though I added it to Geronimo, as its Geronimo implementation > detail dependent and should, for the most part, be just reusing > standard public Spring APIs... > > http://cvs.apache.org/viewcvs.cgi/incubator-geronimo/modules/spring/ > > I've not yet got the integration test running which tries to deploy a > Spring application inside the Spring-Geronimo container > > James > ------- > http://radio.weblogs.com/0112098/ > > > > ------------------------------------------------------- > This SF.Net email sponsored by Black Hat Briefings & Training. > Attend Black Hat Briefings & Training, Las Vegas July 24-29 - digital > self defense, top technical experts, no vendor pitches, unmatched > networking opportunities. Visit www.blackhat.com > _______________________________________________ > Springframework-developer mailing list > Spr...@li... > https://lists.sourceforge.net/lists/listinfo/springframework-developer |
|
From: <jas...@ma...> - 2004-07-14 05:46:28
|
On 13 Jul 2004, at 18:25, Dmitriy Kopylenko wrote: > James, > > is preliminary Geronimo-Spring source in CVS? Yes - though I added it to Geronimo, as its Geronimo implementation detail dependent and should, for the most part, be just reusing standard public Spring APIs... http://cvs.apache.org/viewcvs.cgi/incubator-geronimo/modules/spring/ I've not yet got the integration test running which tries to deploy a Spring application inside the Spring-Geronimo container James ------- http://radio.weblogs.com/0112098/ |
|
From: Mason, R. <ros...@vi...> - 2004-07-14 00:02:59
|
VGhhbmtzIERtaXRyaXkgOikNCiANCisxIGZvciBpbmNsdWRpbmcgdGhpcy4gIFJpZ2h0IG5vdyBJ IGhhdmUgdG8gZGVsY2FyZSBhIEJQUCBpbiBhZGRpdGlvbiB0byBteSBVTU9NYW5hZ2VyRmFjdG9y eUJlYW4ganVzdCB0byBzZXQgdGhlIG5hbWVzIG9mIHRoZSBvYmplY3RzIGluIHRoZSBtYW5hZ2Vy LiBJdCB3b3VsZCBiZSBtdWNoIGNsZWFuZXIgKGxlc3MgY29uZmlndXJhdGlvbikgaWYgSSBjb3Vs ZCByb2xsIHRoZSB0d28gdG9nZXRoZXIuDQogDQpDaGVlcnMsDQogDQpSb3NzDQogDQogDQogLS0t LS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCkZyb206IHNwcmluZ2ZyYW1ld29yay1kZXZlbG9wZXIt YWRtaW5AbGlzdHMuc291cmNlZm9yZ2UubmV0IFttYWlsdG86c3ByaW5nZnJhbWV3b3JrLWRldmVs b3Blci1hZG1pbkBsaXN0cy5zb3VyY2Vmb3JnZS5uZXRdT24gQmVoYWxmIE9mIERtaXRyaXkgS29w eWxlbmtvDQpTZW50OiBXZWRuZXNkYXksIDE0IEp1bHkgMjAwNCAxMjo1OSBBTQ0KVG86IHNwcmlu Z2ZyYW1ld29yay1kZXZlbG9wZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0DQpTdWJqZWN0OiBSZTog W1NwcmluZ2ZyYW1ld29yay1kZXZlbG9wZXJdIEludGVyY2VwdGluZyBiZWFuIGNyZWF0aW9uPw0K DQoNCg0KUm9zcywNCg0KSSBpbnZlc3RpZ2F0ZWQgdGhlIGlzc3VlIGFuZCBmb3VuZCB0aGF0IEZh Y3RvcnlCZWFuIGFuZCBCZWFuUG9zdFByb2Nlc3NvciBkbyBub3Qgd29yayB3ZWxsIHRvZ2V0aGVy LiBJJ3ZlIGNyZWF0ZWQgYSB2ZXJ5IHNpbXBsZSB0ZXN0IGNhc2UgdG8gcHJvdmUgdGhhdC4gVGhl IHJlYXNvbiBpcyB0aGF0IGluIEFic3RyYWN0QXBwbGljYXRpb25Db250ZXh0LnJlZ2lzdGVyQmVh blBvc3RQcm9jZXNzb3JzKCkgaXQgY2FsbHMgdGhlICpnZXRCZWFuKCkqIHRvIHBvcHVsYXRlIHRo ZSBpbnRlcm5hbCBDb2xsZWN0aW9uIG9mIEJlYW5Qb3N0UHJvY2Vzc29ycyBhbmQgdGhlbiByZWdp c3RlciB0aGVtICJnbG9iYWxseSIgYnkgY2FzdGluZyB0byAuLi4gd2VsbCwgQmVhblBvc3RQcm9j ZXNzb3IuIEluIGNhc2Ugb2YgRmFjdG9yeUJlYW4sIGdldEJlYW4oKSBjYWxsIGFjdHVhbGx5IGdl dHMgdGhlIHVuZGVybHlpbmcgaW5zdGFuY2Ugb2YgdGhlIGJlYW4sIG5vdCB0aGUgRmFjdG9yeUJl YW4gaXRzZWxmLCB0aGVyZWZvcmUgcmVzdWx0aW5nIGluIENsYXN0Q2FzdEV4Y2VwdGlvbjoNCg0K cHJpdmF0ZSB2b2lkIHJlZ2lzdGVyQmVhblBvc3RQcm9jZXNzb3JzKCkgdGhyb3dzIEJlYW5zRXhj ZXB0aW9uIHsNCiAgICAgICAgU3RyaW5nW10gYmVhbk5hbWVzID0gZ2V0QmVhbkRlZmluaXRpb25O YW1lcyhCZWFuUG9zdFByb2Nlc3Nvci5jbGFzcyk7ICAgICAgICANCiAgICAgICAgaWYgKGJlYW5O YW1lcy5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICBMaXN0IGJlYW5Qcm9jZXNzb3JzID0gbmV3 IEFycmF5TGlzdCgpOw0KICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiZWFuTmFtZXMu bGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgICAgICBiZWFuUHJvY2Vzc29ycy5hZGQoZ2V0QmVh bihiZWFuTmFtZXNbaV0pKTsgDQogICAgICAgICAgICB9DQogICAgICAgICAgICBDb2xsZWN0aW9u cy5zb3J0KGJlYW5Qcm9jZXNzb3JzLCBuZXcgT3JkZXJDb21wYXJhdG9yKCkpOw0KICAgICAgICAg ICAgZm9yIChJdGVyYXRvciBpdCA9IGJlYW5Qcm9jZXNzb3JzLml0ZXJhdG9yKCk7IGl0Lmhhc05l eHQoKTspIHsNCiAgICAgICAgICAgICAgICBnZXRCZWFuRmFjdG9yeSgpLmFkZEJlYW5Qb3N0UHJv Y2Vzc29yKChCZWFuUG9zdFByb2Nlc3NvcilpdC5uZXh0KCkpOw0KICAgICAgICAgICAgfQ0KICAg ICAgICB9DQogfQ0KDQpJJ3ZlIGNoYW5nZWQgdGhpcyBjb2RlIHRvIHRha2UgaW50byBjb25zaWRl cmF0aW9uIHRoZSBCZWFuUG9zdFByb2Nlc3Nvci1GYWN0b3J5QmVhbiBjb21iaW5hdGlvbjoNCg0K cHJpdmF0ZSB2b2lkIHJlZ2lzdGVyQmVhblBvc3RQcm9jZXNzb3JzKCkgdGhyb3dzIEJlYW5zRXhj ZXB0aW9uIHsNCiAgICAgICAgU3RyaW5nW10gYmVhbk5hbWVzID0gZ2V0QmVhbkRlZmluaXRpb25O YW1lcyhCZWFuUG9zdFByb2Nlc3Nvci5jbGFzcyk7ICAgICAgICANCiAgICAgICAgaWYgKGJlYW5O YW1lcy5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICBMaXN0IGJlYW5Qcm9jZXNzb3JzID0gbmV3 IEFycmF5TGlzdCgpOw0KICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiZWFuTmFtZXMu bGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgICAgICB0cnl7ICAgIA0KICAgICAgICAgICAgICAg ICAgICBiZWFuUHJvY2Vzc29ycy5hZGQoZ2V0QmVhbigiJiIgKyBiZWFuTmFtZXNbaV0pKTsgLy9D aGVjayBmb3IgRmFjdG9yeUJlYW4NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg Y2F0Y2goQmVhbklzTm90QUZhY3RvcnlFeGNlcHRpb24gZSl7DQogICAgICAgICAgICAgICAgICAg IGJlYW5Qcm9jZXNzb3JzLmFkZChnZXRCZWFuKGJlYW5OYW1lc1tpXSkpOyAvL0l0J3Mgbm90IHRo ZSBGYWN0b3J5QmVhbg0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAg ICAgIENvbGxlY3Rpb25zLnNvcnQoYmVhblByb2Nlc3NvcnMsIG5ldyBPcmRlckNvbXBhcmF0b3Io KSk7DQogICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gYmVhblByb2Nlc3NvcnMuaXRlcmF0 b3IoKTsgaXQuaGFzTmV4dCgpOykgew0KICAgICAgICAgICAgICAgIGdldEJlYW5GYWN0b3J5KCku YWRkQmVhblBvc3RQcm9jZXNzb3IoKEJlYW5Qb3N0UHJvY2Vzc29yKWl0Lm5leHQoKSk7DQogICAg ICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCldvcmtzIHdlbGwuDQoNCkp1ZXJnZW4sIGlm IHRoZXJlIGlzIGEgY29tcGVsbGluZyBuZWVkIGZvciB0aGlzIGZlYXR1cmUgKEJQUC9GQiBjb21i aW5hdGlvbikgSSdkIGJlIGhhcHB5IHRvIGNvbW1pdCB0aGlzLg0KDQpSZWdhcmRzLA0KRG1pdHJp eS4NCg0KDQoNCg0KTWFzb24sIFJvc3Mgd3JvdGU6DQoNCg0KRG1pdHJpeSwNCg0KIA0KDQpzb3Jy eSBmb3IgdGhlIGRlbGF5IDopDQoNCg0KDQphcHBDdHggLSANCg0KaHR0cDovL2N2cy5zb3VyY2Vm b3JnZS5uZXQvdmlld2N2cy5weS9tdWxlL211bGUtZXh0cmFzL3NwcmluZy9zcmMvdGVzdC9jb25m L211bGUtZXZlbnRzLWFwcC1jb250ZXh0LnhtbD9yZXY9MS4zIDxodHRwOi8vY3ZzLnNvdXJjZWZv cmdlLm5ldC92aWV3Y3ZzLnB5L211bGUvbXVsZS1leHRyYXMvc3ByaW5nL3NyYy90ZXN0L2NvbmYv bXVsZS1ldmVudHMtYXBwLWNvbnRleHQueG1sP3Jldj0xLjMmdmlldz1hdXRvPiAmdmlldz1hdXRv DQoNCg0KDQpCUFANCg0KDQoNCmh0dHA6Ly9jdnMuc291cmNlZm9yZ2UubmV0L3ZpZXdjdnMucHkv bXVsZS9tdWxlLWV4dHJhcy9zcHJpbmcvc3JjL2phdmEvb3JnL211bGUvZXh0cmFzL3NwcmluZy9j b25maWcvQXV0b3dpcmVVTU9NYW5hZ2VyRmFjdG9yeUJlYW4uamF2YT9yZXY9MS4xIDxodHRwOi8v Y3ZzLnNvdXJjZWZvcmdlLm5ldC92aWV3Y3ZzLnB5L211bGUvbXVsZS1leHRyYXMvc3ByaW5nL3Ny Yy9qYXZhL29yZy9tdWxlL2V4dHJhcy9zcHJpbmcvY29uZmlnL0F1dG93aXJlVU1PTWFuYWdlckZh Y3RvcnlCZWFuLmphdmE/cmV2PTEuMSZ2aWV3PWF1dG8+ICZ2aWV3PWF1dG8NCg0KDQoNCk5vdGUg dGhhdCB0aGlzIGZhY3RvcnkgYmVhbiBub3cgZG9lc24ndCBpbXBsZW1lbnQgQlBQIGJlY2F1c2Ug b2YgdGhlIENsYXNzQ2FzdEV4Y2VwdGlvbi4gaG93ZXZlciBJIHRyaWVkIGltcGxlbWVudGF0aW5n ICBGYWN0b3J5QmVhbiBhbmQgQmVhblBvc3RQcm9jZXNzb3IgaW4gYW4gaXNvbGF0ZWQgdGVzdCBh bmQgSSBzdGlsbCBnb3QgdGhlIGV4Y2VwdGlvbi4NCg0KDQoNCkNoZWVycywNCg0KDQoNClJvc3MN Cg0KDQoNCg0KDQoNCg0KDQoNCiAgDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQoNCkZy b206ICBzcHJpbmdmcmFtZXdvcmstZGV2ZWxvcGVyLWFkbWluQGxpc3RzLnNvdXJjZWZvcmdlLm5l dA0KDQpbIG1haWx0bzpzcHJpbmdmcmFtZXdvcmstZGV2ZWxvcGVyLWFkbWluQGxpc3RzLnNvdXJj ZWZvcmdlLm5ldF1PbiBCZWhhbGYNCg0KT2YgRG1pdHJpeSBLb3B5bGVua28NCg0KU2VudDogRnJp ZGF5LCA5IEp1bHkgMjAwNCAxOjI3IEFNDQoNClRvOiAgc3ByaW5nZnJhbWV3b3JrLWRldmVsb3Bl ckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQNCg0KU3ViamVjdDogUmU6IFtTcHJpbmdmcmFtZXdvcmst ZGV2ZWxvcGVyXSBJbnRlcmNlcHRpbmcgYmVhbiBjcmVhdGlvbj8NCg0KDQoNCg0KDQpSb3NzLA0K DQoNCg0KY2FuIHlvdSBwbGVhc2UgYXR0YWNoIHRoaXMgQlBQIGFuZCB0aGUgY29ycmVzcG9uZGlu ZyBhcHBDdHggZGVzY3JpcHRvcj8NCg0KDQoNClRoYW5rcywNCg0KRG1pdHJpeS4NCg0KDQoNCk1h c29uLCBSb3NzIHdyb3RlOg0KDQoNCg0KICAgIA0KDQpDaGVlcnMgZ3V5cy4gIEknbSB1c2luZyB0 aGUgQmVhblBvc3RQcm9jZXNzb3IuDQoNCg0KDQpXaGVuIEkgdHJ5IHVzaW5nIHRoZSBCZWFuUG9z dFByb2Nlc3NvciBvbiBhIEZhY3RvcnlCZWFuIEkgZ2V0IA0KDQogICAgICANCg0KYSBDbGFzc0Nh c3RFeGNlcHRpb24uICBXaGljaCBhdCBmaXJzdCBtYWRlIHNlbnNlIGJlY2F1c2UgSSANCg0KZmln dXJlZCBpdCB3YXMgdHJ5aW5nIHRvIGNhc3QgbXkgYWN0dWFsIGJlYW4gaW5zdGFuY2UgKG5vdCAN Cg0KRmFjdG9yeUJlYW4pIHRvIGEgQmVhblBvc3RQcm9jZXNzb3IsIGJ1dCB0aGVuIHdoeSB3b3Vs ZG4ndCBpdCANCg0KdXNlIHRoZSBhY3R1YWwgZmFjdG9yeSBpbnN0YW5jZS4gQW55d2F5IGhlcmUg aXMgdGhlIHN0YWNrIHRyYWNlIC0NCg0KICAgIA0KDQpqYXZhLmxhbmcuQ2xhc3NDYXN0RXhjZXB0 aW9uDQoNCmF0IA0KDQogICAgICANCg0Kb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBv cnQuQWJzdHJhY3RBcHBsaWNhdGlvbkNvbnRleHQuDQoNCnJlZ2lzdGVyQmVhblBvc3RQcm9jZXNz b3JzKEFic3RyYWN0QXBwbGljYXRpb25Db250ZXh0LmphdmE6MzI4KQ0KDQogICAgDQoNCmF0IA0K DQogICAgICANCg0Kb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQuQWJzdHJhY3RB cHBsaWNhdGlvbkNvbnRleHQuDQoNCnJlZnJlc2goQWJzdHJhY3RBcHBsaWNhdGlvbkNvbnRleHQu amF2YToyNjQpDQoNCiAgICANCg0KYXQgDQoNCiAgICAgIA0KDQpvcmcuc3ByaW5nZnJhbWV3b3Jr LmNvbnRleHQuc3VwcG9ydC5DbGFzc1BhdGhYbWxBcHBsaWNhdGlvbkNvbnQNCg0KZXh0Ljxpbml0 PihDbGFzc1BhdGhYbWxBcHBsaWNhdGlvbkNvbnRleHQuamF2YTo1OCkNCg0KICAgIA0KDQphdCAN Cg0KICAgICAgDQoNCm9yZy5tdWxlLmV4dHJhcy5zcHJpbmcuY29uZmlnLlNwcmluZ0NvbmZpZ3Vy YXRpb25CdWlsZGVyLmNvbmZpZw0KDQp1cmUoU3ByaW5nQ29uZmlndXJhdGlvbkJ1aWxkZXIuamF2 YTo0MCkNCg0KICAgIA0KDQphdCANCg0KICAgICAgDQoNCm9yZy5tdWxlLnRjay5BYnN0cmFjdENv bmZpZ0J1aWxkZXJUZXN0Q2FzZS5zZXRVcChBYnN0cmFjdENvbmZpZw0KDQpCdWlsZGVyVGVzdENh c2UuamF2YTo1MykNCg0KICAgIA0KDQphdCANCg0KICAgICAgDQoNCmNvbS5pbnRlbGxpai5ydC5l eGVjdXRpb24uanVuaXQyLkpVbml0U3RhcnRlci5tYWluKEpVbml0U3RhcnRlcg0KDQouamF2YToz MSkNCg0KICAgIA0KDQphdCBzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuaW52 b2tlMChOYXRpdmUgTWV0aG9kKQ0KDQphdCANCg0KICAgICAgDQoNCnN1bi5yZWZsZWN0Lk5hdGl2 ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoTmF0aXZlTWV0aG9kQWNjZXNzbw0KDQpySW1wbC5q YXZhOjM5KQ0KDQogICAgDQoNCmF0IA0KDQogICAgICANCg0Kc3VuLnJlZmxlY3QuRGVsZWdhdGlu Z01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGluZ01ldGhvDQoNCmRBY2Nlc3Nvcklt cGwuamF2YToyNSkNCg0KICAgIA0KDQphdCANCg0KICAgICAgDQoNCmNvbS5pbnRlbGxpai5ydC5l eGVjdXRpb24uYXBwbGljYXRpb24uQXBwTWFpbi5tYWluKEFwcE1haW4uamF2YTo3OCkNCg0KICAg IA0KDQpDaGVlcnMsDQoNCg0KDQpSb3NzDQoNCg0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t LSANCg0KRnJvbTogIHNwcmluZ2ZyYW1ld29yay1kZXZlbG9wZXItYWRtaW5AbGlzdHMuc291cmNl Zm9yZ2UubmV0IA0KDQogICAgICANCg0Kb24gYmVoYWxmIG9mIGrDvHJnZW4gaMO2bGxlciBbd2Vy azNBVF0gDQoNCiAgICANCg0KU2VudDogVGh1IDgvMDcvMjAwNCAxMDo0NSBBTSANCg0KVG86ICBz cHJpbmdmcmFtZXdvcmstZGV2ZWxvcGVyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCANCg0KQ2M6IA0K DQpTdWJqZWN0OiBSZTogW1NwcmluZ2ZyYW1ld29yay1kZXZlbG9wZXJdIEludGVyY2VwdGluZyBi ZWFuIGNyZWF0aW9uPw0KDQoNCg0KDQoNCg0KDQoJSSByZWNvbW1lbmQgQmVhbk5hbWVBd2FyZSB0 b28sIGlmIHlvdSBqdXN0IHdhbnQgdG8gDQoNCiAgICAgIA0KDQpiZWNvbWUgYXdhcmUgb2YgdGhl IGJlYW4gbmFtZS4NCg0KICAgIA0KDQoJDQoNCglGb3IgZ2VuZXJhbCBwb3N0LXByb2Nlc3Npbmcg b2YgYSBuZXdseSBjcmVhdGVkIGJlYW4gDQoNCiAgICAgIA0KDQppbnN0YW5jZSwgeW91IGNvdWxk IGRlZmluZSBhIEJlYW5Qb3N0UHJvY2Vzc29yIGluIHRoZSBjb250ZXh0LCANCg0Kd2hpY2ggd2ls bCBhdXRvbWF0aWNhbGx5IGludGVyY2VwdCBhbGwgYmVhbnMgdGhhdCB0aGlzIGNvbnRleHQgY3Jl YXRlczoNCg0KICAgIA0KDQoJDQoNCgkNCg0KICAgICAgDQoNCmh0dHA6Ly93d3cuc3ByaW5nZnJh bWV3b3JrLm9yZy9kb2NzL2FwaS9vcmcvc3ByaW5nZnJhbWV3b3JrL2JlYQ0KDQpucy9mYWN0b3J5 L2NvbmZpZy9CZWFuUG9zdFByb2Nlc3Nvci5odG1sDQoNCiAgICANCg0KCQ0KDQoJSnVlcmdlbg0K DQoJDQoNCgkNCg0KCS0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQoNCglGcm9tOiAgc3ByaW5n ZnJhbWV3b3JrLWRldmVsb3Blci1hZG1pbkBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQNCg0KCQ0KDQog ICAgICANCg0KWyBtYWlsdG86c3ByaW5nZnJhbWV3b3JrLWRldmVsb3Blci1hZG1pbkBsaXN0cy5z b3VyY2Vmb3JnZS5uZXRdT24gQmVoYWxmDQoNCiAgICANCg0KCU9mIENoaXN0b3BoZSBWYW5mbGV0 ZXJlbg0KDQoJU2VudDogVGh1cnNkYXksIEp1bHkgMDgsIDIwMDQgMTE6MjYgQU0NCg0KCVRvOiAg c3ByaW5nZnJhbWV3b3JrLWRldmVsb3BlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQNCg0KCVN1Ympl Y3Q6IFJlOiBbU3ByaW5nZnJhbWV3b3JrLWRldmVsb3Blcl0gSW50ZXJjZXB0aW5nIA0KDQogICAg ICANCg0KYmVhbiBjcmVhdGlvbj8NCg0KICAgIA0KDQoJDQoNCgkNCg0KCU9uIFRodXJzZGF5IDA4 IEp1bHkgMjAwNCAxMToxMiwgTWFzb24sIFJvc3Mgd3JvdGU6DQoNCgk+IEhpLA0KDQoJPiBJIGNy ZWF0ZSBhIGxvdCBvZiBkaWZmZXJlbnQgdHlwZXMgb2Ygb2JqZWN0IGluIGFuIA0KDQogICAgICAN Cg0KYXBwbGljYXRpb25Db250ZXh0LCBhbGwNCg0KICAgIA0KDQoJPiBvZiB3aGljaCBoYXZlIGEg bmFtZSBwcm9wZXJ0eSBpLmUuDQoNCgk+DQoNCgk+IDxiZWFuIGlkPSJqbXNDb25uZWN0b3IiIA0K DQogICAgICANCg0KY2xhc3NOYW1lPSJvcmcubXVsZS5wcm92aWRlcnMuam1zLkptc0Nvbm5lY3Rv ciI+DQoNCiAgICANCg0KCT4gICAgIDxwcm9wZXJ0eSANCg0KICAgICAgDQoNCm5hbWU9Im5hbWUi Pjx2YWx1ZT5qbXNDb25uZWN0b3I8L3ZhbHVlPjwvcHJvcGVydHk+DQoNCiAgICANCg0KCT4gPC9i ZWFuPg0KDQoJPg0KDQoJPiBJIGRvbid0IGxpa2UgaGF2aW5nIHRvIGluY2x1ZGUgdGhlIG5hbWUg cHJvcGVydHkgaWYgDQoNCiAgICAgIA0KDQp0aGVyZSBpcyBhIGNoYW5jZSBJDQoNCiAgICANCg0K CT4gY291bGQgdXNlIHRoZSBiZWFuIGlkIGluc3RlYWQuIElzIHRoZXJlIGFueSB3YXkgSSBjYW4g DQoNCiAgICAgIA0KDQp1bmlmb3JtbHkgaW50ZXJjZXB0DQoNCiAgICANCg0KCT4gYmVhbiBjcmVh dGlvbiBpbiB0aGUgY29udGV4dCBzbyB0aGF0IHN0cmFpZ2h0IGFmdGVyIA0KDQogICAgICANCg0K dGhlIGNvbnN0cnVjdG9yIGlzDQoNCiAgICANCg0KCT4gY2FsbGVkIEkgY2FuIGdldCBob2xkIG9m IHRoZSBiZWFuIGlkIGFuZCBzZXQgaXQgb24gbXkgb2JqZWN0Pw0KDQoJPg0KDQoJPiBJIGNhbid0 IHdhaXQgdW50aWwgdGhlIGFwcGxpY2F0aW9uQ29udGV4dCBpcyANCg0KICAgICAgDQoNCmNvbmZp Z3VyZWQgYW5kIHRoZW4gc2V0IHRoZQ0KDQogICAgDQoNCgk+IG5hbWVzIGFzIHNvbWUgb2JqZWN0 cyBoYXZlIGEgY29sbGVjdGlvbiBvZiBvdGhlciANCg0KICAgICAgDQoNCm9iamVjdHMgd2hpY2gg YXJlIGtleWVkDQoNCiAgICANCg0KCT4gYWdhaW5zdCB0aGUgbmFtZS4NCg0KCT4NCg0KCQ0KDQoJ WW91IGNvdWxkIGltcGxlbWVudCBCZWFuTmFtZUF3YXJlOg0KDQoJDQoNCiAgICAgIA0KDQogPGh0 dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9kb2NzL2FwaS9vcmcvc3ByaW5nZnJhbWV3b3Jr L2JlYW5zL2ZhY3RvcnkvQmVhbk5hbWVBd2FyZS5odG1sPiA8aHR0cDovL3d3dy5zcHJpbmdmcmFt ZXdvcmsub3JnL2RvY3MvYXBpL29yZy9zcHJpbmdmcmFtZXdvcmsvYmVhbnMvZmFjdG9yeS9CZWFu TmFtZUF3YXJlLmh0bWw+DQoNCiAgDQoNCgkNCg0KCS0tDQoNCglLaW5kIHJlZ2FyZHMsDQoNCglD aHJpc3RvcGhlIFZhbmZsZXRlcmVuDQoNCgkNCg0KCQ0KDQoJLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQoJVGhpcyBTRi5OZXQgZW1haWwg c3BvbnNvcmVkIGJ5IEJsYWNrIEhhdCBCcmllZmluZ3MgJiBUcmFpbmluZy4NCg0KCUF0dGVuZCBC bGFjayBIYXQgQnJpZWZpbmdzICYgVHJhaW5pbmcsIExhcyBWZWdhcyBKdWx5IDI0LTI5IC0NCg0K CWRpZ2l0YWwgc2VsZiBkZWZlbnNlLCB0b3AgdGVjaG5pY2FsIGV4cGVydHMsIG5vIHZlbmRvciBw aXRjaGVzLA0KDQoJdW5tYXRjaGVkIG5ldHdvcmtpbmcgb3Bwb3J0dW5pdGllcy4gVmlzaXQgIHd3 dy5ibGFja2hhdC5jb20NCg0KCV9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fDQoNCglTcHJpbmdmcmFtZXdvcmstZGV2ZWxvcGVyIG1haWxpbmcgbGlzdA0KDQoJ IFNwcmluZ2ZyYW1ld29yay1kZXZlbG9wZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0DQoNCgkgaHR0 cHM6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vc3ByaW5nZnJhbWV3b3Jr LWRldmVsb3Blcg0KDQoJDQoNCgkNCg0KCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KCVRoaXMgU0YuTmV0IGVtYWlsIHNwb25zb3JlZCBi eSBCbGFjayBIYXQgQnJpZWZpbmdzICYgVHJhaW5pbmcuDQoNCglBdHRlbmQgQmxhY2sgSGF0IEJy aWVmaW5ncyAmIFRyYWluaW5nLCBMYXMgVmVnYXMgSnVseSAyNC0yOSAtDQoNCglkaWdpdGFsIHNl bGYgZGVmZW5zZSwgdG9wIHRlY2huaWNhbCBleHBlcnRzLCBubyB2ZW5kb3IgcGl0Y2hlcywNCg0K CXVubWF0Y2hlZCBuZXR3b3JraW5nIG9wcG9ydHVuaXRpZXMuIFZpc2l0ICB3d3cuYmxhY2toYXQu Y29tDQoNCglfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0K DQoJU3ByaW5nZnJhbWV3b3JrLWRldmVsb3BlciBtYWlsaW5nIGxpc3QNCg0KCSBTcHJpbmdmcmFt ZXdvcmstZGV2ZWxvcGVyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldA0KDQoJIGh0dHBzOi8vbGlzdHMu c291cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL3NwcmluZ2ZyYW1ld29yay1kZXZlbG9wZXIN Cg0KCQ0KDQoNCg0KIA0KDQoNCg0KICAgIA0KDQoNCg0KDQoNCg0KDQotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNClRoaXMgU0YuTmV0IGVt YWlsIHNwb25zb3JlZCBieSBCbGFjayBIYXQgQnJpZWZpbmdzICYgVHJhaW5pbmcuDQoNCkF0dGVu ZCBCbGFjayBIYXQgQnJpZWZpbmdzICYgVHJhaW5pbmcsIExhcyBWZWdhcyBKdWx5IDI0LTI5IC0g DQoNCmRpZ2l0YWwgc2VsZiBkZWZlbnNlLCB0b3AgdGVjaG5pY2FsIGV4cGVydHMsIG5vIHZlbmRv ciBwaXRjaGVzLCANCg0KdW5tYXRjaGVkIG5ldHdvcmtpbmcgb3Bwb3J0dW5pdGllcy4gVmlzaXQg IHd3dy5ibGFja2hhdC5jb20NCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18NCg0KU3ByaW5nZnJhbWV3b3JrLWRldmVsb3BlciBtYWlsaW5nIGxpc3QNCg0K U3ByaW5nZnJhbWV3b3JrLWRldmVsb3BlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQNCg0KaHR0cHM6 Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vc3ByaW5nZnJhbWV3b3JrLWRl dmVsb3Blcg0KDQpOGO+/vUhTXu+/vemailsp77+9eyjvv73vv71b77+9GVpyQdq0Gu+/vXnvv73v v73vv71qKe+/vSvvv70p4KKaaO+/vdun77+92J7vv71Y77+977+977+9MO+/vVpySFrvv73vv70m Su+/ve+/vQfvv71qZ++/ve+/ve+/vR1677+977+977+977+977+977+9eCXvv73vv71S77+977+9 77+977+977+92pnvv70o77+9R17vv73vv71o77+977+977+977+9bO+/ve+/ve+/vXHvv73vv70H 77+9eu+/vW3vv73vv70/77+9WO+/ve+/ve+/vSjvv73vv70efu+/ve+/vXp377+977+9WO+/ve+/ ve+/ve+/ve+/vWLvv73vv70/77+977+977+9B++/vWpn77+977+977+9HXrvv73vv70NCg0KDQo= |
|
From: <al...@jt...> - 2004-07-13 23:23:24
|
<html><head>
<style>
.white { color:#FFFFFF }.index { background-color:#FFFFFF }.index-passed { =
color:#004400 }.index-failed { color:#FF0000; font-weight:bold }.index-head=
er { font-weight:bold }.link { font-family:arial,helvetica,sans-serif; font=
-size:10pt; color:#FFFFFF; text-decoration:none; }.tab-table { margin: 0em =
0em 0.5em 0em; }.tabs { font-family:arial,helvetica,sans-serif; font-size:8=
pt; color:#000000; font-weight:bold; padding: 0em 2em; background-color:#EE=
EEEE; }.tabs-link { color:#000000; text-decoration:none; }.tabs-link:visite=
d { color:#000000; text-decoration:none; }.tabs-selected { font-family:aria=
l,helvetica,sans-serif; font-size:8pt; color:#000000; font-weight:bold; pad=
ding: 0em 2em; }.tabs-selected { border: inset; }.header-title { font-famil=
y:arial,helvetica,sans-serif; font-size:12pt; color:#000000; font-weight:bo=
ld; }.header-label { font-weight:bold; }.header-data { font-family:arial,he=
lvetica,sans-serif; font-size:10pt; color:#000000; }.modifications-data { f=
ont-family:arial,helvetica,sans-serif; font-size:8pt; color:#000000; }.modi=
fications-sectionheader { background-color:#000066; font-family:arial,helve=
tica,sans-serif; font-size:10pt; color:#FFFFFF; }.modifications-oddrow { ba=
ckground-color:#CCCCCC }.modifications-evenrow { background-color:#FFFFCC }=
.changelists-oddrow { background-color:#CCCCCC }.changelists-evenrow { back=
ground-color:#FFFFCC }.changelists-file-spacer { background-color:#FFFFFF }=
.changelists-file-evenrow { background-color:#EEEEEE }.changelists-file-odd=
row { background-color:#FFFFEE }.changelists-file-header { background-color=
:#666666; font-family:arial,helvetica,sans-serif; font-size:8pt; color:#FFF=
FFF; }.compile-data { font-family:arial,helvetica,sans-serif; font-size:8pt=
; color:#000000; }.compile-error-data { font-family:arial,helvetica,sans-se=
rif; font-size:8pt; color:#FF0000; }.compile-warn-data { font-family:arial,=
helvetica,sans-serif; font-size:8pt; color:#CC9900; }.compile-sectionheader=
{ background-color:#000066; font-family:arial,helvetica,sans-serif; font-s=
ize:10pt; color:#FFFFFF; }.distributables-data { font-family:arial,helvetic=
a,sans-serif; font-size:8pt; color:#000000; }.distributables-sectionheader =
{ background-color:#000066; font-family:arial,helvetica,sans-serif; font-si=
ze:10pt; color:#FFFFFF; }.distributables-oddrow { background-color:#CCCCCC =
}.unittests-sectionheader { background-color:#000066; font-family:arial,hel=
vetica,sans-serif; font-size:10pt; color:#FFFFFF; }.unittests-oddrow { back=
ground-color:#CCCCCC }.unittests-data { font-family:arial,helvetica,sans-se=
rif; font-size:8pt; color:#000000; }.unittests-error { font-family:arial,he=
lvetica,sans-serif; font-size:8pt; color:#FF0000; }.checkstyle-oddrow { bac=
kground-color:#CCCCCC }.checkstyle-data { font-family:arial,helvetica,sans-=
serif; font-size:8pt; color:#000000; }.checkstyle-sectionheader { backgroun=
d-color:#000066; font-family:arial,helvetica,sans-serif; font-size:10pt; co=
lor:#FFFFFF; }
</style>
</head><body>
<p>
<table width=3D"98%" border=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=
=3D"center"><tr><td class=3D"header-title">BUILD COMPLETE - =
build.53</td></tr><tr><td class=3D"header-data"><span class=
=3D"header-label">Date of build: </span>07/14/2004 00:16:00</td></tr><=
tr><td class=3D"header-data"><span class=3D"header-label">Time to build:&nb=
sp;</span>13 minutes 25 seconds</td></tr><tr><td class=3D"header-data"><spa=
n class=3D"header-label">Last changed: </span>07/13/2004 19:14:52</td>=
</tr><tr><td class=3D"header-data"><span class=3D"header-label">Last log en=
try: </span>added KeyHolder interface and GeneratedKeyHolder implement=
ation for easier use of auto-generated key support</td></tr></table><p>
<table xmlns=3D"http://www.w3.org/TR/html4/strict.dtd" width=3D"98%" border=
=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=3D"center"/><p>
<p>
<table xmlns=3D"http://www.w3.org/TR/html4/strict.dtd" width=3D"98%" border=
=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=3D"center"><tr><td class=
=3D"compile-sectionheader"> Errors/Warnings: (=
6) </td></tr><tr><td><pre class=3D"compile-error-data">N=
ote: Some input files use or override a deprecated API.<br class=3D"none"/>=
Note: Recompile with -deprecation for details.Note: /jteam/build/checkout/s=
pring/spring/mock/org/springframework/mock/web/MockHttpSession.java uses or=
overrides a deprecated API.<br class=3D"none"/>Note: Recompile with -depre=
cation for details.<br class=3D"none"/>Note: Some input files use or overri=
de a deprecated API.<br class=3D"none"/>Note: Recompile with -deprecation f=
or details.<br class=3D"none"/></pre></td></tr></table><p>
<p>
<table width=3D"98%" border=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=
=3D"center"><tr><td colspan=3D"4" class=3D"unittests-sectionheader"> =
Unit Tests: (1470) </td></tr><tr><td><tabl=
e width=3D"98%" border=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=3D"c=
enter"><tr><td class=3D"unittests-data"> failure =
</td><td width=3D"40%" class=3D"unittests-data">testHomePage</td><td width=
=3D"40%" class=3D"unittests-data">org.springframework.apptests.buildtest.Al=
lTests</td></tr></table></td></tr><tr></tr><tr><td colspan=3D"2"> </td=
></tr><tr><td colspan=3D"4" class=3D"unittests-sectionheader"> =
Unit Test Error Details: (1) </td></tr><tr=
><td class=3D"unittests-data" colspan=3D"2"> Test: test=
HomePage</td></tr><tr><td class=3D"unittests-data" colspan=3D"2"> =
Class: org.springframework.apptests.buildtest.AllTests</td></tr>=
<tr><td class=3D"unittests-data" colspan=3D"2"> Type: junit.=
framework.AssertionFailedError</td></tr><tr><td class=3D"unittests-data" co=
lspan=3D"2"> Message: Exception while testing URL http://loc=
alhost:13084/buildtest:java.io.IOException</td></tr><tr><td class=3D"unitte=
sts-error" colspan=3D"2"><pre>junit.framework.AssertionFailedError: Excepti=
on while testing URL http://localhost:13084/buildtest:java.io.IOException<b=
r>=09at org.springframework.apptests.buildtest.AllTests.testHomePage(Unknow=
n Source)<br>=09at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Meth=
od)<br>=09at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccess=
orImpl.java:39)<br>=09at sun.reflect.DelegatingMethodAccessorImpl.invoke(De=
legatingMethodAccessorImpl.java:25)<br></pre></td></tr><tr><td colspan=3D"2=
"> </td></tr></table><p>
<table width=3D"98%" border=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=
=3D"center"><tr><td colspan=3D"4" class=3D"modifications-sectionheader"> =
Modifications since last build: =
(6) </td></tr><tr class=3D"modifications-evenrow"><td c=
lass=3D"modifications-data">modified</td><td class=3D"modifications-data">t=
risberg</td><td class=3D"modifications-data">src/org/springframework/jdbc/c=
ore/JdbcTemplate.java</td><td class=3D"modifications-data">added KeyHolder =
interface and GeneratedKeyHolder implementation for easier use of auto-gene=
rated key support</td></tr><tr class=3D"modifications-oddrow"><td class=3D"=
modifications-data">modified</td><td class=3D"modifications-data">trisberg<=
/td><td class=3D"modifications-data">src/org/springframework/jdbc/object/Sq=
lUpdate.java</td><td class=3D"modifications-data">added KeyHolder interface=
and GeneratedKeyHolder implementation for easier use of auto-generated key=
support</td></tr><tr class=3D"modifications-evenrow"><td class=3D"modifica=
tions-data">added</td><td class=3D"modifications-data">trisberg</td><td cla=
ss=3D"modifications-data">src/org/springframework/jdbc/core/support/Generat=
edKeyHolder.java</td><td class=3D"modifications-data">added KeyHolder inter=
face and GeneratedKeyHolder implementation for easier use of auto-generated=
key support</td></tr><tr class=3D"modifications-oddrow"><td class=3D"modif=
ications-data">added</td><td class=3D"modifications-data">trisberg</td><td =
class=3D"modifications-data">src/org/springframework/jdbc/core/support/KeyH=
older.java</td><td class=3D"modifications-data">added KeyHolder interface a=
nd GeneratedKeyHolder implementation for easier use of auto-generated key s=
upport</td></tr><tr class=3D"modifications-evenrow"><td class=3D"modificati=
ons-data">modified</td><td class=3D"modifications-data">colins</td><td clas=
s=3D"modifications-data">src/org/springframework/context/access/ContextJndi=
BeanFactoryLocator.java</td><td class=3D"modifications-data">clean up javad=
ocs</td></tr><tr class=3D"modifications-oddrow"><td class=3D"modifications-=
data">modified</td><td class=3D"modifications-data">colins</td><td class=3D=
"modifications-data">src/org/springframework/beans/factory/access/JndiBeanF=
actoryLocator.java</td><td class=3D"modifications-data">clean up javadocs</=
td></tr></table><p>
<table width=3D"98%" border=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=
=3D"center"><tr><td class=3D"distributables-sectionheader"> =
Deployments by this build: (8) </td><=
/tr><tr><td class=3D"distributables-data">Building jar: /jteam/build/checko=
ut/spring/spring/dist/spring.jar</td></tr><tr class=3D"distributables-oddro=
w"><td class=3D"distributables-data">Building war: /jteam/build/checkout/sp=
ring/spring/autobuilds/apps/buildtest/dist/buildtest.war</td></tr><tr><td c=
lass=3D"distributables-data">Building war: /jteam/build/checkout/spring/spr=
ing/autobuilds/apps/buildtest/dist/buildtest.war</td></tr><tr class=3D"dist=
ributables-oddrow"><td class=3D"distributables-data">Building war: /jteam/b=
uild/checkout/spring/spring/autobuilds/apps/buildtest/dist/buildtest.war</t=
d></tr><tr><td class=3D"distributables-data">Building jar: /jteam/build/che=
ckout/spring/spring/autobuilds/apps/jpetstore/war/WEB-INF/lib/jpetstore.jar=
</td></tr><tr class=3D"distributables-oddrow"><td class=3D"distributables-d=
ata">Building war: /jteam/build/checkout/spring/spring/autobuilds/apps/jpet=
store/dist/jpetstore.war</td></tr><tr><td class=3D"distributables-data">Bui=
lding jar: /jteam/build/checkout/spring/spring/autobuilds/apps/jpetstore/wa=
r/WEB-INF/lib/jpetstore.jar</td></tr><tr class=3D"distributables-oddrow"><t=
d class=3D"distributables-data">Building war: /jteam/build/checkout/spring/=
spring/autobuilds/apps/jpetstore/dist/jpetstore.war</td></tr></table>
</body></html> |
|
From: Dmitriy K. <dko...@ru...> - 2004-07-13 17:24:53
|
James, is preliminary Geronimo-Spring source in CVS? Regards, Dmitriy. |
|
From: Dmitriy K. <dko...@ru...> - 2004-07-13 14:59:02
|
Ross,
I investigated the issue and found that FactoryBean and
BeanPostProcessor do not work well together. I've created a very simple
test case to prove that. The reason is that in
AbstractApplicationContext.registerBeanPostProcessors() it calls the
*getBean()* to populate the internal Collection of BeanPostProcessors
and then register them "globally" by casting to ... well,
BeanPostProcessor. In case of FactoryBean, getBean() call actually gets
the underlying instance of the bean, not the FactoryBean itself,
therefore resulting in ClastCastException:
private void registerBeanPostProcessors() throws BeansException {
String[] beanNames =
getBeanDefinitionNames(BeanPostProcessor.class);
if (beanNames.length > 0) {
List beanProcessors = new ArrayList();
for (int i = 0; i < beanNames.length; i++) {
beanProcessors.add(getBean(beanNames[i]));
}
Collections.sort(beanProcessors, new OrderComparator());
for (Iterator it = beanProcessors.iterator(); it.hasNext();) {
getBeanFactory().addBeanPostProcessor((BeanPostProcessor)it.next());
}
}
}
I've changed this code to take into consideration the
BeanPostProcessor-FactoryBean combination:
private void registerBeanPostProcessors() throws BeansException {
String[] beanNames =
getBeanDefinitionNames(BeanPostProcessor.class);
if (beanNames.length > 0) {
List beanProcessors = new ArrayList();
for (int i = 0; i < beanNames.length; i++) {
try{
beanProcessors.add(getBean("&" + beanNames[i]));
//Check for FactoryBean
}
catch(BeanIsNotAFactoryException e){
beanProcessors.add(getBean(beanNames[i])); //It's
not the FactoryBean
}
}
Collections.sort(beanProcessors, new OrderComparator());
for (Iterator it = beanProcessors.iterator(); it.hasNext();) {
getBeanFactory().addBeanPostProcessor((BeanPostProcessor)it.next());
}
}
}
Works well.
Juergen, if there is a compelling need for this feature (BPP/FB
combination) I'd be happy to commit this.
Regards,
Dmitriy.
Mason, Ross wrote:
>Dmitriy,
>
>sorry for the delay :)
>
>appCtx -
>http://cvs.sourceforge.net/viewcvs.py/mule/mule-extras/spring/src/test/conf/mule-events-app-context.xml?rev=1.3&view=auto
>
>BPP
>
>http://cvs.sourceforge.net/viewcvs.py/mule/mule-extras/spring/src/java/org/mule/extras/spring/config/AutowireUMOManagerFactoryBean.java?rev=1.1&view=auto
>
>Note that this factory bean now doesn't implement BPP because of the ClassCastException. however I tried implementating FactoryBean and BeanPostProcessor in an isolated test and I still got the exception.
>
>Cheers,
>
>Ross
>
>
>
>
>
>
>>-----Original Message-----
>>From: spr...@li...
>>[mailto:spr...@li...]On Behalf
>>Of Dmitriy Kopylenko
>>Sent: Friday, 9 July 2004 1:27 AM
>>To: spr...@li...
>>Subject: Re: [Springframework-developer] Intercepting bean creation?
>>
>>
>>Ross,
>>
>>can you please attach this BPP and the corresponding appCtx descriptor?
>>
>>Thanks,
>>Dmitriy.
>>
>>Mason, Ross wrote:
>>
>>
>>
>>>Cheers guys. I'm using the BeanPostProcessor.
>>>
>>>When I try using the BeanPostProcessor on a FactoryBean I get
>>>
>>>
>>a ClassCastException. Which at first made sense because I
>>figured it was trying to cast my actual bean instance (not
>>FactoryBean) to a BeanPostProcessor, but then why wouldn't it
>>use the actual factory instance. Anyway here is the stack trace -
>>
>>
>>>java.lang.ClassCastException
>>>at
>>>
>>>
>>org.springframework.context.support.AbstractApplicationContext.
>>registerBeanPostProcessors(AbstractApplicationContext.java:328)
>>
>>
>>>at
>>>
>>>
>>org.springframework.context.support.AbstractApplicationContext.
>>refresh(AbstractApplicationContext.java:264)
>>
>>
>>>at
>>>
>>>
>>org.springframework.context.support.ClassPathXmlApplicationCont
>>ext.<init>(ClassPathXmlApplicationContext.java:58)
>>
>>
>>>at
>>>
>>>
>>org.mule.extras.spring.config.SpringConfigurationBuilder.config
>>ure(SpringConfigurationBuilder.java:40)
>>
>>
>>>at
>>>
>>>
>>org.mule.tck.AbstractConfigBuilderTestCase.setUp(AbstractConfig
>>BuilderTestCase.java:53)
>>
>>
>>>at
>>>
>>>
>>com.intellij.rt.execution.junit2.JUnitStarter.main(JUnitStarter
>>.java:31)
>>
>>
>>>at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>at
>>>
>>>
>>sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccesso
>>rImpl.java:39)
>>
>>
>>>at
>>>
>>>
>>sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMetho
>>dAccessorImpl.java:25)
>>
>>
>>>at
>>>
>>>
>>com.intellij.rt.execution.application.AppMain.main(AppMain.java:78)
>>
>>
>>>Cheers,
>>>
>>>Ross
>>>
>>>-----Original Message-----
>>>From: spr...@li...
>>>
>>>
>>on behalf of jürgen höller [werk3AT]
>>
>>
>>>Sent: Thu 8/07/2004 10:45 AM
>>>To: spr...@li...
>>>Cc:
>>>Subject: Re: [Springframework-developer] Intercepting bean creation?
>>>
>>>
>>>
>>> I recommend BeanNameAware too, if you just want to
>>>
>>>
>>become aware of the bean name.
>>
>>
>>>
>>> For general post-processing of a newly created bean
>>>
>>>
>>instance, you could define a BeanPostProcessor in the context,
>>which will automatically intercept all beans that this context creates:
>>
>>
>>>
>>>
>>>
>>>
>>http://www.springframework.org/docs/api/org/springframework/bea
>>ns/factory/config/BeanPostProcessor.html
>>
>>
>>>
>>> Juergen
>>>
>>>
>>> -----Original Message-----
>>> From: spr...@li...
>>>
>>>
>>>
>>[mailto:spr...@li...]On Behalf
>>
>>
>>> Of Chistophe Vanfleteren
>>> Sent: Thursday, July 08, 2004 11:26 AM
>>> To: spr...@li...
>>> Subject: Re: [Springframework-developer] Intercepting
>>>
>>>
>>bean creation?
>>
>>
>>>
>>>
>>> On Thursday 08 July 2004 11:12, Mason, Ross wrote:
>>> > Hi,
>>> > I create a lot of different types of object in an
>>>
>>>
>>applicationContext, all
>>
>>
>>> > of which have a name property i.e.
>>> >
>>> > <bean id="jmsConnector"
>>>
>>>
>>className="org.mule.providers.jms.JmsConnector">
>>
>>
>>> > <property
>>>
>>>
>>name="name"><value>jmsConnector</value></property>
>>
>>
>>> > </bean>
>>> >
>>> > I don't like having to include the name property if
>>>
>>>
>>there is a chance I
>>
>>
>>> > could use the bean id instead. Is there any way I can
>>>
>>>
>>uniformly intercept
>>
>>
>>> > bean creation in the context so that straight after
>>>
>>>
>>the constructor is
>>
>>
>>> > called I can get hold of the bean id and set it on my object?
>>> >
>>> > I can't wait until the applicationContext is
>>>
>>>
>>configured and then set the
>>
>>
>>> > names as some objects have a collection of other
>>>
>>>
>>objects which are keyed
>>
>>
>>> > against the name.
>>> >
>>>
>>> You could implement BeanNameAware:
>>>
>>>
>>>
><http://www.springframework.org/docs/api/org/springframework/beans/factory/BeanNameAware.html>
>
>
>>
>> --
>> Kind regards,
>> Christophe Vanfleteren
>>
>>
>> -------------------------------------------------------
>> This SF.Net email sponsored by Black Hat Briefings & Training.
>> Attend Black Hat Briefings & Training, Las Vegas July 24-29 -
>> digital self defense, top technical experts, no vendor pitches,
>> unmatched networking opportunities. Visit www.blackhat.com
>> _______________________________________________
>> Springframework-developer mailing list
>> Spr...@li...
>> https://lists.sourceforge.net/lists/listinfo/springframework-developer
>>
>>
>> -------------------------------------------------------
>> This SF.Net email sponsored by Black Hat Briefings & Training.
>> Attend Black Hat Briefings & Training, Las Vegas July 24-29 -
>> digital self defense, top technical experts, no vendor pitches,
>> unmatched networking opportunities. Visit www.blackhat.com
>> _______________________________________________
>> Springframework-developer mailing list
>> Spr...@li...
>> https://lists.sourceforge.net/lists/listinfo/springframework-developer
>>
>>
>>
>>
>>
>>
>
>
>
>-------------------------------------------------------
>This SF.Net email sponsored by Black Hat Briefings & Training.
>Attend Black Hat Briefings & Training, Las Vegas July 24-29 -
>digital self defense, top technical experts, no vendor pitches,
>unmatched networking opportunities. Visit www.blackhat.com
>_______________________________________________
>Springframework-developer mailing list
>Spr...@li...
>https://lists.sourceforge.net/lists/listinfo/springframework-developer
>N�HS^�隊[)�{(��[�ZrAڴ�y���j)�+�)࢚h�ۧ�؞�X���0�ZrHZ��&J���jg���z������x%��R�����ڙ�(�G^��h����l���q���z�m��?�X���(��~��zw��X�����b��?����jg���z��
>
|
|
From: Mason, R. <ros...@vi...> - 2004-07-13 06:12:49
|
RG1pdHJpeSwNCiANCnNvcnJ5IGZvciB0aGUgZGVsYXkgOikNCg0KYXBwQ3R4IC0gDQpodHRwOi8v Y3ZzLnNvdXJjZWZvcmdlLm5ldC92aWV3Y3ZzLnB5L211bGUvbXVsZS1leHRyYXMvc3ByaW5nL3Ny Yy90ZXN0L2NvbmYvbXVsZS1ldmVudHMtYXBwLWNvbnRleHQueG1sP3Jldj0xLjMmdmlldz1hdXRv DQoNCkJQUA0KDQpodHRwOi8vY3ZzLnNvdXJjZWZvcmdlLm5ldC92aWV3Y3ZzLnB5L211bGUvbXVs ZS1leHRyYXMvc3ByaW5nL3NyYy9qYXZhL29yZy9tdWxlL2V4dHJhcy9zcHJpbmcvY29uZmlnL0F1 dG93aXJlVU1PTWFuYWdlckZhY3RvcnlCZWFuLmphdmE/cmV2PTEuMSZ2aWV3PWF1dG8NCg0KTm90 ZSB0aGF0IHRoaXMgZmFjdG9yeSBiZWFuIG5vdyBkb2Vzbid0IGltcGxlbWVudCBCUFAgYmVjYXVz ZSBvZiB0aGUgQ2xhc3NDYXN0RXhjZXB0aW9uLiBob3dldmVyIEkgdHJpZWQgaW1wbGVtZW50YXRp bmcgIEZhY3RvcnlCZWFuIGFuZCBCZWFuUG9zdFByb2Nlc3NvciBpbiBhbiBpc29sYXRlZCB0ZXN0 IGFuZCBJIHN0aWxsIGdvdCB0aGUgZXhjZXB0aW9uLg0KDQpDaGVlcnMsDQoNClJvc3MNCg0KDQoN Cg0KPi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+RnJvbTogc3ByaW5nZnJhbWV3b3JrLWRl dmVsb3Blci1hZG1pbkBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQNCj5bbWFpbHRvOnNwcmluZ2ZyYW1l d29yay1kZXZlbG9wZXItYWRtaW5AbGlzdHMuc291cmNlZm9yZ2UubmV0XU9uIEJlaGFsZg0KPk9m IERtaXRyaXkgS29weWxlbmtvDQo+U2VudDogRnJpZGF5LCA5IEp1bHkgMjAwNCAxOjI3IEFNDQo+ VG86IHNwcmluZ2ZyYW1ld29yay1kZXZlbG9wZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0DQo+U3Vi amVjdDogUmU6IFtTcHJpbmdmcmFtZXdvcmstZGV2ZWxvcGVyXSBJbnRlcmNlcHRpbmcgYmVhbiBj cmVhdGlvbj8NCj4NCj4NCj5Sb3NzLA0KPg0KPmNhbiB5b3UgcGxlYXNlIGF0dGFjaCB0aGlzIEJQ UCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYXBwQ3R4IGRlc2NyaXB0b3I/DQo+DQo+VGhhbmtzLA0K PkRtaXRyaXkuDQo+DQo+TWFzb24sIFJvc3Mgd3JvdGU6DQo+DQo+PkNoZWVycyBndXlzLiAgSSdt IHVzaW5nIHRoZSBCZWFuUG9zdFByb2Nlc3Nvci4NCj4+IA0KPj5XaGVuIEkgdHJ5IHVzaW5nIHRo ZSBCZWFuUG9zdFByb2Nlc3NvciBvbiBhIEZhY3RvcnlCZWFuIEkgZ2V0IA0KPmEgQ2xhc3NDYXN0 RXhjZXB0aW9uLiAgV2hpY2ggYXQgZmlyc3QgbWFkZSBzZW5zZSBiZWNhdXNlIEkgDQo+ZmlndXJl ZCBpdCB3YXMgdHJ5aW5nIHRvIGNhc3QgbXkgYWN0dWFsIGJlYW4gaW5zdGFuY2UgKG5vdCANCj5G YWN0b3J5QmVhbikgdG8gYSBCZWFuUG9zdFByb2Nlc3NvciwgYnV0IHRoZW4gd2h5IHdvdWxkbid0 IGl0IA0KPnVzZSB0aGUgYWN0dWFsIGZhY3RvcnkgaW5zdGFuY2UuIEFueXdheSBoZXJlIGlzIHRo ZSBzdGFjayB0cmFjZSAtDQo+PiANCj4+amF2YS5sYW5nLkNsYXNzQ2FzdEV4Y2VwdGlvbg0KPj4g YXQgDQo+b3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQuQWJzdHJhY3RBcHBsaWNh dGlvbkNvbnRleHQuDQo+cmVnaXN0ZXJCZWFuUG9zdFByb2Nlc3NvcnMoQWJzdHJhY3RBcHBsaWNh dGlvbkNvbnRleHQuamF2YTozMjgpDQo+PiBhdCANCj5vcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRl eHQuc3VwcG9ydC5BYnN0cmFjdEFwcGxpY2F0aW9uQ29udGV4dC4NCj5yZWZyZXNoKEFic3RyYWN0 QXBwbGljYXRpb25Db250ZXh0LmphdmE6MjY0KQ0KPj4gYXQgDQo+b3JnLnNwcmluZ2ZyYW1ld29y ay5jb250ZXh0LnN1cHBvcnQuQ2xhc3NQYXRoWG1sQXBwbGljYXRpb25Db250DQo+ZXh0Ljxpbml0 PihDbGFzc1BhdGhYbWxBcHBsaWNhdGlvbkNvbnRleHQuamF2YTo1OCkNCj4+IGF0IA0KPm9yZy5t dWxlLmV4dHJhcy5zcHJpbmcuY29uZmlnLlNwcmluZ0NvbmZpZ3VyYXRpb25CdWlsZGVyLmNvbmZp Zw0KPnVyZShTcHJpbmdDb25maWd1cmF0aW9uQnVpbGRlci5qYXZhOjQwKQ0KPj4gYXQgDQo+b3Jn Lm11bGUudGNrLkFic3RyYWN0Q29uZmlnQnVpbGRlclRlc3RDYXNlLnNldFVwKEFic3RyYWN0Q29u ZmlnDQo+QnVpbGRlclRlc3RDYXNlLmphdmE6NTMpDQo+PiBhdCANCj5jb20uaW50ZWxsaWoucnQu ZXhlY3V0aW9uLmp1bml0Mi5KVW5pdFN0YXJ0ZXIubWFpbihKVW5pdFN0YXJ0ZXINCj4uamF2YToz MSkNCj4+IGF0IHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UwKE5h dGl2ZSBNZXRob2QpDQo+PiBhdCANCj5zdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3Nvcklt cGwuaW52b2tlKE5hdGl2ZU1ldGhvZEFjY2Vzc28NCj5ySW1wbC5qYXZhOjM5KQ0KPj4gYXQgDQo+ c3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbC5pbnZva2UoRGVsZWdhdGlu Z01ldGhvDQo+ZEFjY2Vzc29ySW1wbC5qYXZhOjI1KQ0KPj4gYXQgDQo+Y29tLmludGVsbGlqLnJ0 LmV4ZWN1dGlvbi5hcHBsaWNhdGlvbi5BcHBNYWluLm1haW4oQXBwTWFpbi5qYXZhOjc4KQ0KPj4g DQo+PkNoZWVycywNCj4+IA0KPj5Sb3NzDQo+PiANCj4+LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0t LS0gDQo+PkZyb206IHNwcmluZ2ZyYW1ld29yay1kZXZlbG9wZXItYWRtaW5AbGlzdHMuc291cmNl Zm9yZ2UubmV0IA0KPm9uIGJlaGFsZiBvZiBqw7xyZ2VuIGjDtmxsZXIgW3dlcmszQVRdIA0KPj5T ZW50OiBUaHUgOC8wNy8yMDA0IDEwOjQ1IEFNIA0KPj5Ubzogc3ByaW5nZnJhbWV3b3JrLWRldmVs b3BlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgDQo+PkNjOiANCj4+U3ViamVjdDogUmU6IFtTcHJp bmdmcmFtZXdvcmstZGV2ZWxvcGVyXSBJbnRlcmNlcHRpbmcgYmVhbiBjcmVhdGlvbj8NCj4+DQo+ Pg0KPj4NCj4+CUkgcmVjb21tZW5kIEJlYW5OYW1lQXdhcmUgdG9vLCBpZiB5b3UganVzdCB3YW50 IHRvIA0KPmJlY29tZSBhd2FyZSBvZiB0aGUgYmVhbiBuYW1lLg0KPj4JDQo+PglGb3IgZ2VuZXJh bCBwb3N0LXByb2Nlc3Npbmcgb2YgYSBuZXdseSBjcmVhdGVkIGJlYW4gDQo+aW5zdGFuY2UsIHlv dSBjb3VsZCBkZWZpbmUgYSBCZWFuUG9zdFByb2Nlc3NvciBpbiB0aGUgY29udGV4dCwgDQo+d2hp Y2ggd2lsbCBhdXRvbWF0aWNhbGx5IGludGVyY2VwdCBhbGwgYmVhbnMgdGhhdCB0aGlzIGNvbnRl eHQgY3JlYXRlczoNCj4+CQ0KPj4JDQo+aHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL2Rv Y3MvYXBpL29yZy9zcHJpbmdmcmFtZXdvcmsvYmVhDQo+bnMvZmFjdG9yeS9jb25maWcvQmVhblBv c3RQcm9jZXNzb3IuaHRtbA0KPj4JDQo+PglKdWVyZ2VuDQo+PgkNCj4+CQ0KPj4JLS0tLS1Pcmln aW5hbCBNZXNzYWdlLS0tLS0NCj4+CUZyb206IHNwcmluZ2ZyYW1ld29yay1kZXZlbG9wZXItYWRt aW5AbGlzdHMuc291cmNlZm9yZ2UubmV0DQo+PgkNCj5bbWFpbHRvOnNwcmluZ2ZyYW1ld29yay1k ZXZlbG9wZXItYWRtaW5AbGlzdHMuc291cmNlZm9yZ2UubmV0XU9uIEJlaGFsZg0KPj4JT2YgQ2hp c3RvcGhlIFZhbmZsZXRlcmVuDQo+PglTZW50OiBUaHVyc2RheSwgSnVseSAwOCwgMjAwNCAxMToy NiBBTQ0KPj4JVG86IHNwcmluZ2ZyYW1ld29yay1kZXZlbG9wZXJAbGlzdHMuc291cmNlZm9yZ2Uu bmV0DQo+PglTdWJqZWN0OiBSZTogW1NwcmluZ2ZyYW1ld29yay1kZXZlbG9wZXJdIEludGVyY2Vw dGluZyANCj5iZWFuIGNyZWF0aW9uPw0KPj4JDQo+PgkNCj4+CU9uIFRodXJzZGF5IDA4IEp1bHkg MjAwNCAxMToxMiwgTWFzb24sIFJvc3Mgd3JvdGU6DQo+Pgk+IEhpLA0KPj4JPiBJIGNyZWF0ZSBh IGxvdCBvZiBkaWZmZXJlbnQgdHlwZXMgb2Ygb2JqZWN0IGluIGFuIA0KPmFwcGxpY2F0aW9uQ29u dGV4dCwgYWxsDQo+Pgk+IG9mIHdoaWNoIGhhdmUgYSBuYW1lIHByb3BlcnR5IGkuZS4NCj4+CT4N Cj4+CT4gPGJlYW4gaWQ9Imptc0Nvbm5lY3RvciIgDQo+Y2xhc3NOYW1lPSJvcmcubXVsZS5wcm92 aWRlcnMuam1zLkptc0Nvbm5lY3RvciI+DQo+Pgk+ICAgICA8cHJvcGVydHkgDQo+bmFtZT0ibmFt ZSI+PHZhbHVlPmptc0Nvbm5lY3RvcjwvdmFsdWU+PC9wcm9wZXJ0eT4NCj4+CT4gPC9iZWFuPg0K Pj4JPg0KPj4JPiBJIGRvbid0IGxpa2UgaGF2aW5nIHRvIGluY2x1ZGUgdGhlIG5hbWUgcHJvcGVy dHkgaWYgDQo+dGhlcmUgaXMgYSBjaGFuY2UgSQ0KPj4JPiBjb3VsZCB1c2UgdGhlIGJlYW4gaWQg aW5zdGVhZC4gSXMgdGhlcmUgYW55IHdheSBJIGNhbiANCj51bmlmb3JtbHkgaW50ZXJjZXB0DQo+ Pgk+IGJlYW4gY3JlYXRpb24gaW4gdGhlIGNvbnRleHQgc28gdGhhdCBzdHJhaWdodCBhZnRlciAN Cj50aGUgY29uc3RydWN0b3IgaXMNCj4+CT4gY2FsbGVkIEkgY2FuIGdldCBob2xkIG9mIHRoZSBi ZWFuIGlkIGFuZCBzZXQgaXQgb24gbXkgb2JqZWN0Pw0KPj4JPg0KPj4JPiBJIGNhbid0IHdhaXQg dW50aWwgdGhlIGFwcGxpY2F0aW9uQ29udGV4dCBpcyANCj5jb25maWd1cmVkIGFuZCB0aGVuIHNl dCB0aGUNCj4+CT4gbmFtZXMgYXMgc29tZSBvYmplY3RzIGhhdmUgYSBjb2xsZWN0aW9uIG9mIG90 aGVyIA0KPm9iamVjdHMgd2hpY2ggYXJlIGtleWVkDQo+Pgk+IGFnYWluc3QgdGhlIG5hbWUuDQo+ Pgk+DQo+PgkNCj4+CVlvdSBjb3VsZCBpbXBsZW1lbnQgQmVhbk5hbWVBd2FyZToNCj4+CQ0KPGh0 dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9kb2NzL2FwaS9vcmcvc3ByaW5nZnJhbWV3b3Jr L2JlYW5zL2ZhY3RvcnkvQmVhbk5hbWVBd2FyZS5odG1sPg0KPgkNCj4JLS0NCj4JS2luZCByZWdh cmRzLA0KPglDaHJpc3RvcGhlIFZhbmZsZXRlcmVuDQo+CQ0KPgkNCj4JLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPglUaGlzIFNGLk5ldCBl bWFpbCBzcG9uc29yZWQgYnkgQmxhY2sgSGF0IEJyaWVmaW5ncyAmIFRyYWluaW5nLg0KPglBdHRl bmQgQmxhY2sgSGF0IEJyaWVmaW5ncyAmIFRyYWluaW5nLCBMYXMgVmVnYXMgSnVseSAyNC0yOSAt DQo+CWRpZ2l0YWwgc2VsZiBkZWZlbnNlLCB0b3AgdGVjaG5pY2FsIGV4cGVydHMsIG5vIHZlbmRv ciBwaXRjaGVzLA0KPgl1bm1hdGNoZWQgbmV0d29ya2luZyBvcHBvcnR1bml0aWVzLiBWaXNpdCB3 d3cuYmxhY2toYXQuY29tDQo+CV9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fDQo+CVNwcmluZ2ZyYW1ld29yay1kZXZlbG9wZXIgbWFpbGluZyBsaXN0DQo+CVNw cmluZ2ZyYW1ld29yay1kZXZlbG9wZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0DQo+CWh0dHBzOi8v bGlzdHMuc291cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL3NwcmluZ2ZyYW1ld29yay1kZXZl bG9wZXINCj4JDQo+CQ0KPgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQo+CVRoaXMgU0YuTmV0IGVtYWlsIHNwb25zb3JlZCBieSBCbGFjayBI YXQgQnJpZWZpbmdzICYgVHJhaW5pbmcuDQo+CUF0dGVuZCBCbGFjayBIYXQgQnJpZWZpbmdzICYg VHJhaW5pbmcsIExhcyBWZWdhcyBKdWx5IDI0LTI5IC0NCj4JZGlnaXRhbCBzZWxmIGRlZmVuc2Us IHRvcCB0ZWNobmljYWwgZXhwZXJ0cywgbm8gdmVuZG9yIHBpdGNoZXMsDQo+CXVubWF0Y2hlZCBu ZXR3b3JraW5nIG9wcG9ydHVuaXRpZXMuIFZpc2l0IHd3dy5ibGFja2hhdC5jb20NCj4JX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4JU3ByaW5nZnJhbWV3 b3JrLWRldmVsb3BlciBtYWlsaW5nIGxpc3QNCj4JU3ByaW5nZnJhbWV3b3JrLWRldmVsb3BlckBs aXN0cy5zb3VyY2Vmb3JnZS5uZXQNCj4JaHR0cHM6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlz dHMvbGlzdGluZm8vc3ByaW5nZnJhbWV3b3JrLWRldmVsb3Blcg0KPgkNCj4NCj4gIA0KPg0KDQoN Cg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KVGhpcyBTRi5OZXQgZW1haWwgc3BvbnNvcmVkIGJ5IEJsYWNrIEhhdCBCcmllZmluZ3MgJiBU cmFpbmluZy4NCkF0dGVuZCBCbGFjayBIYXQgQnJpZWZpbmdzICYgVHJhaW5pbmcsIExhcyBWZWdh cyBKdWx5IDI0LTI5IC0gDQpkaWdpdGFsIHNlbGYgZGVmZW5zZSwgdG9wIHRlY2huaWNhbCBleHBl cnRzLCBubyB2ZW5kb3IgcGl0Y2hlcywgDQp1bm1hdGNoZWQgbmV0d29ya2luZyBvcHBvcnR1bml0 aWVzLiBWaXNpdCB3d3cuYmxhY2toYXQuY29tDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXw0KU3ByaW5nZnJhbWV3b3JrLWRldmVsb3BlciBtYWlsaW5nIGxp c3QNClNwcmluZ2ZyYW1ld29yay1kZXZlbG9wZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0DQpodHRw czovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9zcHJpbmdmcmFtZXdvcmst ZGV2ZWxvcGVyDQo= |
|
From: Mason, R. <ros...@vi...> - 2004-07-13 05:26:29
|
I think what you are suggesting is an implementation detail that can be =
implemented in a specific multicaster rather than introducing a change =
to the core api.=20
I've done something similar in the MuleEventMulticaster for Spring, =
where the listener can supply an array of subscriptions i.e.
public class MuleSubscriptionEventListener implements MuleEventListener =
(implements ApplicationEventListener)
{
public String[] getSubscriptions();
}
have a look at =
http://cvs.sourceforge.net/viewcvs.py/mule/mule-extras/spring/src/java/or=
g/mule/extras/spring/events/
This allows listeners to subscribe on a filtered set of Mule events and =
supports wildcards. so say mule receives jms events on =
customer.support.queue and customer. help and email events addressed to =
su...@my..., your listener could receive all email events and =
jms message on customer.support.queue using -
<bean id=3D"myListener" class=3D"com.foo.MyListener">
<property name=3D"subscriptions">
<list>
<value>customer.support.*</value>
<value>su...@my...</value>
</list>
</property>
</bean>
>-----Original Message-----
>From: spr...@li...
>[mailto:spr...@li...]On Behalf
>Of Keith Donald
>Sent: Tuesday, 13 July 2004 1:57 PM
>To: spring-dev
>Subject: [Springframework-developer] application event filters
>
>
>Have we considered adding support for application event=20
>filters, to allow registered listeners to filter events of=20
>interest? I think that would be a nice feature, and would=20
>be simplify listener handing code, as well as improve=20
>performance.
>=20
>So for example, we could define the following interface:
>=20
>public interface ApplicationEventFilter {
> public boolean isEventOfInterest(ApplicationEvent e);
>}
>=20
>public class LifecycleApplicationEventFilter {
> public boolean isEventOfInterest(ApplicationEvent e) {
> return (e instanceof LifecycleApplicationEvent);
> }
>}
>=20
>public interface ApplicationEventMulticaster {
> public void addApplicationListener(ApplicationListener=20
>listener, ApplicationEventFilter filter);
>}
>=20
>public class SimpleApplicationEventMulticaster {
>=20
> public void addApplicationListener
>(ApplicationListener listener, ApplicationEventFilter=20
>filter) {
> this.applicationEventSubscriptions.add(new=20
>ApplicationEventSubscription(listener, filter));
> }
>=20
> public void multicastEvent(ApplicationEvent event) {
> Iterator it =3D=20
>this.applicationEventSubscriptions.iterator();
> while (it.hasNext()) {
> ApplicationEventSubscription subscription =3D=20
>(ApplicationEventSubscription) it.next();
> if (subscription.isEventOfInterest(event)) {
> subscription.broadcast(event);
> } =20
> }
> }
>}
>=20
>This is analagous to JMX's=20
>NotificationListener/NotificationFilter constructs
>
>
>-------------------------------------------------------
>This SF.Net email sponsored by Black Hat Briefings & Training.
>Attend Black Hat Briefings & Training, Las Vegas July 24-29 -=20
>digital self defense, top technical experts, no vendor pitches,=20
>unmatched networking opportunities. Visit www.blackhat.com
>_______________________________________________
>Springframework-developer mailing list
>Spr...@li...
>https://lists.sourceforge.net/lists/listinfo/springframework-developer
>
|
|
From: Mason, R. <ros...@vi...> - 2004-07-13 05:04:58
|
>-----Original Message----- >From: spr...@li... >[mailto:spr...@li...]On Behalf >Of Keith Donald >Sent: Tuesday, 13 July 2004 1:56 PM >To: spring-dev >Subject: [Springframework-developer] application event multicaster > > >I have a need to inject a handle to an application context's=20 >application event multicaster for the purpose of wiring up=20 >application listeners that are instantiated post-startup --=20 >programatically -- within my application. I need this to=20 >happen automagically, e.g where the user doesn't have to=20 >remember to do this. What's the best way to achieve this? =20 >The best I can come up with is to require manual=20 >instantation of an ApplicationEventMulticaster bean in the=20 >context, and inject it automatically using a=20 >BeanPostProcessor (e.g ApplicationEventMulticasterAware). =20 >Is there anyway to get a handle to the default multicaster=20 >associated with an ApplicationContext after the application=20 >has started? You can get the multicaster from the context by calling - applicationContext.getBean(AbstractApplicationContext.APPLICATION_EVENT_M= ULTICASTER_BEAN_NAME); As for setting listeners on the multicaster, Spring already adds any = listeners in the context to the multicaster automatically on startup and = refresh. If you want to programmatically you will need to do it via the = multicaster. Cheers, Ross >=20 >I've considered just having the container instantiate the=20 >ApplicationListener objects in question, but I really want=20 >control over the instantation process--I have to make sure=20 >these objects are prototypes, and I'm slightly concerned=20 >about users forgetting to mark them 'singleton=3Dfalse' within=20 >the context.. this option is not out, but I am preferring=20 >using another object as the "container / factory" for the=20 >prototypes it produces to simplify what the user has to=20 >configure... (it's the view descriptor / view case I emailed=20 >on earlier --> view descriptors produce view instances,=20 >views are prototypes and typically are application event=20 >listeners...) >=20 >Thanks, >Keith >=20 > > >------------------------------------------------------- >This SF.Net email sponsored by Black Hat Briefings & Training. >Attend Black Hat Briefings & Training, Las Vegas July 24-29 -=20 >digital self defense, top technical experts, no vendor pitches,=20 >unmatched networking opportunities. Visit www.blackhat.com >_______________________________________________ >Springframework-developer mailing list >Spr...@li... >https://lists.sourceforge.net/lists/listinfo/springframework-developer > |
|
From: Keith D. <kei...@in...> - 2004-07-13 03:56:58
|
Have we considered adding support for application event
filters, to allow registered listeners to filter events of
interest? I think that would be a nice feature, and would
be simplify listener handing code, as well as improve
performance.
So for example, we could define the following interface:
public interface ApplicationEventFilter {
public boolean isEventOfInterest(ApplicationEvent e);
}
public class LifecycleApplicationEventFilter {
public boolean isEventOfInterest(ApplicationEvent e) {
return (e instanceof LifecycleApplicationEvent);
}
}
public interface ApplicationEventMulticaster {
public void addApplicationListener(ApplicationListener
listener, ApplicationEventFilter filter);
}
public class SimpleApplicationEventMulticaster {
public void addApplicationListener
(ApplicationListener listener, ApplicationEventFilter
filter) {
this.applicationEventSubscriptions.add(new
ApplicationEventSubscription(listener, filter));
}
public void multicastEvent(ApplicationEvent event) {
Iterator it =
this.applicationEventSubscriptions.iterator();
while (it.hasNext()) {
ApplicationEventSubscription subscription =
(ApplicationEventSubscription) it.next();
if (subscription.isEventOfInterest(event)) {
subscription.broadcast(event);
}
}
}
}
This is analagous to JMX's
NotificationListener/NotificationFilter constructs
|
|
From: Keith D. <kei...@in...> - 2004-07-13 03:56:25
|
I have a need to inject a handle to an application context's application event multicaster for the purpose of wiring up application listeners that are instantiated post-startup -- programatically -- within my application. I need this to happen automagically, e.g where the user doesn't have to remember to do this. What's the best way to achieve this? The best I can come up with is to require manual instantation of an ApplicationEventMulticaster bean in the context, and inject it automatically using a BeanPostProcessor (e.g ApplicationEventMulticasterAware). Is there anyway to get a handle to the default multicaster associated with an ApplicationContext after the application has started? I've considered just having the container instantiate the ApplicationListener objects in question, but I really want control over the instantation process--I have to make sure these objects are prototypes, and I'm slightly concerned about users forgetting to mark them 'singleton=false' within the context.. this option is not out, but I am preferring using another object as the "container / factory" for the prototypes it produces to simplify what the user has to configure... (it's the view descriptor / view case I emailed on earlier --> view descriptors produce view instances, views are prototypes and typically are application event listeners...) Thanks, Keith |
|
From: <al...@jt...> - 2004-07-12 23:24:10
|
<html><head>
<style>
.white { color:#FFFFFF }.index { background-color:#FFFFFF }.index-passed { =
color:#004400 }.index-failed { color:#FF0000; font-weight:bold }.index-head=
er { font-weight:bold }.link { font-family:arial,helvetica,sans-serif; font=
-size:10pt; color:#FFFFFF; text-decoration:none; }.tab-table { margin: 0em =
0em 0.5em 0em; }.tabs { font-family:arial,helvetica,sans-serif; font-size:8=
pt; color:#000000; font-weight:bold; padding: 0em 2em; background-color:#EE=
EEEE; }.tabs-link { color:#000000; text-decoration:none; }.tabs-link:visite=
d { color:#000000; text-decoration:none; }.tabs-selected { font-family:aria=
l,helvetica,sans-serif; font-size:8pt; color:#000000; font-weight:bold; pad=
ding: 0em 2em; }.tabs-selected { border: inset; }.header-title { font-famil=
y:arial,helvetica,sans-serif; font-size:12pt; color:#000000; font-weight:bo=
ld; }.header-label { font-weight:bold; }.header-data { font-family:arial,he=
lvetica,sans-serif; font-size:10pt; color:#000000; }.modifications-data { f=
ont-family:arial,helvetica,sans-serif; font-size:8pt; color:#000000; }.modi=
fications-sectionheader { background-color:#000066; font-family:arial,helve=
tica,sans-serif; font-size:10pt; color:#FFFFFF; }.modifications-oddrow { ba=
ckground-color:#CCCCCC }.modifications-evenrow { background-color:#FFFFCC }=
.changelists-oddrow { background-color:#CCCCCC }.changelists-evenrow { back=
ground-color:#FFFFCC }.changelists-file-spacer { background-color:#FFFFFF }=
.changelists-file-evenrow { background-color:#EEEEEE }.changelists-file-odd=
row { background-color:#FFFFEE }.changelists-file-header { background-color=
:#666666; font-family:arial,helvetica,sans-serif; font-size:8pt; color:#FFF=
FFF; }.compile-data { font-family:arial,helvetica,sans-serif; font-size:8pt=
; color:#000000; }.compile-error-data { font-family:arial,helvetica,sans-se=
rif; font-size:8pt; color:#FF0000; }.compile-warn-data { font-family:arial,=
helvetica,sans-serif; font-size:8pt; color:#CC9900; }.compile-sectionheader=
{ background-color:#000066; font-family:arial,helvetica,sans-serif; font-s=
ize:10pt; color:#FFFFFF; }.distributables-data { font-family:arial,helvetic=
a,sans-serif; font-size:8pt; color:#000000; }.distributables-sectionheader =
{ background-color:#000066; font-family:arial,helvetica,sans-serif; font-si=
ze:10pt; color:#FFFFFF; }.distributables-oddrow { background-color:#CCCCCC =
}.unittests-sectionheader { background-color:#000066; font-family:arial,hel=
vetica,sans-serif; font-size:10pt; color:#FFFFFF; }.unittests-oddrow { back=
ground-color:#CCCCCC }.unittests-data { font-family:arial,helvetica,sans-se=
rif; font-size:8pt; color:#000000; }.unittests-error { font-family:arial,he=
lvetica,sans-serif; font-size:8pt; color:#FF0000; }.checkstyle-oddrow { bac=
kground-color:#CCCCCC }.checkstyle-data { font-family:arial,helvetica,sans-=
serif; font-size:8pt; color:#000000; }.checkstyle-sectionheader { backgroun=
d-color:#000066; font-family:arial,helvetica,sans-serif; font-size:10pt; co=
lor:#FFFFFF; }
</style>
</head><body>
<p>
<table width=3D"98%" border=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=
=3D"center"><tr><td class=3D"header-title">BUILD COMPLETE - =
build.52</td></tr><tr><td class=3D"header-data"><span class=
=3D"header-label">Date of build: </span>07/13/2004 00:16:02</td></tr><=
tr><td class=3D"header-data"><span class=3D"header-label">Time to build:&nb=
sp;</span>13 minutes 23 seconds</td></tr><tr><td class=3D"header-data"><spa=
n class=3D"header-label">Last changed: </span>07/12/2004 18:56:20</td>=
</tr><tr><td class=3D"header-data"><span class=3D"header-label">Last log en=
try: </span>polishing</td></tr></table><p>
<table xmlns=3D"http://www.w3.org/TR/html4/strict.dtd" width=3D"98%" border=
=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=3D"center"/><p>
<p>
<table xmlns=3D"http://www.w3.org/TR/html4/strict.dtd" width=3D"98%" border=
=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=3D"center"><tr><td class=
=3D"compile-sectionheader"> Errors/Warnings: (=
6) </td></tr><tr><td><pre class=3D"compile-error-data">N=
ote: Some input files use or override a deprecated API.<br class=3D"none"/>=
Note: Recompile with -deprecation for details.Note: /jteam/build/checkout/s=
pring/spring/mock/org/springframework/mock/web/MockHttpSession.java uses or=
overrides a deprecated API.<br class=3D"none"/>Note: Recompile with -depre=
cation for details.<br class=3D"none"/>Note: Some input files use or overri=
de a deprecated API.<br class=3D"none"/>Note: Recompile with -deprecation f=
or details.<br class=3D"none"/></pre></td></tr></table><p>
<p>
<table width=3D"98%" border=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=
=3D"center"><tr><td colspan=3D"4" class=3D"unittests-sectionheader"> =
Unit Tests: (1470) </td></tr><tr><td><tabl=
e width=3D"98%" border=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=3D"c=
enter"><tr><td class=3D"unittests-data"> failure =
</td><td width=3D"40%" class=3D"unittests-data">testHomePage</td><td width=
=3D"40%" class=3D"unittests-data">org.springframework.apptests.buildtest.Al=
lTests</td></tr></table></td></tr><tr></tr><tr><td colspan=3D"2"> </td=
></tr><tr><td colspan=3D"4" class=3D"unittests-sectionheader"> =
Unit Test Error Details: (1) </td></tr><tr=
><td class=3D"unittests-data" colspan=3D"2"> Test: test=
HomePage</td></tr><tr><td class=3D"unittests-data" colspan=3D"2"> =
Class: org.springframework.apptests.buildtest.AllTests</td></tr>=
<tr><td class=3D"unittests-data" colspan=3D"2"> Type: junit.=
framework.AssertionFailedError</td></tr><tr><td class=3D"unittests-data" co=
lspan=3D"2"> Message: Exception while testing URL http://loc=
alhost:13084/buildtest:java.io.IOException</td></tr><tr><td class=3D"unitte=
sts-error" colspan=3D"2"><pre>junit.framework.AssertionFailedError: Excepti=
on while testing URL http://localhost:13084/buildtest:java.io.IOException<b=
r>=09at org.springframework.apptests.buildtest.AllTests.testHomePage(Unknow=
n Source)<br>=09at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Meth=
od)<br>=09at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccess=
orImpl.java:39)<br>=09at sun.reflect.DelegatingMethodAccessorImpl.invoke(De=
legatingMethodAccessorImpl.java:25)<br></pre></td></tr><tr><td colspan=3D"2=
"> </td></tr></table><p>
<table width=3D"98%" border=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=
=3D"center"><tr><td colspan=3D"4" class=3D"modifications-sectionheader"> =
Modifications since last build: =
(31) </td></tr><tr class=3D"modifications-evenrow"><td =
class=3D"modifications-data">modified</td><td class=3D"modifications-data">=
jhoeller</td><td class=3D"modifications-data">src/org/springframework/sched=
uling/timer/ScheduledTimerTask.java</td><td class=3D"modifications-data">po=
lishing</td></tr><tr class=3D"modifications-oddrow"><td class=3D"modificati=
ons-data">modified</td><td class=3D"modifications-data">jhoeller</td><td cl=
ass=3D"modifications-data">src/org/springframework/scheduling/timer/TimerFa=
ctoryBean.java</td><td class=3D"modifications-data">polishing</td></tr><tr =
class=3D"modifications-evenrow"><td class=3D"modifications-data">modified</=
td><td class=3D"modifications-data">jhoeller</td><td class=3D"modifications=
-data">/changelog.txt</td><td class=3D"modifications-data">apply "checkWrit=
eOperationAllowed" before all write operations in HibernateTemplate</td></t=
r><tr class=3D"modifications-oddrow"><td class=3D"modifications-data">modif=
ied</td><td class=3D"modifications-data">jhoeller</td><td class=3D"modifica=
tions-data">src/org/springframework/orm/hibernate/HibernateTemplate.java</t=
d><td class=3D"modifications-data">added checkWriteOperationAllowed method,=
applied for write operations</td></tr><tr class=3D"modifications-evenrow">=
<td class=3D"modifications-data">modified</td><td class=3D"modifications-da=
ta">jhoeller</td><td class=3D"modifications-data">test/org/springframework/=
orm/hibernate/HibernateTemplateTests.java</td><td class=3D"modifications-da=
ta">added checkWriteOperationAllowed method, applied for write operations</=
td></tr><tr class=3D"modifications-oddrow"><td class=3D"modifications-data"=
>modified</td><td class=3D"modifications-data">kdonald</td><td class=3D"mod=
ifications-data">sandbox/src/org/springframework/rules/values/ValueProperty=
ChangeListenerMediator.java</td><td class=3D"modifications-data">fixed bug =
in value change events not being published to form object listeners; helper=
methods in enum support classes</td></tr><tr class=3D"modifications-evenro=
w"><td class=3D"modifications-data">modified</td><td class=3D"modifications=
-data">kdonald</td><td class=3D"modifications-data">sandbox/src/org/springf=
ramework/enum/LetterCodedEnum.java</td><td class=3D"modifications-data">fix=
ed bug in value change events not being published to form object listeners;=
helper methods in enum support classes</td></tr><tr class=3D"modifications=
-oddrow"><td class=3D"modifications-data">modified</td><td class=3D"modific=
ations-data">kdonald</td><td class=3D"modifications-data">sandbox/src/org/s=
pringframework/enum/ShortCodedEnum.java</td><td class=3D"modifications-data=
">fixed bug in value change events not being published to form object liste=
ners; helper methods in enum support classes</td></tr><tr class=3D"modifica=
tions-evenrow"><td class=3D"modifications-data">modified</td><td class=3D"m=
odifications-data">kdonald</td><td class=3D"modifications-data">sandbox/src=
/org/springframework/enum/StringCodedEnum.java</td><td class=3D"modificatio=
ns-data">fixed bug in value change events not being published to form objec=
t listeners; helper methods in enum support classes</td></tr><tr class=3D"m=
odifications-oddrow"><td class=3D"modifications-data">modified</td><td clas=
s=3D"modifications-data">dkopylenko</td><td class=3D"modifications-data">sr=
c/org/springframework/aop/interceptor/TraceInterceptor.java</td><td class=
=3D"modifications-data">Formatted the source</td></tr><tr class=3D"modifica=
tions-evenrow"><td class=3D"modifications-data">modified</td><td class=3D"m=
odifications-data">dkopylenko</td><td class=3D"modifications-data">src/org/=
springframework/aop/interceptor/TraceInterceptor.java</td><td class=3D"modi=
fications-data">Formatted the source</td></tr><tr class=3D"modifications-od=
drow"><td class=3D"modifications-data">added</td><td class=3D"modifications=
-data">johnsonr</td><td class=3D"modifications-data">docs/reference/src/asp=
ectj.xml</td><td class=3D"modifications-data">First version</td></tr><tr cl=
ass=3D"modifications-evenrow"><td class=3D"modifications-data">modified</td=
><td class=3D"modifications-data">johnsonr</td><td class=3D"modifications-d=
ata">docs/reference/src/index.xml</td><td class=3D"modifications-data">Adde=
d AspectJ chapter</td></tr><tr class=3D"modifications-oddrow"><td class=3D"=
modifications-data">modified</td><td class=3D"modifications-data">jhoeller<=
/td><td class=3D"modifications-data">src/org/springframework/ui/freemarker/=
FreeMarkerTemplateUtils.java</td><td class=3D"modifications-data">added Mai=
lPreparationException</td></tr><tr class=3D"modifications-evenrow"><td clas=
s=3D"modifications-data">modified</td><td class=3D"modifications-data">jhoe=
ller</td><td class=3D"modifications-data">src/org/springframework/ui/veloci=
ty/VelocityEngineUtils.java</td><td class=3D"modifications-data">added Mail=
PreparationException</td></tr><tr class=3D"modifications-oddrow"><td class=
=3D"modifications-data">added</td><td class=3D"modifications-data">jhoeller=
</td><td class=3D"modifications-data">src/org/springframework/mail/MailPrep=
arationException.java</td><td class=3D"modifications-data">added MailPrepar=
ationException</td></tr><tr class=3D"modifications-evenrow"><td class=3D"mo=
difications-data">modified</td><td class=3D"modifications-data">jhoeller</t=
d><td class=3D"modifications-data">src/org/springframework/orm/hibernate/su=
pport/OpenSessionInViewFilter.java</td><td class=3D"modifications-data">cha=
nged lookupSessionFactory log to debug level</td></tr><tr class=3D"modifica=
tions-oddrow"><td class=3D"modifications-data">modified</td><td class=3D"mo=
difications-data">trisberg</td><td class=3D"modifications-data">src/org/spr=
ingframework/jdbc/core/JdbcTemplate.java</td><td class=3D"modifications-dat=
a">added support for retrieving auto generated keys to SqlUpdate and JdbcTe=
mplate</td></tr><tr class=3D"modifications-evenrow"><td class=3D"modificati=
ons-data">modified</td><td class=3D"modifications-data">trisberg</td><td cl=
ass=3D"modifications-data">src/org/springframework/jdbc/core/JdbcTemplate.j=
ava</td><td class=3D"modifications-data">added support for retrieving auto =
generated keys to SqlUpdate and JdbcTemplate</td></tr><tr class=3D"modifica=
tions-oddrow"><td class=3D"modifications-data">modified</td><td class=3D"mo=
difications-data">kdonald</td><td class=3D"modifications-data">sandbox/src/=
org/springframework/rules/values/ValidationEvent.java</td><td class=3D"modi=
fications-data">toString method</td></tr><tr class=3D"modifications-evenrow=
"><td class=3D"modifications-data">modified</td><td class=3D"modifications-=
data">trisberg</td><td class=3D"modifications-data">src/org/springframework=
/jdbc/object/BatchSqlUpdate.java</td><td class=3D"modifications-data">added=
check to make sure that object array containing the parameters is not reus=
ed</td></tr><tr class=3D"modifications-oddrow"><td class=3D"modifications-d=
ata">modified</td><td class=3D"modifications-data">kdonald</td><td class=3D=
"modifications-data">sandbox/src/org/springframework/rules/predicates/beans=
/AbstractBeanPropertyExpression.java</td><td class=3D"modifications-data">r=
elaxed final constraint on AbstractBeanPropertyExpression</td></tr><tr clas=
s=3D"modifications-evenrow"><td class=3D"modifications-data">modified</td><=
td class=3D"modifications-data">trisberg</td><td class=3D"modifications-dat=
a">/changelog.txt</td><td class=3D"modifications-data">added support for re=
trieving auto generated keys to SqlUpdate and JdbcTemplate</td></tr><tr cla=
ss=3D"modifications-oddrow"><td class=3D"modifications-data">modified</td><=
td class=3D"modifications-data">trisberg</td><td class=3D"modifications-dat=
a">test/org/springframework/jdbc/object/SqlUpdateTestSuite.java</td><td cla=
ss=3D"modifications-data">added support for retrieving auto generated keys =
to SqlUpdate and JdbcTemplate</td></tr><tr class=3D"modifications-evenrow">=
<td class=3D"modifications-data">modified</td><td class=3D"modifications-da=
ta">trisberg</td><td class=3D"modifications-data">src/org/springframework/j=
dbc/core/JdbcOperations.java</td><td class=3D"modifications-data">added sup=
port for retrieving auto generated keys to SqlUpdate and JdbcTemplate</td><=
/tr><tr class=3D"modifications-oddrow"><td class=3D"modifications-data">mod=
ified</td><td class=3D"modifications-data">trisberg</td><td class=3D"modifi=
cations-data">src/org/springframework/jdbc/core/JdbcTemplate.java</td><td c=
lass=3D"modifications-data">added support for retrieving auto generated key=
s to SqlUpdate and JdbcTemplate</td></tr><tr class=3D"modifications-evenrow=
"><td class=3D"modifications-data">modified</td><td class=3D"modifications-=
data">trisberg</td><td class=3D"modifications-data">src/org/springframework=
/jdbc/core/PreparedStatementCreatorFactory.java</td><td class=3D"modificati=
ons-data">added support for retrieving auto generated keys to SqlUpdate and=
JdbcTemplate</td></tr><tr class=3D"modifications-oddrow"><td class=3D"modi=
fications-data">modified</td><td class=3D"modifications-data">trisberg</td>=
<td class=3D"modifications-data">src/org/springframework/jdbc/object/RdbmsO=
peration.java</td><td class=3D"modifications-data">added support for retrie=
ving auto generated keys to SqlUpdate and JdbcTemplate</td></tr><tr class=
=3D"modifications-evenrow"><td class=3D"modifications-data">modified</td><t=
d class=3D"modifications-data">trisberg</td><td class=3D"modifications-data=
">src/org/springframework/jdbc/object/SqlOperation.java</td><td class=3D"mo=
difications-data">added support for retrieving auto generated keys to SqlUp=
date and JdbcTemplate</td></tr><tr class=3D"modifications-oddrow"><td class=
=3D"modifications-data">modified</td><td class=3D"modifications-data">trisb=
erg</td><td class=3D"modifications-data">src/org/springframework/jdbc/objec=
t/SqlUpdate.java</td><td class=3D"modifications-data">added support for ret=
rieving auto generated keys to SqlUpdate and JdbcTemplate</td></tr><tr clas=
s=3D"modifications-evenrow"><td class=3D"modifications-data">modified</td><=
td class=3D"modifications-data">markpollack</td><td class=3D"modifications-=
data">docs/reference/src/jms.xml</td><td class=3D"modifications-data">more =
updates...</td></tr></table><p>
<table width=3D"98%" border=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=
=3D"center"><tr><td class=3D"distributables-sectionheader"> =
Deployments by this build: (8) </td><=
/tr><tr><td class=3D"distributables-data">Building jar: /jteam/build/checko=
ut/spring/spring/dist/spring.jar</td></tr><tr class=3D"distributables-oddro=
w"><td class=3D"distributables-data">Building war: /jteam/build/checkout/sp=
ring/spring/autobuilds/apps/buildtest/dist/buildtest.war</td></tr><tr><td c=
lass=3D"distributables-data">Building war: /jteam/build/checkout/spring/spr=
ing/autobuilds/apps/buildtest/dist/buildtest.war</td></tr><tr class=3D"dist=
ributables-oddrow"><td class=3D"distributables-data">Building war: /jteam/b=
uild/checkout/spring/spring/autobuilds/apps/buildtest/dist/buildtest.war</t=
d></tr><tr><td class=3D"distributables-data">Building jar: /jteam/build/che=
ckout/spring/spring/autobuilds/apps/jpetstore/war/WEB-INF/lib/jpetstore.jar=
</td></tr><tr class=3D"distributables-oddrow"><td class=3D"distributables-d=
ata">Building war: /jteam/build/checkout/spring/spring/autobuilds/apps/jpet=
store/dist/jpetstore.war</td></tr><tr><td class=3D"distributables-data">Bui=
lding jar: /jteam/build/checkout/spring/spring/autobuilds/apps/jpetstore/wa=
r/WEB-INF/lib/jpetstore.jar</td></tr><tr class=3D"distributables-oddrow"><t=
d class=3D"distributables-data">Building war: /jteam/build/checkout/spring/=
spring/autobuilds/apps/jpetstore/dist/jpetstore.war</td></tr></table>
</body></html> |
|
From: THOMAS, J. (SBCSI) <jt...@sb...> - 2004-07-12 18:13:48
|
Hello All,
Is there a plan to use XML schema and XSI type for defining the beans,
Currently we have only a fixed XML tags, it will be great if spring supports
XSI type and schema and also allows for extension ie the developer can
create his own type (Which could be an extension for the Abstract Type) and
then we can create our own factory and plug it into the spring framework
itself, Here is an example.
<object id="testBean" xsi:type="Bean"
class-name="TestBean">
<property xsi:type="ValueProperty" name="capacity">
<value>4</value>
</property>
<property name="testB" xsi:type="ObjectProperty">
<object xsi:type="ObjectRef" refid="helper.testBean1"/>
</property>
</object>
Any takers ??.
Thanks
-Jayant
|
|
From: Rob H. <ro...@ca...> - 2004-07-12 16:32:28
|
All, I have the basics of some JMX support for Spring which, with consent, I would like to check into sandbox. Currently the configuration supports exposure of any Spring bean as JMX MBean using Model MBeans. The class model supports the notion of a metadata assembler which is responsible for creating the Model MBean metadata and also the notion of an invoker which is responsible for invoking methods on the managed resource. Currently I have a metadata assembler that uses reflection and exposes all methods as JMX operations and all JavaBean style properties as JMX attributes. I plan to have an assembler based on Commons Attributes that allows for more control over bean exposure. I have two invokers, one that uses simple reflection and the other that uses Cglib. I want to get this in and see what everyone thinks and gather some more input. Most of this week is taken up for me with spec drafting and a move to a new office, but next week I will be in a position to put in 4-5 solid days on the JMX integration. Rob |
|
From: Keith D. <kd...@cs...> - 2004-07-11 08:53:27
|
Spring rich client now has support for instantiating a single logical =
view as needed, for display in applications with multiple windows open =
at the same time.
In a previous e-mail I mentioned that the cardinality of the View object =
was wrong, where a "View" in our case is a panel like component =
displayed on a page within a window in a spring rich client application =
(and a component that typically supports some navigation / browsing use =
case).
Specifically, what was wrong was the following:
View instances -- which encapsulate the creation and configuration of =
the underlying GUI control, and also register commands (controllers) =
that interact with a business/domain layer in response to user events -- =
were treated as singletons, instantiated directly in a spring =
application context. This was bad, as we must provide support for =
displaying multiple instances of the same view per application, for =
example, in an application that supports multiple windows open at the =
same time.
I've corrected this by introducing the concept of a ViewDescriptor. The =
descriptor is a singleton, defining metadata about a single view. This =
metadata consists of the view's visual properties (display name, =
caption/tooltip, icon, etc.), the classname of the actual View =
implementation, and any properties that should be injected when a new =
view instance is asked to be instantiated by the application. So in =
essence the descriptor acts as a factory for producing and configuring a =
view prototype, when asked on behalf of a requesting client (typically =
an applicaiton page) in order to display the view on an area of a page =
within a particular window.
So if we take a look at the petclinic sample, which I've updated to =
reflect the above, the process of view definition now looks like this in =
a spring application context:
=20
<bean id=3D"vetManagerView"
=
class=3D"org.springframework.richclient.application.ViewDescriptor">
<property name=3D"viewClass">
=
<value>org.springframework.richclient.samples.petclinic.ui.VetManagerView=
</value>
</property>
<property name=3D"viewProperties">
<map>
<entry key=3D"clinic">
<ref bean=3D"clinic"/>
</entry>
</map>
</property>
</bean>
So essentially what happens is, when a rich client application starts, =
the opening application window consults the application lifecycle =
delegate for a inital "perspective" -- or page configuration -- to open. =
The perspective knows how to create and layout an application page, =
where a page can consist of zero to many views, each located at a =
specific area (for example, left, top right, bottom right.) (I should =
point out that currently we only support one view per page, but that =
will be changing soon.) The page delegates to the appropriate view =
descriptor to produce a new view instance, which triggers the =
instantiation & initialization of the viewClass, including injection of =
any viewProperties. The control produced by the view's getControl() =
factory method is then added to the page's display in the right spot. =
This same process basically happens again when a new application window =
is opened, allowing for the same logical view to be displayed in =
multiple windows within the same application instance.
Notice in the above sample there is no specification of locale-sensitive =
properties like the view's name, icon, and tooltip; this is because the =
application object configurer bean post processor handles injecting =
those properties when the descriptor is instantiated, pulling property =
values from a configured message and image source.
Keith |
|
From: <al...@jt...> - 2004-07-10 23:25:41
|
<html><head>
<style>
.white { color:#FFFFFF }.index { background-color:#FFFFFF }.index-passed { =
color:#004400 }.index-failed { color:#FF0000; font-weight:bold }.index-head=
er { font-weight:bold }.link { font-family:arial,helvetica,sans-serif; font=
-size:10pt; color:#FFFFFF; text-decoration:none; }.tab-table { margin: 0em =
0em 0.5em 0em; }.tabs { font-family:arial,helvetica,sans-serif; font-size:8=
pt; color:#000000; font-weight:bold; padding: 0em 2em; background-color:#EE=
EEEE; }.tabs-link { color:#000000; text-decoration:none; }.tabs-link:visite=
d { color:#000000; text-decoration:none; }.tabs-selected { font-family:aria=
l,helvetica,sans-serif; font-size:8pt; color:#000000; font-weight:bold; pad=
ding: 0em 2em; }.tabs-selected { border: inset; }.header-title { font-famil=
y:arial,helvetica,sans-serif; font-size:12pt; color:#000000; font-weight:bo=
ld; }.header-label { font-weight:bold; }.header-data { font-family:arial,he=
lvetica,sans-serif; font-size:10pt; color:#000000; }.modifications-data { f=
ont-family:arial,helvetica,sans-serif; font-size:8pt; color:#000000; }.modi=
fications-sectionheader { background-color:#000066; font-family:arial,helve=
tica,sans-serif; font-size:10pt; color:#FFFFFF; }.modifications-oddrow { ba=
ckground-color:#CCCCCC }.modifications-evenrow { background-color:#FFFFCC }=
.changelists-oddrow { background-color:#CCCCCC }.changelists-evenrow { back=
ground-color:#FFFFCC }.changelists-file-spacer { background-color:#FFFFFF }=
.changelists-file-evenrow { background-color:#EEEEEE }.changelists-file-odd=
row { background-color:#FFFFEE }.changelists-file-header { background-color=
:#666666; font-family:arial,helvetica,sans-serif; font-size:8pt; color:#FFF=
FFF; }.compile-data { font-family:arial,helvetica,sans-serif; font-size:8pt=
; color:#000000; }.compile-error-data { font-family:arial,helvetica,sans-se=
rif; font-size:8pt; color:#FF0000; }.compile-warn-data { font-family:arial,=
helvetica,sans-serif; font-size:8pt; color:#CC9900; }.compile-sectionheader=
{ background-color:#000066; font-family:arial,helvetica,sans-serif; font-s=
ize:10pt; color:#FFFFFF; }.distributables-data { font-family:arial,helvetic=
a,sans-serif; font-size:8pt; color:#000000; }.distributables-sectionheader =
{ background-color:#000066; font-family:arial,helvetica,sans-serif; font-si=
ze:10pt; color:#FFFFFF; }.distributables-oddrow { background-color:#CCCCCC =
}.unittests-sectionheader { background-color:#000066; font-family:arial,hel=
vetica,sans-serif; font-size:10pt; color:#FFFFFF; }.unittests-oddrow { back=
ground-color:#CCCCCC }.unittests-data { font-family:arial,helvetica,sans-se=
rif; font-size:8pt; color:#000000; }.unittests-error { font-family:arial,he=
lvetica,sans-serif; font-size:8pt; color:#FF0000; }.checkstyle-oddrow { bac=
kground-color:#CCCCCC }.checkstyle-data { font-family:arial,helvetica,sans-=
serif; font-size:8pt; color:#000000; }.checkstyle-sectionheader { backgroun=
d-color:#000066; font-family:arial,helvetica,sans-serif; font-size:10pt; co=
lor:#FFFFFF; }
</style>
</head><body>
<p>
<table width=3D"98%" border=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=
=3D"center"><tr><td class=3D"header-title">BUILD COMPLETE - =
build.50</td></tr><tr><td class=3D"header-data"><span class=
=3D"header-label">Date of build: </span>07/11/2004 00:16:03</td></tr><=
tr><td class=3D"header-data"><span class=3D"header-label">Time to build:&nb=
sp;</span>13 minutes 15 seconds</td></tr><tr><td class=3D"header-data"><spa=
n class=3D"header-label">Last changed: </span>07/10/2004 08:39:38</td>=
</tr><tr><td class=3D"header-data"><span class=3D"header-label">Last log en=
try: </span>Added invocableClone() method to ReflectiveMethodInvocatio=
n to allow proceed() tobe called multiple times if necessary (once per clon=
e)</td></tr></table><p>
<table xmlns=3D"http://www.w3.org/TR/html4/strict.dtd" width=3D"98%" border=
=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=3D"center"/><p>
<p>
<table xmlns=3D"http://www.w3.org/TR/html4/strict.dtd" width=3D"98%" border=
=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=3D"center"><tr><td class=
=3D"compile-sectionheader"> Errors/Warnings: (=
6) </td></tr><tr><td><pre class=3D"compile-error-data">N=
ote: Some input files use or override a deprecated API.<br class=3D"none"/>=
Note: Recompile with -deprecation for details.Note: /jteam/build/checkout/s=
pring/spring/mock/org/springframework/mock/web/MockHttpSession.java uses or=
overrides a deprecated API.<br class=3D"none"/>Note: Recompile with -depre=
cation for details.<br class=3D"none"/>Note: Some input files use or overri=
de a deprecated API.<br class=3D"none"/>Note: Recompile with -deprecation f=
or details.<br class=3D"none"/></pre></td></tr></table><p>
<p>
<table width=3D"98%" border=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=
=3D"center"><tr><td colspan=3D"4" class=3D"unittests-sectionheader"> =
Unit Tests: (1470) </td></tr><tr><td><tabl=
e width=3D"98%" border=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=3D"c=
enter"><tr><td class=3D"unittests-data"> failure =
</td><td width=3D"40%" class=3D"unittests-data">testHomePage</td><td width=
=3D"40%" class=3D"unittests-data">org.springframework.apptests.buildtest.Al=
lTests</td></tr></table></td></tr><tr></tr><tr><td colspan=3D"2"> </td=
></tr><tr><td colspan=3D"4" class=3D"unittests-sectionheader"> =
Unit Test Error Details: (1) </td></tr><tr=
><td class=3D"unittests-data" colspan=3D"2"> Test: test=
HomePage</td></tr><tr><td class=3D"unittests-data" colspan=3D"2"> =
Class: org.springframework.apptests.buildtest.AllTests</td></tr>=
<tr><td class=3D"unittests-data" colspan=3D"2"> Type: junit.=
framework.AssertionFailedError</td></tr><tr><td class=3D"unittests-data" co=
lspan=3D"2"> Message: Exception while testing URL http://loc=
alhost:13084/buildtest:java.io.IOException</td></tr><tr><td class=3D"unitte=
sts-error" colspan=3D"2"><pre>junit.framework.AssertionFailedError: Excepti=
on while testing URL http://localhost:13084/buildtest:java.io.IOException<b=
r>=09at org.springframework.apptests.buildtest.AllTests.testHomePage(Unknow=
n Source)<br>=09at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Meth=
od)<br>=09at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccess=
orImpl.java:39)<br>=09at sun.reflect.DelegatingMethodAccessorImpl.invoke(De=
legatingMethodAccessorImpl.java:25)<br></pre></td></tr><tr><td colspan=3D"2=
"> </td></tr></table><p>
<table width=3D"98%" border=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=
=3D"center"><tr><td colspan=3D"4" class=3D"modifications-sectionheader"> =
Modifications since last build: =
(12) </td></tr><tr class=3D"modifications-evenrow"><td =
class=3D"modifications-data">modified</td><td class=3D"modifications-data">=
johnsonr</td><td class=3D"modifications-data">src/org/springframework/aop/f=
ramework/ReflectiveMethodInvocation.java</td><td class=3D"modifications-dat=
a">Added invocableClone() method to ReflectiveMethodInvocation to allow pro=
ceed() tobe called multiple times if necessary (once per clone)</td></tr><t=
r class=3D"modifications-oddrow"><td class=3D"modifications-data">modified<=
/td><td class=3D"modifications-data">johnsonr</td><td class=3D"modification=
s-data">test/org/springframework/aop/framework/AbstractAopProxyTests.java</=
td><td class=3D"modifications-data">Added invocableClone() method to Reflec=
tiveMethodInvocation to allow proceed() tobe called multiple times if neces=
sary (once per clone)</td></tr><tr class=3D"modifications-evenrow"><td clas=
s=3D"modifications-data">modified</td><td class=3D"modifications-data">john=
sonr</td><td class=3D"modifications-data">test/org/springframework/beans/IT=
estBean.java</td><td class=3D"modifications-data">Added invocableClone() me=
thod to ReflectiveMethodInvocation to allow proceed() tobe called multiple =
times if necessary (once per clone)</td></tr><tr class=3D"modifications-odd=
row"><td class=3D"modifications-data">modified</td><td class=3D"modificatio=
ns-data">johnsonr</td><td class=3D"modifications-data">test/org/springframe=
work/beans/TestBean.java</td><td class=3D"modifications-data">Added invocab=
leClone() method to ReflectiveMethodInvocation to allow proceed() tobe call=
ed multiple times if necessary (once per clone)</td></tr><tr class=3D"modif=
ications-evenrow"><td class=3D"modifications-data">deleted</td><td class=3D=
"modifications-data">kdonald</td><td class=3D"modifications-data">sandbox/s=
rc/org/springframework/util/StreamUtils.java</td><td class=3D"modifications=
-data">polishing; removed StreamUtils class--use filecopyutils instead</td>=
</tr><tr class=3D"modifications-oddrow"><td class=3D"modifications-data">mo=
dified</td><td class=3D"modifications-data">kdonald</td><td class=3D"modifi=
cations-data">sandbox/src/org/springframework/util/comparators/CompoundComp=
arator.java</td><td class=3D"modifications-data">polishing; removed StreamU=
tils class--use filecopyutils instead</td></tr><tr class=3D"modifications-e=
venrow"><td class=3D"modifications-data">deleted</td><td class=3D"modificat=
ions-data">kdonald</td><td class=3D"modifications-data">sandbox/test/org/sp=
ringframework/util/StreamUtilsTests.java</td><td class=3D"modifications-dat=
a">polishing; removed StreamUtils class--use filecopyutils instead</td></tr=
><tr class=3D"modifications-oddrow"><td class=3D"modifications-data">modifi=
ed</td><td class=3D"modifications-data">kdonald</td><td class=3D"modificati=
ons-data">sandbox/src/org/springframework/rules/LogicalOperator.java</td><t=
d class=3D"modifications-data">polishing / operator superclass</td></tr><tr=
class=3D"modifications-evenrow"><td class=3D"modifications-data">added</td=
><td class=3D"modifications-data">kdonald</td><td class=3D"modifications-da=
ta">sandbox/src/org/springframework/rules/Operator.java</td><td class=3D"mo=
difications-data">polishing / operator superclass</td></tr><tr class=3D"mod=
ifications-oddrow"><td class=3D"modifications-data">modified</td><td class=
=3D"modifications-data">kdonald</td><td class=3D"modifications-data">sandbo=
x/src/org/springframework/rules/RelationalOperator.java</td><td class=3D"mo=
difications-data">polishing / operator superclass</td></tr><tr class=3D"mod=
ifications-evenrow"><td class=3D"modifications-data">modified</td><td class=
=3D"modifications-data">kdonald</td><td class=3D"modifications-data">sandbo=
x/src/org/springframework/util/comparators/CompoundComparator.java</td><td =
class=3D"modifications-data">polishing / operator superclass</td></tr><tr c=
lass=3D"modifications-oddrow"><td class=3D"modifications-data">modified</td=
><td class=3D"modifications-data">kdonald</td><td class=3D"modifications-da=
ta">sandbox/src/org/springframework/enum/AbstractCodedEnum.java</td><td cla=
ss=3D"modifications-data">polishing / operator superclass</td></tr></table>=
<p>
<table width=3D"98%" border=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=
=3D"center"><tr><td class=3D"distributables-sectionheader"> =
Deployments by this build: (8) </td><=
/tr><tr><td class=3D"distributables-data">Building jar: /jteam/build/checko=
ut/spring/spring/dist/spring.jar</td></tr><tr class=3D"distributables-oddro=
w"><td class=3D"distributables-data">Building war: /jteam/build/checkout/sp=
ring/spring/autobuilds/apps/buildtest/dist/buildtest.war</td></tr><tr><td c=
lass=3D"distributables-data">Building war: /jteam/build/checkout/spring/spr=
ing/autobuilds/apps/buildtest/dist/buildtest.war</td></tr><tr class=3D"dist=
ributables-oddrow"><td class=3D"distributables-data">Building war: /jteam/b=
uild/checkout/spring/spring/autobuilds/apps/buildtest/dist/buildtest.war</t=
d></tr><tr><td class=3D"distributables-data">Building jar: /jteam/build/che=
ckout/spring/spring/autobuilds/apps/jpetstore/war/WEB-INF/lib/jpetstore.jar=
</td></tr><tr class=3D"distributables-oddrow"><td class=3D"distributables-d=
ata">Building war: /jteam/build/checkout/spring/spring/autobuilds/apps/jpet=
store/dist/jpetstore.war</td></tr><tr><td class=3D"distributables-data">Bui=
lding jar: /jteam/build/checkout/spring/spring/autobuilds/apps/jpetstore/wa=
r/WEB-INF/lib/jpetstore.jar</td></tr><tr class=3D"distributables-oddrow"><t=
d class=3D"distributables-data">Building war: /jteam/build/checkout/spring/=
spring/autobuilds/apps/jpetstore/dist/jpetstore.war</td></tr></table>
</body></html> |
|
From: Eric P. <eri...@ea...> - 2004-07-10 21:53:00
|
Keith,
In order to be able to run the run target from the build.xml in
spring-richclient/samples/petclinic
I had to make the following changes:
1) in <workspace>/spring-richclient/samples/petclinic/build.properties
project.package=org.springframework.rcp.samples.petclinic
into
project.package=org.springframework.richclient.samples.petclinic
AND
spring-rcp.dir=../../
into
spring-rcp.dir=../..
2) in <workspace>/spring-richclient/samples/petclinic/build.xml
<fileset dir="${spring-rcp.dist.dir}">
<include name="spring-rcp.jar"/>
</fileset>
into
<fileset dir="${spring-rcp.dist.dir}">
<include name="spring-richclient.jar"/>
</fileset>
-- Eric.
On Sat, 10 Jul 2004 03:58:57 -0400, Keith Donald <kd...@cs...>
wrote:
> Spring Rich Client's new home is now officially on-line at
> http://sourceforge.net/projects/spring-rich-c!
>
> The module and eclipse project name is "spring-richclient".
>
> Unfortunately, sourceforge unix names are limited to 15 characters, so I
> went with "spring-rich-c" for the _internal_ project unix name.
>
> -----
> As an aside, I decided not to go with our familiar "spring-rcp" as
> the internal name for the following reason:
> - The 'rcp' acronym gets confused and often associated with
> eclipse's "rich client platform"; Spring rich client's focus is on the
> enterprise 'thick client' app space, not so much IDE-type apps. So we
> want
> to clearly differentiate ourselves from a platform like eclipse or
> netbeans
> (while there is some overlap, we don't aim to compete with them; probably
> the project we are mostly closely aligned with in terms of goals/focus is
> the very new JDNC initiative launched by Sun, our main differentiator
> being
> we're nicely integrated with the rest of Spring & follow a similar
> programming model...)
>
> -----
>
> Project distributables are prefixed with spring-richclient, for example
> spring-richclient.jar and spring-richclient-resources.jar.
>
> All code should be checked in, compiling, and ready to
> use/evolve/review/critique/play with.
>
> All project dependencies are now stored in the repository; this means
> you no
> longer need to checkout core spring or the spring sandbox to build
> spring-richclient.
>
> I've completed the aforementioned package rename from
> "org.springframework.rcp" to "org.springframework.richclient" - again, I
> apologize for the inconvenience (thankfully this should only happen once,
> and much better to get it right now.)
>
> Keith (me), Ben, Jim, and Scott are added in as developers. You should
> be
> able to commit now.
>
> Good times!
>
>
>
> -------------------------------------------------------
> This SF.Net email sponsored by Black Hat Briefings & Training.
> Attend Black Hat Briefings & Training, Las Vegas July 24-29 -
> digital self defense, top technical experts, no vendor pitches,
> unmatched networking opportunities. Visit www.blackhat.com
> _______________________________________________
> Springframework-developer mailing list
> Spr...@li...
> https://lists.sourceforge.net/lists/listinfo/springframework-developer
--
Nothing is particulary hard if you divide it into small jobs. (Henry Ford)
|
|
From: Keith D. <kd...@cs...> - 2004-07-10 07:59:13
|
Spring Rich Client's new home is now officially on-line at http://sourceforge.net/projects/spring-rich-c! The module and eclipse project name is "spring-richclient". Unfortunately, sourceforge unix names are limited to 15 characters, so I went with "spring-rich-c" for the _internal_ project unix name. =20 ----- As an aside, I decided not to go with our familiar "spring-rcp" as the internal name for the following reason: - The 'rcp' acronym gets confused and often associated with eclipse's "rich client platform"; Spring rich client's focus is on the enterprise 'thick client' app space, not so much IDE-type apps. So we = want to clearly differentiate ourselves from a platform like eclipse or = netbeans (while there is some overlap, we don't aim to compete with them; = probably the project we are mostly closely aligned with in terms of goals/focus = is the very new JDNC initiative launched by Sun, our main differentiator = being we're nicely integrated with the rest of Spring & follow a similar programming model...) ----- Project distributables are prefixed with spring-richclient, for example spring-richclient.jar and spring-richclient-resources.jar. All code should be checked in, compiling, and ready to use/evolve/review/critique/play with. All project dependencies are now stored in the repository; this means = you no longer need to checkout core spring or the spring sandbox to build spring-richclient. I've completed the aforementioned package rename from "org.springframework.rcp" to "org.springframework.richclient" - again, I apologize for the inconvenience (thankfully this should only happen = once, and much better to get it right now.) Keith (me), Ben, Jim, and Scott are added in as developers. You should = be able to commit now. Good times! |