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: Keith D. <kd...@cs...> - 2004-10-22 03:08:10
|
Would the ability to pass dynamic, runtime constructor arguments to a
prototype bean definition be possible?
Here's a case where I felt prototypes usage was inappropriate: =
specifically,
getting a new implementation instance, but adding mutators to the =
returning
interface to support runtime parameterization (that should've been part =
of
the constructor initialization of the implementation.)
Keith
-----Original Message-----
From: Keith Donald [mailto:kd...@cs...]=20
Sent: Thursday, October 21, 2004 11:03 PM
To: 'spr...@li...'
Subject: RE: [Springframework-rcp-dev] Docking window - a few more =
problems
(patch)
Okay I see what you're saying.
After thinking about this, I am against adding post-instantation (one =
time
configuration only) setters to the ApplicationPage interface to support
context-based instantiation of the prototype implementation with a =
default
constructor. This is the Pico in me--I believe such setters should not =
be
part of the public interface.
With that said, I'm willing to compromise. I'll put a default =
constructor
on DefaultApplicationPage. It is protected, but subclasses can extend =
it
with a public variant. DefaultApplicationWindow will then query for the
"applicationPagePrototype" definition and, if it exists, get a new =
instance
and cast it to a DefaultApplicationPage (which has setter mutators.) =
Now,
if you wish not to extend the DefaultApplicationPage class (which you =
must
do to avoid a class cast here), simply override the factory method in
DefaultApplicationWindow to return whatever custom ApplicationPage
implementation you want.
Now if Spring suppors passing dynamic constructor arguments to =
prototypes it
might be a different story. But adding setter mutators to the
ApplicationPage interface is not appropriate--it would be an example of
sacrificing good design for the sake of satisfying the Spring container. =
I
just can't do it. :-(
Keith
-----Original Message-----
From: spr...@li...
[mailto:spr...@li...] On Behalf =
Of
verat
Sent: Friday, October 22, 2004 3:07 AM
To: spr...@li...
Subject: [Springframework-rcp-dev] Docking window - a few more problems
(patch)
Keith,
=A0 I can't implement last changes with ApplicationPage
Problem :
=A0 =A0ApplicationPage haven't empty constructor and I can't add
ApplicationWindow in constructor argument
because 'applicationWindowPrototype' and 'applicationPagePrototype' =
beans
aren't singleton
I define this beans with :
=A0<bean id=3D"applicationWindowPrototype" singleton=3D"false"
=A0
class=3D"org.springframework.richclient.application.support.DefaultApplic=
ation
Window"/>
=A0
=A0<bean id=3D"applicationPagePrototype" singleton=3D"false"
=A0
class=3D"org.springframework.richclient.snpepetclinic.core.IdwApplication=
Page"
/>
createPage method is now :
=A0protected ApplicationPage createPage(ApplicationWindow window,
=A0 =A0 =A0 =A0 =A0 =A0 String pageDescriptorId) {
=A0 =A0 =A0 =A0 ApplicationPageDescriptor descriptor =3D
getPageDescriptor(pageDescriptorId);
=A0 =A0 =A0 =A0 try {
=A0 =A0 =A0 =A0 =A0 =A0 ApplicationPage page =3D
(ApplicationPage)getApplication().getApplicationContext()
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
.getBean(APPLICATION_PAGE_BEAN_ID,
ApplicationPage.class);
=A0 =A0 =A0 =A0 =A0 =A0 page.setApplicationWindow(this);
=A0 =A0 =A0 =A0 =A0 =A0 page.setPageDescriptor(descriptor);
=A0 =A0 =A0 =A0 =A0 =A0 return page;
=A0 =A0 =A0 =A0 }
=A0 =A0 =A0 =A0 catch (NoSuchBeanDefinitionException e) {
=A0 =A0 =A0 =A0 =A0 =A0 return new DefaultApplicationPage(window, =
descriptor);
=A0 =A0 =A0 =A0 }
=A0 =A0 }
I add setApplicationWindow and setPageDescriptor in ApplicationPage
interface and implementation in DefaultApplicationPage
and empty constructor in DefaultApplicationPage
After this inject beans work, but 'create new Window' isn't good because =
I
don't know how I can get current instance active page (or window)
- activeWindow in Application is always first window and I add
windowActivated method in WindowListener for window's control
I need active page instance in OwnerView method when I create form view =
for
double click on owner
I create dynamic view , too and I need method in ApplicationPage
This views can't be defined in xml file because I create view for owner =
with
title - owner name and can't set all owners in xml file
public void showView(String viewName, Icon icon, JComponent component)
This method isn't necessary, but without method I have ugly cast.
In attach are my changes.Please apply=20
Regards
Haris Peco
|
|
From: March, A. <am...@so...> - 2004-10-21 22:56:09
|
Sounds good to me but what deadline will you give me to provide the = oscache support I promised? > -----Original Message----- > From: spr...@li... > [mailto:spr...@li...] On = Behalf > Of j=FCrgen h=F6ller [werk3AT] > Sent: Thursday, October 21, 2004 2:18 PM > To: spr...@li... > Subject: [Springframework-developer] Preparing for 1.1.2 >=20 > Everybody, >=20 > In contrast to the original plan of releasing 1.1.2 in mid November, = I'd > like to suggest to release it signficantly earlier - possibly on Oct = 31st. > We've already collected a quite large number of entries in the = changelog > (most of them minor issues), so I guess it's appropriate to do a = release > ASAP. >=20 > This would give us about 9 days for testing and polishing. Anything = that's > not manageable within that timeframe, no matter if bugfix or = enhancement, > should be deferred. Please test the current CVS contents as thorougly = as > possible, and if you have the chance, address some of the further = issues > currently marked for 1.1.2 in JIRA (in particular the doc ones). >=20 > It seems that there are already enough minor issues and enhancement > suggestions to warrant a 1.1.3 release, possibly at the end of = November. > Alternatively, we could go straight for 1.2 RC1, but I'm not too keen = on > combining the planned number of major new features with that minor = stuff > in one target milestone... I'd rather prefer 1.2 RC1 in early January. >=20 > Thoughts? Alternative suggestions? >=20 > Juergen >=20 >=20 > ------------------------------------------------------- > This SF.net email is sponsored by: IT Product Guide on = ITManagersJournal > Use IT products in your business? Tell us what you think of them. Give = us > Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out > more > http://productguide.itmanagersjournal.com/guidepromo.tmpl > _______________________________________________ > Springframework-developer mailing list > Spr...@li... > https://lists.sourceforge.net/lists/listinfo/springframework-developer |
|
From: Rob H. <ro...@ca...> - 2004-10-21 22:37:47
|
I think it is good idea to 1.1.2 out earlier than planned and I would like to include a fix for no-arg constructor proxies with CGLIB. I have already written the code in Cglib2AopProxy we just need to decide how we are going to modify ProxyFactory and ProxyFactoryBean so that the user can set the constructor args and contstructor arg types - any thoughts? Also how about releasing the initial batch of Jasper reports support? Rob jürgen höller [werk3AT] wrote: >Everybody, > >In contrast to the original plan of releasing 1.1.2 in mid November, I'd like to suggest to release it signficantly earlier - possibly on Oct 31st. We've already collected a quite large number of entries in the changelog (most of them minor issues), so I guess it's appropriate to do a release ASAP. > >This would give us about 9 days for testing and polishing. Anything that's not manageable within that timeframe, no matter if bugfix or enhancement, should be deferred. Please test the current CVS contents as thorougly as possible, and if you have the chance, address some of the further issues currently marked for 1.1.2 in JIRA (in particular the doc ones). > >It seems that there are already enough minor issues and enhancement suggestions to warrant a 1.1.3 release, possibly at the end of November. Alternatively, we could go straight for 1.2 RC1, but I'm not too keen on combining the planned number of major new features with that minor stuff in one target milestone... I'd rather prefer 1.2 RC1 in early January. > >Thoughts? Alternative suggestions? > >Juergen > > >------------------------------------------------------- >This SF.net email is sponsored by: IT Product Guide on ITManagersJournal >Use IT products in your business? Tell us what you think of them. Give us >Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more >http://productguide.itmanagersjournal.com/guidepromo.tmpl >_______________________________________________ >Springframework-developer mailing list >Spr...@li... >https://lists.sourceforge.net/lists/listinfo/springframework-developer > > > > |
|
From: <al...@jt...> - 2004-10-21 22:32:14
|
<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.130</td></tr><tr><td class=3D"header-data"><span class=
=3D"header-label">Date of build: </span>10/22/2004 00:16:51</td></tr><=
tr><td class=3D"header-data"><span class=3D"header-label">Time to build:&nb=
sp;</span>13 minutes 24 seconds</td></tr><tr><td class=3D"header-data"><spa=
n class=3D"header-label">Last changed: </span>10/21/2004 18:40:13</td>=
</tr><tr><td class=3D"header-data"><span class=3D"header-label">Last log en=
try: </span>check for request URIs that do not start with context path=
</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: =
(15) </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">test/org/springframework/web/=
servlet/handler/SimpleUrlHandlerMappingTests.java</td><td class=3D"modifica=
tions-data">check for request URIs that do not start with context path</td>=
</tr><tr class=3D"modifications-oddrow"><td class=3D"modifications-data">mo=
dified</td><td class=3D"modifications-data">jhoeller</td><td class=3D"modif=
ications-data">src/org/springframework/web/util/UrlPathHelper.java</td><td =
class=3D"modifications-data">check for request URIs that do not start with =
context path</td></tr><tr class=3D"modifications-evenrow"><td class=3D"modi=
fications-data">modified</td><td class=3D"modifications-data">jhoeller</td>=
<td class=3D"modifications-data">test/org/springframework/orm/hibernate/Hib=
ernateJtaTransactionTests.java</td><td class=3D"modifications-data">added t=
ests for plain JTA synchronization with pre-bound Session</td></tr><tr clas=
s=3D"modifications-oddrow"><td class=3D"modifications-data">modified</td><t=
d class=3D"modifications-data">jhoeller</td><td class=3D"modifications-data=
">src/org/springframework/orm/hibernate/SessionFactoryUtils.java</td><td cl=
ass=3D"modifications-data">added support for plain JTA synchronization with=
existing Hibernate Session</td></tr><tr class=3D"modifications-evenrow"><t=
d class=3D"modifications-data">modified</td><td class=3D"modifications-data=
">jhoeller</td><td class=3D"modifications-data">src/org/springframework/orm=
/hibernate/SessionHolder.java</td><td class=3D"modifications-data">added su=
pport for plain JTA synchronization with existing Hibernate Session</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/util/StopWatch.java</td><td class=3D"mo=
difications-data">polishing</td></tr><tr class=3D"modifications-evenrow"><t=
d class=3D"modifications-data">modified</td><td class=3D"modifications-data=
">jhoeller</td><td class=3D"modifications-data">src/org/springframework/aop=
/framework/ProxyConfig.java</td><td class=3D"modifications-data">polishing<=
/td></tr><tr class=3D"modifications-oddrow"><td class=3D"modifications-data=
">modified</td><td class=3D"modifications-data">jhoeller</td><td class=3D"m=
odifications-data">src/org/springframework/jdbc/support/SQLErrorCodesFactor=
y.java</td><td class=3D"modifications-data">log at debug level</td></tr><tr=
class=3D"modifications-evenrow"><td class=3D"modifications-data">modified<=
/td><td class=3D"modifications-data">jhoeller</td><td class=3D"modification=
s-data">src/org/springframework/web/servlet/view/AbstractCachingViewResolve=
r.java</td><td class=3D"modifications-data">log at debug level</td></tr><tr=
class=3D"modifications-oddrow"><td class=3D"modifications-data">modified</=
td><td class=3D"modifications-data">johnsonr</td><td class=3D"modifications=
-data">src/org/springframework/aop/support/DefaultPointcutAdvisor.java</td>=
<td class=3D"modifications-data">Now defaults to using Pointcut.TRUE (match=
everything) if no Pointcutis specified when using no-arg constructor</td><=
/tr><tr class=3D"modifications-evenrow"><td class=3D"modifications-data">mo=
dified</td><td class=3D"modifications-data">jhoeller</td><td class=3D"modif=
ications-data">/changelog.txt</td><td class=3D"modifications-data">DefaultL=
istableBeanFactory, GenericApplicationContext, DataAccessUtils</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/context/support/AbstractApplicationContext.j=
ava</td><td class=3D"modifications-data">use getBeansOfType instead of getB=
eanDefinitionNames</td></tr><tr class=3D"modifications-evenrow"><td class=
=3D"modifications-data">modified</td><td class=3D"modifications-data">jhoel=
ler</td><td class=3D"modifications-data">src/org/springframework/jdbc/suppo=
rt/SQLErrorCodesFactory.java</td><td class=3D"modifications-data">use getBe=
ansOfType instead of getBeanDefinitionNames</td></tr><tr class=3D"modificat=
ions-oddrow"><td class=3D"modifications-data">modified</td><td class=3D"mod=
ifications-data">jhoeller</td><td class=3D"modifications-data">src/org/spri=
ngframework/util/Assert.java</td><td class=3D"modifications-data">polishing=
</td></tr><tr class=3D"modifications-evenrow"><td class=3D"modifications-da=
ta">modified</td><td class=3D"modifications-data">jhoeller</td><td class=3D=
"modifications-data">test/org/springframework/web/servlet/SimpleWebApplicat=
ionContext.java</td><td class=3D"modifications-data">polishing</td></tr></t=
able><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: Guillaume P. <gpo...@gl...> - 2004-10-21 22:27:48
|
Colin, Did you have any time to look at my prototype, are you interested in a contribution from me in that area? Guillaume ----- Original Message ----- From: "Colin Sampaleanu" <col...@ex...> To: <spr...@li...> Sent: Wednesday, October 06, 2004 9:44 AM Subject: Re: [Springframework-developer] PropertyPathFactoryBean > Guillaume, > > Thanks for doing this. I personally can't look at this this week, but can > probably look at it next. Your mechanism of using a new <ognl> tag is > abviously completely backwards compatible. The other option we were > discussing before was in the regular value tag, recognizing a prefix like > "ognl:" as an indication that the given value is an ognl expression. > > I would actually like to also investigate Janino > http://www.janino.net/ > as an alternative to OGNL. I've used OGNL a fair amount with Tapestry, and > it's quite good. That said, the Janino approach of generating bytecode > directly from the expressions is pretty intriguing, in terms of > performance implications. > > Colin > > Guillaume Poirier wrote: > >> Concerning OGNL, I took at stab at it to see how hard it would be to >> integrate. My prototype seems to work correctly, with a few adjustments >> needed. Would you guys be interested in a contribution from me? >> >> My implementation requires modifications in two areas. First, the a >> <ognl> tag should be added in the DTD, available everywhere you can use >> the <value> tag. In the XmlBeanDefinitionParser, the <ognl> tag would be >> converted to an OGNL implementation of a new Expression interface that >> define a class to resolve the expression given a context/BeanFactory. >> >> Then, the BeanFactory implementation would need to be modified, when it >> resolve ManagedList, RuntimeBeanReference, a new check would be added for >> the Expression class, where the expression would be resolved from the >> context. >> >> However, I encountered a minor issue while creating my prototype. The >> resolution where the expression would be converted to a value is in >> AbstractAutowireCapableBeanFactory, which doesn't implement >> ListableBeanFactory. It causes a problem because OGNL ask for a Map as >> context, and it calls the keySet() method on it, thus the map passed to >> OGNL must be able to return all the bean names in the context. A quick >> fix is to cast the AbstractAutowireCapableBeanFactory instance to >> ListableBeanFactory, since all of Spring's concrete BeanFactory >> implements ListableBeanFactory anyway, but it's somewhat an hack, and if >> someone extend AbstractAutowireCapableBeanFactory and doesn't implement >> ListableBeanFactory, then the OGNL wouldn't work properly. I guess it's >> unlikely though. >> >> I've attached the patch to this email, with the prototype for OGNL. It's >> working, but it doesn't have any documenation, decent tests, etc. If you >> guys are interested in my code, I can polish it, document it, and add a >> better test coverage. >> >> Let me know what you think. >> >> Regards, >> Guillaume >> >> ----- Original Message ----- From: "Colin Sampaleanu" <col...@ex...> >> To: <spr...@li...> >> Sent: Monday, October 04, 2004 1:32 PM >> Subject: Re: [Springframework-developer] PropertyPathFactoryBean >> >> >>> Good stuff. It overlaps of course with the mythical OGNL or expression >>> support which keeps getting pushed back, but in the meantime provides >>> some of the benefits for pretty little extra code... >>> >>> >>> jürgen höller [werk3AT] wrote: >>> >>>> I've just added a PropertyPathFactoryBean, following this suggestion: >>>> >>>> http://opensource.atlassian.com/projects/spring/browse/SPR-343 >>>> >>>> >>>> Usage examples: >>>> >>>> // target bean to be referenced by name >>>> <bean id="tb" class="org.springframework.beans.TestBean" >>>> singleton="false"> >>>> <property name="age"><value>10</value></property> >>>> <property name="spouse"> >>>> <bean class="org.springframework.beans.TestBean"> >>>> <property name="age"><value>11</value></property> >>>> </bean> >>>> </property> >>>> </bean> >>>> >>>> // will result in 12, which is the value of property 'age' of the inner >>>> bean >>>> <bean id="propertyPath1" >>>> class="org.springframework.beans.factory.config.PropertyPathFactoryBean"> >>>> <property name="targetObject"> >>>> <bean class="org.springframework.beans.TestBean"> >>>> <property name="age"><value>12</value></property> >>>> </bean> >>>> </property> >>>> <property name="propertyPath"><value>age</value></property> >>>> </bean> >>>> >>>> // will result in 11, which is the value of property 'spouse.age' of >>>> bean 'tb' >>>> <bean id="propertyPath2" >>>> class="org.springframework.beans.factory.config.PropertyPathFactoryBean"> >>>> <property name="targetBeanName"><value>tb</value></property> >>>> <property name="propertyPath"><value>spouse.age</value></property> >>>> </bean> >>>> >>>> // will result in 10, which is the value of property 'age' of bean 'tb' >>>> <bean id="tb.age" >>>> class="org.springframework.beans.factory.config.PropertyPathFactoryBean"/> >>>> >>>> >>>> The last one, interpreting the bean name as 'beanName.property' >>>> pattern, is quite concise... >>>> >>> >>> >>> >>> >>> ------------------------------------------------------- >>> This SF.net email is sponsored by: IT Product Guide on ITManagersJournal >>> Use IT products in your business? Tell us what you think of them. Give >>> us >>> Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out >>> more >>> http://productguide.itmanagersjournal.com/guidepromo.tmpl >>> _______________________________________________ >>> Springframework-developer mailing list >>> Spr...@li... >>> https://lists.sourceforge.net/lists/listinfo/springframework-developer >> >> Index: org/springframework/beans/factory/OgnlTests.java >> =================================================================== >> RCS file: org/springframework/beans/factory/OgnlTests.java >> diff -N org/springframework/beans/factory/OgnlTests.java >> --- /dev/null 1 Jan 1970 00:00:00 -0000 >> +++ org/springframework/beans/factory/OgnlTests.java 1 Jan 1970 >> 00:00:00 -0000 >> @@ -0,0 +1,79 @@ >> +/* >> + * $Id$ >> + * $Log$ >> + */ >> +package org.springframework.beans.factory; >> + >> +import java.util.Arrays; >> +import java.util.List; >> + >> +import junit.framework.TestCase; >> + >> +import org.springframework.beans.factory.xml.XmlBeanFactory; >> + >> +/** >> + * @author Guillaume Poirier >> + * @version $Revision$, $Date$ >> + * @since 2004-10-04 >> + */ >> +public class OgnlTests extends TestCase { >> + public void testOgnlSupport() throws Exception { >> + XmlBeanFactory factory = new XmlBeanFactory(OgnlTests.class >> + .getResourceAsStream("ognl.xml")); >> + Bean test = (Bean) factory.getBean("test"); >> + Object list = factory.getBean("list"); >> + assertSame(test.one, list); >> + assertEquals(test.two, new Integer(Bean.CONSTANT)); >> + assertSame(test.three, test.getProperty()); >> + List expectedList = Arrays.asList(new Object[] { "Item0", null, >> null, >> + test.getProperty() }); >> + assertEquals(expectedList, list); >> + } >> + >> + public static class Bean { >> + public static final int CONSTANT = 15; >> + private Object one; >> + private Object two; >> + private Object three; >> + >> + public Bean() { >> + } >> + >> + public Bean(Object arg) { >> + throw new UnsupportedOperationException(); >> + } >> + >> + public Object getOne() { >> + return one; >> + } >> + >> + public void setOne(Object one) { >> + this.one = one; >> + } >> + >> + public Object getTwo() { >> + return two; >> + } >> + >> + public void setTwo(Object two) { >> + this.two = two; >> + } >> + >> + public Object getThree() { >> + return three; >> + } >> + >> + public void setThree(Object three) { >> + this.three = three; >> + } >> + >> + public String getProperty() { >> + return "property!!"; >> + } >> + >> + public String toString() { >> + return "OgnlTests$Bean[1='" + one + "', 2='" + two + "', 3='" + >> three >> + + "']"; >> + } >> + } >> +} >> Index: org/springframework/beans/factory/ognl.xml >> =================================================================== >> RCS file: org/springframework/beans/factory/ognl.xml >> diff -N org/springframework/beans/factory/ognl.xml >> --- /dev/null 1 Jan 1970 00:00:00 -0000 >> +++ org/springframework/beans/factory/ognl.xml 1 Jan 1970 >> 00:00:00 -0000 >> @@ -0,0 +1,40 @@ >> +<?xml version="1.0" encoding="UTF-8"?> >> +<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" >> "http://www.springframework.org/dtd/spring-beans.dtd"> >> + >> +<beans> >> + <bean id="list" class="java.util.ArrayList"> >> + <constructor-arg> >> + <list> >> + <value>Item0</value> >> + <ognl>#test.one</ognl> >> + <ognl>#test.two</ognl> >> + <ognl>#test.property</ognl> >> + </list> >> + </constructor-arg> >> + </bean> >> + + <bean id="test" >> class="org.springframework.beans.factory.OgnlTests$Bean"> >> + <property name="one"> >> + <ognl>#list</ognl> >> + </property> >> + <property name="two"> >> + >> <ognl>@org.springframework.beans.factory.OgnlTests$Bean@CONSTANT</ognl> >> + </property> >> + <property name="three"> >> + <ognl>#test.property</ognl> >> + </property> >> + </bean> >> + + <!-- >> + - This bean should not be instanciated by the BeanFactory. >> + - If it was mistakenly instanciated, an >> UnsupportedOperationException >> + - would be thrown by the constructor. >> + --> >> + <bean id="dummy" >> class="org.springframework.beans.factory.OgnlTests$Bean"> >> + <constructor-arg> >> + <list> >> + <value>Item0</value> >> + </list> >> + </constructor-arg> >> + </bean> >> +</beans> >> >> Index: >> org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java >> =================================================================== >> RCS file: >> /cvsroot/springframework/spring/src/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java,v >> retrieving revision 1.40 >> diff -u -r1.40 AbstractAutowireCapableBeanFactory.java >> --- >> org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java >> 4 Oct 2004 07:59:32 -0000 1.40 >> +++ >> org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java >> 6 Oct 2004 04:05:56 -0000 >> @@ -43,6 +43,7 @@ >> import org.springframework.beans.factory.BeanNameAware; >> import org.springframework.beans.factory.DisposableBean; >> import org.springframework.beans.factory.InitializingBean; >> +import org.springframework.beans.factory.ListableBeanFactory; >> import org.springframework.beans.factory.UnsatisfiedDependencyException; >> import >> org.springframework.beans.factory.config.AutowireCapableBeanFactory; >> import org.springframework.beans.factory.config.BeanDefinition; >> @@ -839,10 +840,14 @@ >> // May need to resolve contained runtime references. >> return resolveManagedSet(beanName, mergedBeanDefinition, >> argName, (Set) value); >> } >> - else if (value instanceof ManagedMap) { >> - // May need to resolve contained runtime references. >> - return resolveManagedMap(beanName, mergedBeanDefinition, >> argName, (Map) value); >> - } >> + else if (value instanceof ManagedMap) { >> + // May need to resolve contained runtime references. >> + return resolveManagedMap(beanName, mergedBeanDefinition, argName, >> (Map) value); >> + } >> + else if (value instanceof Expression) { >> + // Need to resolve Expression. >> + return resolveExpression(beanName, mergedBeanDefinition, argName, >> (Expression) value); >> + } >> else { >> // no need to resolve value >> return value; >> @@ -866,6 +871,13 @@ >> return getObjectForSharedInstance(innerBeanName, innerBean); >> } >> >> + private Object resolveExpression( >> + String beanName, RootBeanDefinition mergedBeanDefinition, String >> argName, Expression expr) >> + throws BeansException { >> + // TODO Casting to ListableBeanFactory is kind of an hack >> + return expr.resolve((ListableBeanFactory) this); >> + } >> + /** >> * Resolve a reference to another bean in the factory. >> */ >> Index: >> org/springframework/beans/factory/xml/DefaultXmlBeanDefinitionParser.java >> =================================================================== >> RCS file: >> /cvsroot/springframework/spring/src/org/springframework/beans/factory/xml/DefaultXmlBeanDefinitionParser.java,v >> retrieving revision 1.41 >> diff -u -r1.41 DefaultXmlBeanDefinitionParser.java >> --- >> org/springframework/beans/factory/xml/DefaultXmlBeanDefinitionParser.java >> 4 Oct 2004 08:12:00 -0000 1.41 >> +++ >> org/springframework/beans/factory/xml/DefaultXmlBeanDefinitionParser.java >> 6 Oct 2004 04:05:56 -0000 >> @@ -49,6 +49,7 @@ >> import org.springframework.beans.factory.support.ManagedMap; >> import org.springframework.beans.factory.support.ManagedSet; >> import org.springframework.beans.factory.support.MethodOverrides; >> +import org.springframework.beans.factory.support.OgnlExpression; >> import org.springframework.beans.factory.support.ReplaceOverride; >> import org.springframework.beans.factory.support.RootBeanDefinition; >> import org.springframework.core.io.Resource; >> @@ -132,6 +133,7 @@ >> public static final String PROP_ELEMENT = "prop"; >> public static final String VALUE_ELEMENT = "value"; >> public static final String NULL_ELEMENT = "null"; >> + public static final String OGNL_ELEMENT = "ognl"; >> >> >> protected final Log logger = LogFactory.getLog(getClass()); >> @@ -554,10 +556,14 @@ >> // it's a literal value >> return getTextValue(ele, beanName); >> } >> - else if (ele.getTagName().equals(NULL_ELEMENT)) { >> - // it's a distinguished null value >> - return null; >> - } >> + else if (ele.getTagName().equals(NULL_ELEMENT)) { >> + // it's a distinguished null value >> + return null; >> + } >> + else if (ele.getTagName().equals(OGNL_ELEMENT)) { >> + // it's an OGNL expression >> + return getOgnlExpression(ele, beanName); >> + } >> throw new BeanDefinitionStoreException( >> this.resource, beanName, "Unknown subelement of >> <property>: <" + ele.getTagName() + ">"); >> } >> @@ -633,24 +639,29 @@ >> * Make the horrible DOM API slightly more bearable: >> * get the text value we know this element contains. >> */ >> - protected String getTextValue(Element ele, String beanName) { >> - StringBuffer value = new StringBuffer(); >> - NodeList nl = ele.getChildNodes(); >> - for (int i = 0; i < nl.getLength(); i++) { >> - Node item = nl.item(i); >> - if (item instanceof org.w3c.dom.CharacterData) { >> - if (!(item instanceof Comment)) { >> - value.append(item.getNodeValue()); >> - } >> - } >> - else { >> - throw new BeanDefinitionStoreException( >> - this.resource, beanName, >> - "<value> element is just allowed to have text >> and comment nodes, not: " + item.getClass().getName()); >> - } >> - } >> - return value.toString(); >> - } >> + protected String getTextValue(Element ele, String beanName) { >> + StringBuffer value = new StringBuffer(); >> + NodeList nl = ele.getChildNodes(); >> + for (int i = 0; i < nl.getLength(); i++) { >> + Node item = nl.item(i); >> + if (item instanceof org.w3c.dom.CharacterData) { >> + if (!(item instanceof Comment)) { >> + value.append(item.getNodeValue()); >> + } >> + } >> + else { >> + throw new BeanDefinitionStoreException( >> + this.resource, beanName, >> + "<value> element is just allowed to have text and comment >> nodes, not: " + item.getClass().getName()); >> + } >> + } >> + return value.toString(); >> + } >> + + protected OgnlExpression getOgnlExpression(Element ele, String >> beanName) { >> + String value = getTextValue(ele, beanName); >> + return new OgnlExpression(value); >> + } >> >> protected int getDependencyCheck(String att) { >> int dependencyCheckCode = >> RootBeanDefinition.DEPENDENCY_CHECK_NONE; >> Index: org/springframework/beans/factory/xml/spring-beans.dtd >> =================================================================== >> RCS file: >> /cvsroot/springframework/spring/src/org/springframework/beans/factory/xml/spring-beans.dtd,v >> retrieving revision 1.41 >> diff -u -r1.41 spring-beans.dtd >> --- org/springframework/beans/factory/xml/spring-beans.dtd 5 Oct 2004 >> 08:37:53 -0000 1.41 >> +++ org/springframework/beans/factory/xml/spring-beans.dtd 6 Oct 2004 >> 04:05:57 -0000 >> @@ -280,7 +280,7 @@ >> --> >> <!ELEMENT constructor-arg ( >> description?, >> - (bean | ref | idref | list | set | map | props | value | null) >> + (bean | ref | idref | list | set | map | props | value | null | >> ognl) >> )> >> >> <!-- >> @@ -313,7 +313,7 @@ >> --> >> <!ELEMENT property ( >> description?, >> - (bean | ref | idref | list | set | map | props | value | null) >> + (bean | ref | idref | list | set | map | props | value | null | >> ognl) >> )> >> >> <!-- >> @@ -435,7 +435,7 @@ >> is automatically performed by the BeanFactory. >> --> >> <!ELEMENT list ( >> - (bean | ref | idref | list | set | map | props | value | null)* >> + (bean | ref | idref | list | set | map | props | value | null | >> ognl)* >> )> >> >> <!-- >> @@ -444,7 +444,7 @@ >> although references will be strongly typed. >> --> >> <!ELEMENT set ( >> - (bean | ref | idref | list | set | map | props | value | null)* >> + (bean | ref | idref | list | set | map | props | value | null | >> ognl)* >> )> >> >> <!-- >> @@ -460,7 +460,7 @@ >> The name of the property is given by the "key" attribute. >> --> >> <!ELEMENT entry ( >> - (bean | ref | idref | list | set | map | props | value | null) >> + (bean | ref | idref | list | set | map | props | value | null | >> ognl) >> )> >> >> <!-- >> @@ -508,3 +508,5 @@ >> null value unless a special PropertyEditor does so. >> --> >> <!ELEMENT null (#PCDATA)> >> + >> +<!ELEMENT ognl (#PCDATA)> >> Index: org/springframework/beans/factory/support/Expression.java >> =================================================================== >> RCS file: org/springframework/beans/factory/support/Expression.java >> diff -N org/springframework/beans/factory/support/Expression.java >> --- /dev/null 1 Jan 1970 00:00:00 -0000 >> +++ org/springframework/beans/factory/support/Expression.java 1 Jan >> 1970 00:00:00 -0000 >> @@ -0,0 +1,16 @@ >> +/* >> + * $Id$ >> + * $Log$ >> + */ >> +package org.springframework.beans.factory.support; >> + >> +import org.springframework.beans.factory.ListableBeanFactory; >> + >> +/** >> + * @author Guillaume Poirier >> + * @version $Revision$, $Date$ >> + * @since 2004-10-05 >> + */ >> +public interface Expression { >> + public Object resolve(ListableBeanFactory factory); >> +} >> Index: org/springframework/beans/factory/support/OgnlExpression.java >> =================================================================== >> RCS file: org/springframework/beans/factory/support/OgnlExpression.java >> diff -N org/springframework/beans/factory/support/OgnlExpression.java >> --- /dev/null 1 Jan 1970 00:00:00 -0000 >> +++ org/springframework/beans/factory/support/OgnlExpression.java 1 >> Jan 1970 00:00:00 -0000 >> @@ -0,0 +1,50 @@ >> +/* >> + * $Id$ >> + * $Log$ >> + */ >> +package org.springframework.beans.factory.support; >> + >> +import java.util.Map; >> + >> +import org.springframework.beans.factory.BeanCreationException; >> +import org.springframework.beans.factory.ListableBeanFactory; >> + >> +import ognl.Ognl; >> +import ognl.OgnlException; >> + >> +/** >> + * @author Guillaume Poirier >> + * @version $Revision$, $Date$ >> + * @since 2004-10-05 >> + */ >> +public class OgnlExpression implements Expression { >> + >> + private Object expr; >> + >> + public OgnlExpression(String value) { >> + try { >> + expr = Ognl.parseExpression(value); >> + } catch (OgnlException e) { >> + throw new BeanCreationException("Failled to parse OGNL >> expression", e); >> + } >> + } >> + >> + /* >> + * (non-Javadoc) >> + * + * @see >> org.springframework.beans.factory.support.Expression#getValue(java.util.Map) >> + */ >> + public Object resolve(ListableBeanFactory factory) { >> + try { >> + Map ctx = new OgnlExpressionContext(factory); >> + return Ognl.getValue(expr, ctx, (Object) null); >> + } catch (OgnlException e) { >> + throw new BeanCreationException("Failled to resolve OGNL >> expression", e); >> + } >> + } >> + + public String toString() { >> + return "OgnlExpression[value='" + expr.toString() + "']"; >> + } >> + >> +} >> Index: >> org/springframework/beans/factory/support/OgnlExpressionContext.java >> =================================================================== >> RCS file: >> org/springframework/beans/factory/support/OgnlExpressionContext.java >> diff -N >> org/springframework/beans/factory/support/OgnlExpressionContext.java >> --- /dev/null 1 Jan 1970 00:00:00 -0000 >> +++ org/springframework/beans/factory/support/OgnlExpressionContext.java >> 1 Jan 1970 00:00:00 -0000 >> @@ -0,0 +1,161 @@ >> +/* >> + * $Id$ >> + * $Log$ >> + */ >> +package org.springframework.beans.factory.support; >> + >> +import java.util.Collection; >> +import java.util.HashSet; >> +import java.util.Map; >> +import java.util.Set; >> + >> +import ognl.OgnlContext; >> + >> +import org.springframework.beans.factory.ListableBeanFactory; >> + >> +/** >> + * @author Guillaume Poirier >> + * @version $Revision$, $Date$ >> + * @since 2004-10-05 >> + */ >> +public class OgnlExpressionContext extends OgnlContext { >> + >> + private ListableBeanFactory factory; >> + >> + public OgnlExpressionContext(ListableBeanFactory factory) { >> + this.factory = factory; >> + if (factory == null) { >> + throw new NullPointerException("factory"); >> + } >> + } >> + >> + /* >> + * (non-Javadoc) >> + * + * @see java.util.Map#size() >> + */ >> + public int size() { >> + throw new UnsupportedOperationException(); >> + } >> + >> + /* >> + * (non-Javadoc) >> + * + * @see java.util.Map#clear() >> + */ >> + public void clear() { >> + throw new UnsupportedOperationException(); >> + } >> + >> + /* >> + * (non-Javadoc) >> + * + * @see java.util.Map#isEmpty() >> + */ >> + public boolean isEmpty() { >> + throw new UnsupportedOperationException(); >> + } >> + >> + /* >> + * (non-Javadoc) >> + * + * @see java.util.Map#containsKey(java.lang.Object) >> + */ >> + public boolean containsKey(Object key) { >> + return super.containsKey(key) ? true : factory.containsBean((String) >> key); >> + } >> + >> + /* >> + * (non-Javadoc) >> + * + * @see java.util.Map#containsValue(java.lang.Object) >> + */ >> + public boolean containsValue(Object value) { >> + throw new UnsupportedOperationException(); >> + } >> + >> + /* >> + * (non-Javadoc) >> + * + * @see java.util.Map#values() >> + */ >> + public Collection values() { >> + throw new UnsupportedOperationException(); >> + } >> + >> + /* >> + * (non-Javadoc) >> + * + * @see java.util.Map#putAll(java.util.Map) >> + */ >> + public void putAll(Map t) { >> + throw new UnsupportedOperationException(); >> + } >> + >> + /* >> + * (non-Javadoc) >> + * + * @see java.util.Map#entrySet() >> + */ >> + public Set entrySet() { >> + throw new UnsupportedOperationException(); >> + } >> + >> + /* >> + * (non-Javadoc) >> + * + * @see java.util.Map#keySet() >> + */ >> + public Set keySet() { >> + HashSet set = new HashSet(super.keySet()); >> + String[] names = factory.getBeanDefinitionNames(); >> + for (int i = 0, n = names.length; i < n; i++) { >> + set.add(names[i]); >> + } >> + return set; >> + } >> + >> + /* >> + * (non-Javadoc) >> + * + * @see java.util.Map#get(java.lang.Object) >> + */ >> + public Object get(Object key) { >> + Object value = super.get(key); >> + return value != null ? value : factory.getBean((String) key); >> + } >> + >> + /* >> + * (non-Javadoc) >> + * + * @see java.util.Map#remove(java.lang.Object) >> + */ >> + public Object remove(Object key) { >> + throw new UnsupportedOperationException(); >> + } >> + >> + /* >> + * (non-Javadoc) >> + * + * @see java.util.Map#put(java.lang.Object, java.lang.Object) >> + */ >> + public Object put(Object key, Object value) { >> + throw new UnsupportedOperationException(); >> + } >> + >> + public Map getValues() { >> + throw new UnsupportedOperationException(); >> + } >> + >> + public void setValues(Map value) { >> + throw new UnsupportedOperationException(); >> + } >> + >> + public boolean equals(Object o) { >> + return o == this; >> + } >> + >> + public int hashCode() { >> + return System.identityHashCode(this); >> + } >> +} >> > > > > > ------------------------------------------------------- > This SF.net email is sponsored by: IT Product Guide on ITManagersJournal > Use IT products in your business? Tell us what you think of them. Give us > Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out > more > http://productguide.itmanagersjournal.com/guidepromo.tmpl > _______________________________________________ > Springframework-developer mailing list > Spr...@li... > https://lists.sourceforge.net/lists/listinfo/springframework-developer |
|
From: Guillaume P. <gpo...@gl...> - 2004-10-21 22:25:22
|
> I only wish A) there was a way to explicitly blow away the classloader > or B) have hibernate be redeployable. One option is to place all the > Hibernate related classes inside Tomcat's shared Classloader. This > might reduce the amount of times I need to restart. Well, if you care enough, I'm pretty sure you could create a ContextListener that would cleanup when the context is destroyed. It would invole reflection to hack in private fields of the Threads though, so the solution might fail in different JVM, and wouldn't work well with SecurityManagers. Basically, what you would have to do is to get the list of all the system's thread (through ThreadGroup), and for each of them, iterate the "threadLocals" map, and the "inheritableThreadLocals", to cleanup any instance for which the ClassLoader is the current webapp or of child of it. You might also have to cleanup a few other things though, such as if you have any JDBC drivers in your webapp's ClassLoader, they need to be explicitly unregistered, otherwise they will not be garbage collected. I create a prototype of a ContextListener that does that if you want. Guillaume ----- Original Message ----- From: "Seth Ladd" <set...@gm...> To: <spr...@li...> Sent: Wednesday, October 20, 2004 2:26 PM Subject: Re: [Springframework-developer] CGLIB memory usage within class loader > On Tue, 19 Oct 2004 22:10:20 -0400, Guillaume Poirier > <gpo...@gl...> wrote: >> > How does it not create a leak if the classloader is not going away? >> > The real cause of the OOM exceptions is that the WebappClassLoader >> > instances never go away. >> >> I meant if the container (e.g. Tomcat) doesn't throw the ClassLoader >> away, >> i.e. if it's still in use... >> Of course, if the webapp is reloaded and the old ClassLoader isn't >> collected, that's a leak. >> >> What I was saying is the problem with Dom4j cause a leak when you reload >> the >> webapp, >> but cause no leak if you never use hot-reload. (While the CGLIB leak >> apparently does the opposite) > > Ahh... that's what I thought. Thanks for the clarification! > > I only wish A) there was a way to explicitly blow away the classloader > or B) have hibernate be redeployable. One option is to place all the > Hibernate related classes inside Tomcat's shared Classloader. This > might reduce the amount of times I need to restart. > > Seth > > > ------------------------------------------------------- > This SF.net email is sponsored by: IT Product Guide on ITManagersJournal > Use IT products in your business? Tell us what you think of them. Give us > Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out > more > http://productguide.itmanagersjournal.com/guidepromo.tmpl > _______________________________________________ > Springframework-developer mailing list > Spr...@li... > https://lists.sourceforge.net/lists/listinfo/springframework-developer |
|
From: Colin S. <col...@ex...> - 2004-10-21 22:17:57
|
+1 on 1.1.2 earlier. Most of the fixes since 1.1.1 are not that major, but a couple of them are nasty if you are actually affected by them. I've already told a few people to use the CVS version for one reason or another. If we are happy with the quality level I say go for it. I like the idea of 1.1.3 before 1.2RC, but I'm wondering if parallel development is really possible. I guess we can try for the sandbox for the major stuff, as was done before... jürgen höller [werk3AT] wrote: >Everybody, > >In contrast to the original plan of releasing 1.1.2 in mid November, I'd like to suggest to release it signficantly earlier - possibly on Oct 31st. We've already collected a quite large number of entries in the changelog (most of them minor issues), so I guess it's appropriate to do a release ASAP. > >This would give us about 9 days for testing and polishing. Anything that's not manageable within that timeframe, no matter if bugfix or enhancement, should be deferred. Please test the current CVS contents as thorougly as possible, and if you have the chance, address some of the further issues currently marked for 1.1.2 in JIRA (in particular the doc ones). > >It seems that there are already enough minor issues and enhancement suggestions to warrant a 1.1.3 release, possibly at the end of November. Alternatively, we could go straight for 1.2 RC1, but I'm not too keen on combining the planned number of major new features with that minor stuff in one target milestone... I'd rather prefer 1.2 RC1 in early January. > >Thoughts? Alternative suggestions? > >Juergen > > >------------------------------------------------------- >This SF.net email is sponsored by: IT Product Guide on ITManagersJournal >Use IT products in your business? Tell us what you think of them. Give us >Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more >http://productguide.itmanagersjournal.com/guidepromo.tmpl >_______________________________________________ >Springframework-developer mailing list >Spr...@li... >https://lists.sourceforge.net/lists/listinfo/springframework-developer > > |
|
From: R.J. L. <rjl...@co...> - 2004-10-21 21:56:18
|
Concurrent efforts? It's not always easy to do, but maybe work on 1.2 = RC1 and back port the minor issues to 1.1.3 (Similar to the Eclipse team's = 3.0.1 release which came out after 3.1 M1 but before 3.1 M2). Just a thought, R.J.=20 -----Original Message----- From: spr...@li... [mailto:spr...@li...] On Behalf = Of j=FCrgen h=F6ller [werk3AT] Sent: Thursday, October 21, 2004 4:18 PM To: spr...@li... Subject: [Springframework-developer] Preparing for 1.1.2 Everybody, =20 In contrast to the original plan of releasing 1.1.2 in mid November, I'd like to suggest to release it signficantly earlier - possibly on Oct = 31st. We've already collected a quite large number of entries in the changelog (most of them minor issues), so I guess it's appropriate to do a release ASAP. =20 This would give us about 9 days for testing and polishing. Anything = that's not manageable within that timeframe, no matter if bugfix or = enhancement, should be deferred. Please test the current CVS contents as thorougly as possible, and if you have the chance, address some of the further issues currently marked for 1.1.2 in JIRA (in particular the doc ones). =20 It seems that there are already enough minor issues and enhancement suggestions to warrant a 1.1.3 release, possibly at the end of November. Alternatively, we could go straight for 1.2 RC1, but I'm not too keen on combining the planned number of major new features with that minor stuff = in one target milestone... I'd rather prefer 1.2 RC1 in early January. =20 Thoughts? Alternative suggestions? =20 Juergen ------------------------------------------------------- This SF.net email is sponsored by: IT Product Guide on ITManagersJournal = Use IT products in your business? Tell us what you think of them. Give us = Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more http://productguide.itmanagersjournal.com/guidepromo.tmpl _______________________________________________ Springframework-developer mailing list Spr...@li... https://lists.sourceforge.net/lists/listinfo/springframework-developer |
|
From: <jue...@we...> - 2004-10-21 21:15:45
|
Everybody, =20 In contrast to the original plan of releasing 1.1.2 in mid November, I'd = like to suggest to release it signficantly earlier - possibly on Oct = 31st. We've already collected a quite large number of entries in the = changelog (most of them minor issues), so I guess it's appropriate to do = a release ASAP. =20 This would give us about 9 days for testing and polishing. Anything = that's not manageable within that timeframe, no matter if bugfix or = enhancement, should be deferred. Please test the current CVS contents as = thorougly as possible, and if you have the chance, address some of the = further issues currently marked for 1.1.2 in JIRA (in particular the doc = ones). =20 It seems that there are already enough minor issues and enhancement = suggestions to warrant a 1.1.3 release, possibly at the end of November. = Alternatively, we could go straight for 1.2 RC1, but I'm not too keen on = combining the planned number of major new features with that minor stuff = in one target milestone... I'd rather prefer 1.2 RC1 in early January. =20 Thoughts? Alternative suggestions? =20 Juergen |
|
From: Rod J. <ro...@in...> - 2004-10-21 14:50:00
|
Can't say it bothers me either. I guess I choose between the two based on euphony also. But I have no issue with standardization, as it involves only deprecation at this point. R Colin Sampaleanu wrote: > I personally don't get that hung up about it. Both or equally valid > forms (and recognized by JavaBeans tools and the like), and the reality > is that sometimes you have a word which sounds horrible with is and ok > with get, or vice-versa. On the other hand, if they sound ok both ways > then there's nothing wrong with trying to be consistent. > > > jürgen höller [werk3AT] wrote: > >> I've just noticed that we're slightly inconsistent in our naming for >> getters that return boolean bean properties. Most of them are called >> "isXxx", but 9 of them in the entire codebase are called "getXxx". >> >> We should find a consistent rule here. For example, should we prefer >> "isProxyTargetClass" or "getProxyTargetClass"? Neither is nice >> English, so I guess it's more about a convention then about nice >> method names. >> >> I tend to prefer the "isXxx" versions for all boolean properties. That >> would also be easier in terms of affected classes, as we just have 9 >> accessors that do not conform to that rule (i.e. 9 to be deprecated). >> >> On the other hand, "getXxx" might result in slightly nicer English in >> some boolean cases... >> >> Opinions? >> >> Juergen >> >> > > > > > ------------------------------------------------------- > This SF.net email is sponsored by: IT Product Guide on ITManagersJournal > Use IT products in your business? Tell us what you think of them. Give us > Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more > http://productguide.itmanagersjournal.com/guidepromo.tmpl > _______________________________________________ > Springframework-developer mailing list > Spr...@li... > https://lists.sourceforge.net/lists/listinfo/springframework-developer > |
|
From: <jo....@us...> - 2004-10-21 14:29:53
|
Hi, we extend Spring for a webdav-based framework, which means that=20 service() must be overridden to allow for other HTTP methods. Other=20 than that, it's important for us that the framework uses Spring's=20 default behavior wherever possible, since it's well written,=20 maintained and documented :) Since your preferred solution to the last-modified problem is to go=20 back to do...(), could you please make serviceWrapper() protected? That=20= gives us the option to override service() ourselves without having to=20 manually duplicate the functionality of FrameworkServlet and=20 DispatcherServlet. jo P=E5 20. okt. 2004 kl. 23.30 skrev j=FCrgen h=F6ller [werk3AT]: > Thanks for spotting this, Olivier! This has effectively been broken=20 > since 1.1 RC1, when FrameworkServlet was changed from overriding=20 > "doGet"/"doPost" to overriding "service(HttpServletRequest,=20 > HttpServletResponse)". Unfortunately, this slipped through, because=20 > the test suite just simulates "getLastModified" calls - it doesn't go=20= > through Servlet's "service" method. > > I wonder why this hasn't been reported before... Probably because it=20= > doesn't cause a failure - it simply sends the response back every time=20= > rather than "not modified". Anyway, I've just fixed this through=20 > recoding FrameworkServlet to override "doGet"/"doPost" again, and also=20= > "doHead" and co. This lets the HttpServlet base class properly call=20 > "getLastModified" now. > > Juergen > > > ________________________________ > > Von: spr...@li... im Auftrag=20= > von Olivier Jolly > Gesendet: So 17.10.2004 15:45 > An: spr...@li... > Betreff: [Springframework-developer] Suspicion of problem with=20 > getLastModified > > > > Hi, > after the problem raised in the forum : > http://forum.springframework.org/viewtopic.php?t=3D1385 , I checked = this=20 > a > bit and noticed that all the mechanisms developped in the > DispatcherServlet to get the last modification date and such were > relying on the fact that getLastModified in called on=20 > DispatchedServlet, > ok. However, the jsr152 implementation of tomcat (which is probably a > common one) call the getLastModified in the > service(HttpServletRequest,HttpServletResponse), which is overidden in > the FrameworkServlet, and no code related to getLastModified is called > in the overidden method. > I propose to reenable the getLastModified call by adding in the > service method of FrameworkServlet the code used to handle the last > modification, hance the proposed attached patch. > If I haven't forgot something, which would explain that it should=20 > work > as it is now but that I and the forum poster didn't see, please yell = at > me, else I'll open a jira issue to remember it. > Regards > Olivier > > > > > ------------------------------------------------------- > This SF.net email is sponsored by: IT Product Guide on=20 > ITManagersJournal > Use IT products in your business? Tell us what you think of them. Give=20= > us > Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out=20= > more > http://productguide.itmanagersjournal.com/guidepromo.tmpl > _______________________________________________ > Springframework-developer mailing list > Spr...@li... > https://lists.sourceforge.net/lists/listinfo/springframework-developer |
|
From: Keith D. <kd...@cs...> - 2004-10-21 13:55:06
|
My 2c... I think it's better to use what is clearest on a case by case basis. Good names (those that are clear but not too wordy) are very important. Generally the isXxx variation should is the most readable IMO anyway, but sometimes isXxx just doesn't fit. Keith -----Original Message----- From: spr...@li... [mailto:spr...@li...] On Behalf = Of j=FCrgen h=F6ller [werk3AT] Sent: Thursday, October 21, 2004 11:30 AM To: spr...@li... Subject: [Springframework-developer] isXxx/getXxx for boolean properties I've just noticed that we're slightly inconsistent in our naming for = getters that return boolean bean properties. Most of them are called "isXxx", = but 9 of them in the entire codebase are called "getXxx". We should find a consistent rule here. For example, should we prefer "isProxyTargetClass" or "getProxyTargetClass"? Neither is nice English, = so I guess it's more about a convention then about nice method names. I tend to prefer the "isXxx" versions for all boolean properties. That = would also be easier in terms of affected classes, as we just have 9 accessors that do not conform to that rule (i.e. 9 to be deprecated). On the other hand, "getXxx" might result in slightly nicer English in = some boolean cases... Opinions? Juergen ------------------------------------------------------- This SF.net email is sponsored by: IT Product Guide on ITManagersJournal Use IT products in your business? Tell us what you think of them. Give = us Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out = more http://productguide.itmanagersjournal.com/guidepromo.tmpl _______________________________________________ Springframework-developer mailing list Spr...@li... https://lists.sourceforge.net/lists/listinfo/springframework-developer |
|
From: Dmitriy K. <dko...@ru...> - 2004-10-21 13:15:29
|
My 2c. I've always used isXxx() convention. +1 for isXxx() Regards, Dmitriy. Rod Johnson wrote: > Probably best to standardize on isXxx(). > > R > > jürgen höller [werk3AT] wrote: > >> I've just noticed that we're slightly inconsistent in our naming for >> getters that return boolean bean properties. Most of them are called >> "isXxx", but 9 of them in the entire codebase are called "getXxx". >> >> We should find a consistent rule here. For example, should we prefer >> "isProxyTargetClass" or "getProxyTargetClass"? Neither is nice >> English, so I guess it's more about a convention then about nice >> method names. >> >> I tend to prefer the "isXxx" versions for all boolean properties. >> That would also be easier in terms of affected classes, as we just >> have 9 accessors that do not conform to that rule (i.e. 9 to be >> deprecated). >> >> On the other hand, "getXxx" might result in slightly nicer English in >> some boolean cases... >> >> Opinions? >> >> Juergen >> >> > > > > ------------------------------------------------------- > This SF.net email is sponsored by: IT Product Guide on ITManagersJournal > Use IT products in your business? Tell us what you think of them. Give us > Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out > more > http://productguide.itmanagersjournal.com/guidepromo.tmpl > _______________________________________________ > Springframework-developer mailing list > Spr...@li... > https://lists.sourceforge.net/lists/listinfo/springframework-developer |
|
From: Colin S. <col...@ex...> - 2004-10-21 12:33:58
|
I personally don't get that hung up about it. Both or equally valid forms (and recognized by JavaBeans tools and the like), and the reality is that sometimes you have a word which sounds horrible with is and ok with get, or vice-versa. On the other hand, if they sound ok both ways then there's nothing wrong with trying to be consistent. jürgen höller [werk3AT] wrote: >I've just noticed that we're slightly inconsistent in our naming for getters that return boolean bean properties. Most of them are called "isXxx", but 9 of them in the entire codebase are called "getXxx". > >We should find a consistent rule here. For example, should we prefer "isProxyTargetClass" or "getProxyTargetClass"? Neither is nice English, so I guess it's more about a convention then about nice method names. > >I tend to prefer the "isXxx" versions for all boolean properties. That would also be easier in terms of affected classes, as we just have 9 accessors that do not conform to that rule (i.e. 9 to be deprecated). > >On the other hand, "getXxx" might result in slightly nicer English in some boolean cases... > >Opinions? > >Juergen > > |
|
From: Rod J. <ro...@in...> - 2004-10-21 12:16:37
|
Probably best to standardize on isXxx(). R jürgen höller [werk3AT] wrote: > I've just noticed that we're slightly inconsistent in our naming for getters that return boolean bean properties. Most of them are called "isXxx", but 9 of them in the entire codebase are called "getXxx". > > We should find a consistent rule here. For example, should we prefer "isProxyTargetClass" or "getProxyTargetClass"? Neither is nice English, so I guess it's more about a convention then about nice method names. > > I tend to prefer the "isXxx" versions for all boolean properties. That would also be easier in terms of affected classes, as we just have 9 accessors that do not conform to that rule (i.e. 9 to be deprecated). > > On the other hand, "getXxx" might result in slightly nicer English in some boolean cases... > > Opinions? > > Juergen > > |
|
From: <jue...@we...> - 2004-10-21 09:28:08
|
I've just noticed that we're slightly inconsistent in our naming for = getters that return boolean bean properties. Most of them are called = "isXxx", but 9 of them in the entire codebase are called "getXxx". We should find a consistent rule here. For example, should we prefer = "isProxyTargetClass" or "getProxyTargetClass"? Neither is nice English, = so I guess it's more about a convention then about nice method names. I tend to prefer the "isXxx" versions for all boolean properties. That = would also be easier in terms of affected classes, as we just have 9 = accessors that do not conform to that rule (i.e. 9 to be deprecated). On the other hand, "getXxx" might result in slightly nicer English in = some boolean cases... Opinions? Juergen |
|
From: <al...@jt...> - 2004-10-20 22:31:49
|
<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.129</td></tr><tr><td class=3D"header-data"><span class=
=3D"header-label">Date of build: </span>10/21/2004 00:17:07</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>10/20/2004 19:33:40</td>=
</tr><tr><td class=3D"header-data"><span class=3D"header-label">Last log en=
try: </span>removed JDK 1.4 dependency, reworked setConstructorArgumen=
ts, reformatted, 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: =
(37) </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">test/org/springframework/aop/=
framework/CglibProxyTests.java</td><td class=3D"modifications-data">removed=
JDK 1.4 dependency, reworked setConstructorArguments, reformatted, polishi=
ng</td></tr><tr class=3D"modifications-oddrow"><td class=3D"modifications-d=
ata">modified</td><td class=3D"modifications-data">jhoeller</td><td class=
=3D"modifications-data">src/org/springframework/aop/framework/Cglib2AopProx=
y.java</td><td class=3D"modifications-data">removed JDK 1.4 dependency, rew=
orked setConstructorArguments, reformatted, polishing</td></tr><tr class=3D=
"modifications-evenrow"><td class=3D"modifications-data">modified</td><td c=
lass=3D"modifications-data">jhoeller</td><td class=3D"modifications-data">s=
rc/org/springframework/beans/factory/FactoryBean.java</td><td class=3D"modi=
fications-data">clarified getObjectType behavior</td></tr><tr class=3D"modi=
fications-oddrow"><td class=3D"modifications-data">modified</td><td class=
=3D"modifications-data">jhoeller</td><td class=3D"modifications-data">test/=
org/springframework/aop/framework/ProxyFactoryBeanTests.java</td><td class=
=3D"modifications-data">fixed getObjectType to avoid unnecessary creation o=
f singleton instance</td></tr><tr class=3D"modifications-evenrow"><td class=
=3D"modifications-data">modified</td><td class=3D"modifications-data">jhoel=
ler</td><td class=3D"modifications-data">src/org/springframework/aop/framew=
ork/ProxyFactoryBean.java</td><td class=3D"modifications-data">fixed getObj=
ectType to avoid unnecessary creation of singleton instance</td></tr><tr cl=
ass=3D"modifications-oddrow"><td class=3D"modifications-data">modified</td>=
<td class=3D"modifications-data">jhoeller</td><td class=3D"modifications-da=
ta">src/org/springframework/aop/framework/AopProxy.java</td><td class=3D"mo=
difications-data">polishing</td></tr><tr class=3D"modifications-evenrow"><t=
d class=3D"modifications-data">modified</td><td class=3D"modifications-data=
">jhoeller</td><td class=3D"modifications-data">src/org/springframework/aop=
/framework/JdkDynamicAopProxy.java</td><td class=3D"modifications-data">pol=
ishing</td></tr><tr class=3D"modifications-oddrow"><td class=3D"modificatio=
ns-data">modified</td><td class=3D"modifications-data">jhoeller</td><td cla=
ss=3D"modifications-data">src/org/springframework/aop/framework/ProxyFactor=
y.java</td><td class=3D"modifications-data">polishing</td></tr><tr class=3D=
"modifications-evenrow"><td class=3D"modifications-data">modified</td><td c=
lass=3D"modifications-data">jhoeller</td><td class=3D"modifications-data">s=
rc/org/springframework/web/util/WebUtils.java</td><td class=3D"modification=
s-data">polishing</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/beans/factory/=
support/RootBeanDefinition.java</td><td class=3D"modifications-data">polish=
ing</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">/changelog.txt</td><td class=3D"modifications-data"=
>Added setExposeProxy() method to Advised</td></tr><tr class=3D"modificatio=
ns-oddrow"><td class=3D"modifications-data">modified</td><td class=3D"modif=
ications-data">johnsonr</td><td class=3D"modifications-data">src/org/spring=
framework/aop/framework/Advised.java</td><td class=3D"modifications-data">A=
dded setExposeProxy() method to Advised</td></tr><tr class=3D"modifications=
-evenrow"><td class=3D"modifications-data">modified</td><td class=3D"modifi=
cations-data">johnsonr</td><td class=3D"modifications-data">test/org/spring=
framework/aop/framework/ProxyFactoryBeanTests.java</td><td class=3D"modific=
ations-data">Added testInnerBeanTargetUsingAutowiring() test, to check effe=
ct of autowiringon an inner bean target.</td></tr><tr class=3D"modification=
s-oddrow"><td class=3D"modifications-data">added</td><td class=3D"modificat=
ions-data">johnsonr</td><td class=3D"modifications-data">test/org/springfra=
mework/aop/framework/proxyFactoryBeanAutowiringTests.xml</td><td class=3D"m=
odifications-data">Added testInnerBeanTargetUsingAutowiring() test, to chec=
k effect of autowiringon an inner bean target.</td></tr><tr class=3D"modifi=
cations-evenrow"><td class=3D"modifications-data">modified</td><td class=3D=
"modifications-data">jhoeller</td><td class=3D"modifications-data">src/org/=
springframework/beans/factory/config/BeanDefinitionHolder.java</td><td clas=
s=3D"modifications-data">added toString implementation</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">d=
ocs/reference/src/beans.xml</td><td class=3D"modifications-data">apply corr=
ected patch from Tim Nolan</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">test/org/springframework/con=
text/support/ResourceBundleMessageSourceTests.java</td><td class=3D"modific=
ations-data">polishing</td></tr><tr class=3D"modifications-oddrow"><td clas=
s=3D"modifications-data">modified</td><td class=3D"modifications-data">jhoe=
ller</td><td class=3D"modifications-data">test/org/springframework/web/serv=
let/handler/metadata/PathMapHandlerMappingTests.java</td><td class=3D"modif=
ications-data">polishing</td></tr><tr class=3D"modifications-evenrow"><td c=
lass=3D"modifications-data">modified</td><td class=3D"modifications-data">j=
hoeller</td><td class=3D"modifications-data">src/org/springframework/contex=
t/support/StaticApplicationContext.java</td><td class=3D"modifications-data=
">polishing</td></tr><tr class=3D"modifications-oddrow"><td class=3D"modifi=
cations-data">modified</td><td class=3D"modifications-data">jhoeller</td><t=
d class=3D"modifications-data">src/org/springframework/context/support/Stat=
icMessageSource.java</td><td class=3D"modifications-data">polishing</td></t=
r><tr class=3D"modifications-evenrow"><td class=3D"modifications-data">modi=
fied</td><td class=3D"modifications-data">jhoeller</td><td class=3D"modific=
ations-data">test/org/springframework/context/support/StaticApplicationCont=
extTests.java</td><td class=3D"modifications-data">use exposed StaticMessag=
eSource</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">test/org/springframework/context/support/StaticM=
essageSourceTests.java</td><td class=3D"modifications-data">use exposed Sta=
ticMessageSource</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">test/org/springframework/context/suppo=
rt/ClassPathXmlApplicationContextTests.java</td><td class=3D"modifications-=
data">added GenericApplicationContext</td></tr><tr class=3D"modifications-o=
ddrow"><td class=3D"modifications-data">modified</td><td class=3D"modificat=
ions-data">jhoeller</td><td class=3D"modifications-data">src/org/springfram=
ework/beans/factory/support/DefaultListableBeanFactory.java</td><td class=
=3D"modifications-data">check for null returned by getType in getBeansOfTyp=
e implementation</td></tr><tr class=3D"modifications-evenrow"><td class=3D"=
modifications-data">added</td><td class=3D"modifications-data">jhoeller</td=
><td class=3D"modifications-data">src/org/springframework/context/support/G=
enericApplicationContext.java</td><td class=3D"modifications-data">added Ge=
nericApplicationContext</td></tr><tr class=3D"modifications-oddrow"><td cla=
ss=3D"modifications-data">modified</td><td class=3D"modifications-data">jho=
eller</td><td class=3D"modifications-data">src/org/springframework/context/=
support/StaticApplicationContext.java</td><td class=3D"modifications-data">=
added GenericApplicationContext</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=
/context/ConfigurableApplicationContext.java</td><td class=3D"modifications=
-data">getBeanFactory throws an IllegalStateException if context not initia=
lized</td></tr><tr class=3D"modifications-oddrow"><td class=3D"modification=
s-data">modified</td><td class=3D"modifications-data">jhoeller</td><td clas=
s=3D"modifications-data">src/org/springframework/context/support/AbstractAp=
plicationContext.java</td><td class=3D"modifications-data">getBeanFactory t=
hrows an IllegalStateException if context not initialized</td></tr><tr clas=
s=3D"modifications-evenrow"><td class=3D"modifications-data">modified</td><=
td class=3D"modifications-data">jhoeller</td><td class=3D"modifications-dat=
a">src/org/springframework/context/support/AbstractXmlApplicationContext.ja=
va</td><td class=3D"modifications-data">getBeanFactory throws an IllegalSta=
teException if context not initialized</td></tr><tr class=3D"modifications-=
oddrow"><td class=3D"modifications-data">modified</td><td class=3D"modifica=
tions-data">johnsonr</td><td class=3D"modifications-data">src/org/springfra=
mework/jdbc/object/SqlQuery.java</td><td class=3D"modifications-data">Impro=
ved Javadoc, clarifying threadsafety</td></tr><tr class=3D"modifications-ev=
enrow"><td class=3D"modifications-data">modified</td><td class=3D"modificat=
ions-data">jhoeller</td><td class=3D"modifications-data">test/org/springfra=
mework/beans/TestBean.java</td><td class=3D"modifications-data">properly su=
pport custom "destroy-method" for inner bean definitions</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"=
>test/org/springframework/beans/factory/xml/XmlBeanFactoryTests.java</td><t=
d class=3D"modifications-data">properly support custom "destroy-method" for=
inner bean definitions</td></tr><tr class=3D"modifications-evenrow"><td cl=
ass=3D"modifications-data">modified</td><td class=3D"modifications-data">jh=
oeller</td><td class=3D"modifications-data">test/org/springframework/beans/=
factory/xml/parent.xml</td><td class=3D"modifications-data">properly suppor=
t custom "destroy-method" for inner bean definitions</td></tr><tr class=3D"=
modifications-oddrow"><td class=3D"modifications-data">modified</td><td cla=
ss=3D"modifications-data">jhoeller</td><td class=3D"modifications-data">tes=
t/org/springframework/beans/factory/xml/reftypes.xml</td><td class=3D"modif=
ications-data">properly support custom "destroy-method" for inner bean defi=
nitions</td></tr><tr class=3D"modifications-evenrow"><td class=3D"modificat=
ions-data">modified</td><td class=3D"modifications-data">jhoeller</td><td c=
lass=3D"modifications-data">src/org/springframework/beans/factory/support/A=
bstractBeanFactory.java</td><td class=3D"modifications-data">properly suppo=
rt custom "destroy-method" for inner bean definitions</td></tr><tr class=3D=
"modifications-oddrow"><td class=3D"modifications-data">modified</td><td cl=
ass=3D"modifications-data">jhoeller</td><td class=3D"modifications-data">sr=
c/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFact=
ory.java</td><td class=3D"modifications-data">properly support custom "dest=
roy-method" for inner bean definitions</td></tr><tr class=3D"modifications-=
evenrow"><td class=3D"modifications-data">modified</td><td class=3D"modific=
ations-data">colins</td><td class=3D"modifications-data">docs/reference/src=
/beans.xml</td><td class=3D"modifications-data">apply doc patch about const=
ructor arg resolution, from Tim Nolan, plus a few fixes by me</td></tr></ta=
ble><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: <jue...@we...> - 2004-10-20 21:29:02
|
Thanks for spotting this, Olivier! This has effectively been broken = since 1.1 RC1, when FrameworkServlet was changed from overriding = "doGet"/"doPost" to overriding "service(HttpServletRequest, = HttpServletResponse)". Unfortunately, this slipped through, because the = test suite just simulates "getLastModified" calls - it doesn't go = through Servlet's "service" method. =20 I wonder why this hasn't been reported before... Probably because it = doesn't cause a failure - it simply sends the response back every time = rather than "not modified". Anyway, I've just fixed this through = recoding FrameworkServlet to override "doGet"/"doPost" again, and also = "doHead" and co. This lets the HttpServlet base class properly call = "getLastModified" now. =20 Juergen =20 ________________________________ Von: spr...@li... im Auftrag = von Olivier Jolly Gesendet: So 17.10.2004 15:45 An: spr...@li... Betreff: [Springframework-developer] Suspicion of problem with = getLastModified Hi, after the problem raised in the forum : http://forum.springframework.org/viewtopic.php?t=3D1385 , I checked this = a bit and noticed that all the mechanisms developped in the DispatcherServlet to get the last modification date and such were relying on the fact that getLastModified in called on DispatchedServlet, ok. However, the jsr152 implementation of tomcat (which is probably a common one) call the getLastModified in the service(HttpServletRequest,HttpServletResponse), which is overidden in the FrameworkServlet, and no code related to getLastModified is called in the overidden method. I propose to reenable the getLastModified call by adding in the service method of FrameworkServlet the code used to handle the last modification, hance the proposed attached patch. If I haven't forgot something, which would explain that it should work as it is now but that I and the forum poster didn't see, please yell at me, else I'll open a jira issue to remember it. Regards Olivier |
|
From: Chris N. <ch...@si...> - 2004-10-20 20:27:48
|
Rob Harrop wrote: > That is why I have held fire on this for a while. In order for Spring to > create a proxy of a class with no default constructor we need to pass > the args and the arg types to Cglib. These need to come from somewhere. > You can see how they are added to the Cglib proxy by looking at > Cglib2AopProxy. I sm not too sure on how we should go about adding this > to ProxyFactory and ProxyFactoryBean. BTW, in the case that the target class implements Serializable, it is theoretically possible to skip constructor invocation altogether, which would of course eliminate the need to pass any constructor arguments in. This would require some changes to CGLIB, and probably there aren't too many classes out there that you'd want to proxy and are Serializable but don't have a default constructor, but I thought I'd throw this out there. Chris |
|
From: Seth L. <set...@gm...> - 2004-10-20 18:26:18
|
On Tue, 19 Oct 2004 22:10:20 -0400, Guillaume Poirier <gpo...@gl...> wrote: > > How does it not create a leak if the classloader is not going away? > > The real cause of the OOM exceptions is that the WebappClassLoader > > instances never go away. > > I meant if the container (e.g. Tomcat) doesn't throw the ClassLoader away, > i.e. if it's still in use... > Of course, if the webapp is reloaded and the old ClassLoader isn't > collected, that's a leak. > > What I was saying is the problem with Dom4j cause a leak when you reload the > webapp, > but cause no leak if you never use hot-reload. (While the CGLIB leak > apparently does the opposite) Ahh... that's what I thought. Thanks for the clarification! I only wish A) there was a way to explicitly blow away the classloader or B) have hibernate be redeployable. One option is to place all the Hibernate related classes inside Tomcat's shared Classloader. This might reduce the amount of times I need to restart. Seth |
|
From: William G. T. Jr. <wg...@ru...> - 2004-10-20 12:02:12
|
you can send it to me. Rainer Schmitz wrote: > Aloha! > > I've done more work on the portlet view controller support. > - SimplePortletFormController is now part of a hierarchy similiar to the > servlet version. > - New ParameterizableViewController > - ParameterControllerMapping to map to a portlet view controller from a > given parameter. > > The code needs some more testing, but then I would like to share it. > Bill, Nick, should I send it to you or to the list? > > Cheers, > Rainer > |
|
From: Rainer S. <Rai...@ab...> - 2004-10-20 10:54:05
|
Aloha! I've done more work on the portlet view controller support. - SimplePortletFormController is now part of a hierarchy similiar to the servlet version. - New ParameterizableViewController - ParameterControllerMapping to map to a portlet view controller from a given parameter. The code needs some more testing, but then I would like to share it. Bill, Nick, should I send it to you or to the list? Cheers, Rainer |
|
From: Rob H. <ro...@ca...> - 2004-10-20 09:38:30
|
Jurgen,
That is why I have held fire on this for a while. In order for Spring to
create a proxy of a class with no default constructor we need to pass
the args and the arg types to Cglib. These need to come from somewhere.
You can see how they are added to the Cglib proxy by looking at
Cglib2AopProxy. I sm not too sure on how we should go about adding this
to ProxyFactory and ProxyFactoryBean.
Rob
jürgen höller [werk3AT] wrote:
>Which arguments do you intend to pass in there, for creation of the CGLIB proxy? ProxyFactory usually works with an existing target object, so doesn't know about the constructor arguments used for creating the target object.
>
>Does this mean that the application developer would have to specify an arbitrary set of arguments that the target class will accept, just to get an instance of the CGLIB proxy subclass? That would feel a bit odd.
>
>Juergen
>
>
>________________________________
>
>Von: spr...@li... im Auftrag von Rob Harrop
>Gesendet: Mi 20.10.2004 00:18
>An: spr...@li...
>Betreff: Re: [Springframework-developer] RE: CGLIB memory usage within class loader
>
>
>
>Jurgen,
>
>The non-default constructor stuff works in the Cglib2AopProxy class but
>I need to modify ProxyFactory and ProxyFactoryBean to pass the new args
>across to Cglib2AopProxy.
>
>I'll hold fire on new commits until you add yours in.
>
>Rob
>
>jürgen höller [werk3AT] wrote:
>
>
>
>>Rob,
>>
>>I haven't committed the changes yet, because I need to merge in your changes from the afternoon first :-) Will do so tomorrow morning. It would probably be good for you to wait until I've committed, to avoid any further merging conflicts...
>>
>>Your recent changes have to do with using non-default constructors on CGLIB proxies, as far as I see. Is this already fully working?
>>
>>Juergen
>>
>>
>>________________________________
>>
>>Von: spr...@li... im Auftrag von Rob Harrop
>>Gesendet: Di 19.10.2004 20:04
>>An: spr...@li...
>>Betreff: Re: [Springframework-developer] RE: CGLIB memory usage within class loader
>>
>>
>>
>>Jurgen/All,
>>
>>I'll check into this some more and see if I can reduce the memory usage
>>of the proxy classes. On another note I can't see the changes that
>>Jurgen has made, I made some changes about two hours ago and they seem
>>to have committed.
>>
>>Rob
>>
>>jürgen höller [werk3AT] wrote:
>>
>>
>>
>>
>>
>>>BTW, I've polished Cglib2AopProxy's source code quite a bit: for example, it logs at debug level now (rather than info), and uses formatting consistent with the rest of Spring's sources.
>>>
>>>I've actually already done this polishing a second time: The earlier one got lost. It shows up in CVS, but then seems to have got overwritten by a subsequent commit. There was also a JDK 1.4 dependency fix in there (Boolean.valueOf with a boolean argument), which got lost too.
>>>
>>>So please, when you merge before a commit, double-check that you're not losing updates that someone else applied before you! It wasn't a big issue this time, but what if we don't notice it next time...
>>>
>>>Juergen
>>>
>>>
>>>-----Original Message-----
>>>From: jürgen höller [werk3AT]
>>>Sent: Tuesday, October 19, 2004 6:35 PM
>>>To: spr...@li...
>>>Subject: CGLIB memory usage within class loader
>>>
>>>
>>>I've just been made aware of the following by a werk3 colleague: When repeatedly creating CGLIB proxies for the same target class but for different advices - within the same class loader -, you'll create new proxied classes all the time, which won't get removed for the lifetime of the classes.
>>>
>>>The generated classes themselves are not the problem here. However, each of those proxy classes seems to hold strong references to its advices and target object, through holding the ProxyCallbackFilter instance that was passed into the Enhancer on proxy creation. Note that the proxy *class* holds that reference, not the proxy *instance*.
>>>
>>>The effect is that you can easily run out of memory if your advices or target objects occupy a large amount of memory, as none of those objects will get garbage collected as long as the CGLIB-generated proxy class is still hanging around in the class loader. This does *not* happen at all with JDK dynamic proxies.
>>>
>>>Of course, such excessive proxy creation is not the usual case in a production application. Web app restart is not a problem either, as the class loader will be shut down (releasing the CGLIB-generated proxy classes). The usual scenario where this memory leak becomes a problem is test suites, with application contexts getting created per test method.
>>>
>>>The following code snippet reproduces the issue:
>>>
>>> while (true) {
>>> ProxyFactory proxyFactory = new ProxyFactory();
>>> proxyFactory.setTarget(new TestBean() {
>>> private byte[] field = new byte[1000000];
>>> });
>>> proxyFactory.addAdvice(new DebugInterceptor());
>>> proxyFactory.setProxyTargetClass(true);
>>> TestBean tb = (TestBean) proxyFactory.getProxy();
>>> Thread.sleep(100);
>>> }
>>>
>>>Depending on the max memory available to the VM, you'll run into an OutOfMemoryError sooner or later, as the target TestBean instance with its byte array of size 1000000 never gets garbage collected. Note that this does *not* happen when removing the addAdvice call, as we're just generating a single CGLIB proxy class then.
>>>
>>>Is this behavior unavoidable? What do we recommend for such testing scenarios then? In particular for integration tests with Hibernate, a 5 MB leak per context creation is not really acceptable. Of course it's preferable to share the application context as far as possible, but there are still valid use cases for repeated creation...
>>>
>>>Juergen
>>>
>>>
>>>-------------------------------------------------------
>>>This SF.net email is sponsored by: IT Product Guide on ITManagersJournal
>>>Use IT products in your business? Tell us what you think of them. Give us
>>>Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more
>>>http://productguide.itmanagersjournal.com/guidepromo.tmpl
>>>_______________________________________________
>>>Springframework-developer mailing list
>>>Spr...@li...
>>>https://lists.sourceforge.net/lists/listinfo/springframework-developer
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>-------------------------------------------------------
>>This SF.net email is sponsored by: IT Product Guide on ITManagersJournal
>>Use IT products in your business? Tell us what you think of them. Give us
>>Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more
>>http://productguide.itmanagersjournal.com/guidepromo.tmpl
>>_______________________________________________
>>Springframework-developer mailing list
>>Spr...@li...
>>https://lists.sourceforge.net/lists/listinfo/springframework-developer
>>
>>
>>
>>
>>-------------------------------------------------------
>>This SF.net email is sponsored by: IT Product Guide on ITManagersJournal
>>Use IT products in your business? Tell us what you think of them. Give us
>>Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more
>>http://productguide.itmanagersjournal.com/guidepromo.tmpl
>>_______________________________________________
>>Springframework-developer mailing list
>>Spr...@li...
>>https://lists.sourceforge.net/lists/listinfo/springframework-developer
>>
>>
>>
>>
>>
>>
>
>
>-------------------------------------------------------
>This SF.net email is sponsored by: IT Product Guide on ITManagersJournal
>Use IT products in your business? Tell us what you think of them. Give us
>Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more
>http://productguide.itmanagersjournal.com/guidepromo.tmpl
>_______________________________________________
>Springframework-developer mailing list
>Spr...@li...
>https://lists.sourceforge.net/lists/listinfo/springframework-developer
>
>
>
>
>-------------------------------------------------------
>This SF.net email is sponsored by: IT Product Guide on ITManagersJournal
>Use IT products in your business? Tell us what you think of them. Give us
>Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more
>http://productguide.itmanagersjournal.com/guidepromo.tmpl
>_______________________________________________
>Springframework-developer mailing list
>Spr...@li...
>https://lists.sourceforge.net/lists/listinfo/springframework-developer
>
>
>
>
|
|
From: Ugo C. <ug...@ap...> - 2004-10-20 08:27:56
|
Il giorno 20/ott/04, alle 07:28, jack hi ha scritto: > I am now under one project which takes Spring framework and Cocoon > webmvc. My question is have you integrate Spring and Cocoon before? If > yes, where can I find the resource? Appreciate your time. I did a talk on this issue at the recent Cocoon GetTogether. You can find a copy if the slides here: <http://www.cbim.it/it/bacheca/download/varie/Ugo_Cei_GT2004.pdf>. Do not hesitate to ask more details here or on Cocoon's mailing lists. Ugo -- Ugo Cei - http://beblogging.com/ |
|
From: Rod J. <ro...@in...> - 2004-10-20 08:10:10
|
> OH, that's surprising to me. I missed that comment in the Javadoc which > says the same, more or less. > > (1) There's still the Object[] parameter values separated from setting > the parameter types... though this can be localized to the SqlQuery > subclass implementation you suggested. setXXXX (where XXX is a type) > style I think is preferred. Sure, there's a choice here. Use JdbcTemplate if you prefer that. SqlQuery and other classes in that tree are intended to abstract a bit farther from JDBC. That's often, but not always, appropriate. > (2) If it's suggested that client code invoke this specialized method > only, then shouldn't most of the methods in RdmsOperation on-up in the > hierarchy be protected? Having them public suggests that client code > might want to touch them when they shouldn't be. As it stands, if I > don't want client code to have visibility of them, I'd need to create a > small class that delegates to an SqlQuery instead of extends from it. > It'd need to delegate setting the DataSource too. Making them protected would be a valid option. However, the present design allows the choice of using the generic method. From the Javadoc: "Subclasses can either rely on one of these inherited methods, or can add their own custom execution methods, with meaningful names and typed parameters. Each custom query method will invoke one of this class's untype query methods." > > (3) RdbmsOperation claims to be thread-safe but it isn't. compile(), > and all getters & setters should employ synchronization. Alternatively, > the false thread-safe claim could be eliminated. It's threadsafe after initialization is complete, which is what matters. I've updated the Javadoc to make that clearer, although I think it's already fairly obvious. Rgds Rod |