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: Lynette K. <kn...@si...> - 2004-12-21 06:51:12
|
Jeremy Haile <jhaile <at> fastmail.fm> writes:
>
> I have had an issue where a spring configured property is "set" with a
> more specific type than the getter-method returns. The reason is that
> the getter method implements an interface and is required to return a
> specific type. The net result is that the getter and setter method take
> in/return different class types. My getter and setter looked like the
> code below:
>
> public Component getView() {
> return view;
> }
>
> public void setView( Container view ) {
> this.view = view;
> }
>
> This is probably not legal, JavaBeans style access, and my solution
> ended up being renaming the method in the interface. However, the error
> message I received was confusing at best, since the property "view" is
> obviously writeable based on the code pasted above. The error message
> was:
>
> org.springframework.beans.factory.BeanCreationException: Error creating
> bean with name 'alarmBanner' defined in class path resource
> [default.dynapp.spring.xml]: Error setting property values; nested
> exception is org.springframework.beans.NotWritablePropertyException:
> Invalid property 'view' of bean class [AlarmBannerController]: Property
> 'view' is not writable
> org.springframework.beans.NotWritablePropertyException: Invalid property
> 'view' of bean class [AlarmBannerController]: Property 'view' is not
> writable
> at org.springframework.beans.BeanWrapperImpl.setPropertyValue
(BeanWrapperImpl.java:666)
> at org.springframework.beans.BeanWrapperImpl.setPropertyValue
(BeanWrapperImpl.java:588)
> at org.springframework.beans.BeanWrapperImpl.setPropertyValue
(BeanWrapperImpl.java:720)
> at org.springframework.beans.BeanWrapperImpl.setPropertyValues
(BeanWrapperImpl.java:747)
> at org.springframework.beans.BeanWrapperImpl.setPropertyValues
(BeanWrapperImpl.java:736)
> at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.ap
plyPropertyValues(AbstractAutowireCapableBeanFactory.java:797)
> at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.po
pulateBean(AbstractAutowireCapableBeanFactory.java:637)
>
> The getter was not even required for spring, as I only set this
> property.
>
> I have two questions:
> 1) Is this behavior desirable? Should Spring throw an exception if the
> getter and setter's class type does not match. This is probably not
> really valid JavaBean-style properties, but obviously you can still get
> and set the "view" property. In my case, I was not even "getting" the
> property using spring, but only setting it.
>
> 2) If this is the desired behavior, should the error message displayed
> be clearer? I have seen this error in the past and it usually means
> that there is no setter method or the setter method had non-public
> access. It seems like this error message should read more like
> "Property 'view' is not a valid bean property." - or something like
> that.
>
> Jeremy Haile
>
>
> -------------------------------------------------------
> SF email is sponsored by - The IT Product Guide
> Read honest & candid reviews on hundreds of IT Products from real users.
> Discover which products truly live up to the hype. Start reading now.
> http://productguide.itmanagersjournal.com/
>
I'm also hitting the same error.
<Dec 21, 2004 2:24:51 PM GMT+08:00> <Error> <HTTP> <BEA-101216>
<Servlet: "context" failed to preload on startup in Web application: "Crips".
javax.servlet.ServletException: Error creating bean with name 'exam' defined
in ServletContext resource [/WEB-INF/applicationContext.xml]: Error setting
property values; nested exception is
org.springframework.beans.NotWritablePropertyException: Invalid
property 'marksDAO' of bean class [school.eng.electronics.business.ExamImpl]:
Property 'marksDAO' is not writable
at weblogic.servlet.internal.ServletStubImpl.createServlet
(ServletStubImpl.java:884)
at weblogic.servlet.internal.ServletStubImpl.createInstances
(ServletStubImpl.java:848)
at weblogic.servlet.internal.ServletStubImpl.prepareServlet
(ServletStubImpl.java:787)
at weblogic.servlet.internal.WebAppServletContext.preloadServlet
(WebAppServletContext.java:3252)
at weblogic.servlet.internal.WebAppServletContext.preloadServlets
(WebAppServletContext.java:3209)
at weblogic.servlet.internal.WebAppServletContext.preloadServlets
(WebAppServletContext.java:3195)
at weblogic.servlet.internal.WebAppServletContext.preloadResources
(WebAppServletContext.java:3174)
at weblogic.servlet.internal.WebAppServletContext.setStarted
(WebAppServletContext.java:5647)
at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:869)
at weblogic.j2ee.J2EEApplicationContainer.start
(J2EEApplicationContainer.java:2022)
at weblogic.j2ee.J2EEApplicationContainer.activate
(J2EEApplicationContainer.java:2063)
at
weblogic.management.deploy.slave.SlaveDeployer$ComponentActivateTask.activateCo
ntainer(SlaveDeployer.java:2592)
at weblogic.management.deploy.slave.SlaveDeployer$ActivateTask.doCommit
(SlaveDeployer.java:2515)
at weblogic.management.deploy.slave.SlaveDeployer$Task.commit
(SlaveDeployer.java:2317)
at weblogic.management.deploy.slave.SlaveDeployer$Task.checkAutoCommit
(SlaveDeployer.java:2399)
at weblogic.management.deploy.slave.SlaveDeployer$Task.prepare
(SlaveDeployer.java:2311)
at weblogic.management.deploy.slave.SlaveDeployer$ActivateTask.prepare
(SlaveDeployer.java:2479)
at weblogic.management.deploy.slave.SlaveDeployer.processPrepareTask
(SlaveDeployer.java:798)
at weblogic.management.deploy.slave.SlaveDeployer.prepareDelta
(SlaveDeployer.java:507)
at weblogic.management.deploy.slave.SlaveDeployer.prepareUpdate
(SlaveDeployer.java:465)
at weblogic.drs.internal.SlaveCallbackHandler$1.execute
(SlaveCallbackHandler.java:25)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
>
As stated in Spring documentation, the getter method is not required for
spring, and I only set this property.
I did not hit the NotWritablePropertyException with only 1 DAO, ie. if I only
have MarksDAO in ExamImpl, I do not have such an exception.
[ExamImpl.java]
private MarksDAO marksDAO;
private SADAO saDAO;
public void setMarksDAO(MarksDAO marksDAO) {
this.marksDAO = marksDAO;
}
public void setSADAO(SADAO saDAO) {
this.saDAO = saDAO;
}
....
[applicationContext.xml]
<?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="exam" class="school.eng.electronics.business.ExamImpl">
<property name="marksDAO"><ref bean="marksDAO"/></property>
<property name="saDAO"><ref bean="saDAO"/></property>
</bean>
<bean id="marksDAO" class="school.eng.electronics.dao.TestMarksDAO"/>
<bean id="saDAO" class="school.eng.electronics.dao.TestSADAO"/>
</beans>
[MarksDAO.java]
public interface MarksDAO {
...
}
[TestMarksDAO.java]
public class TestMarksDAO implements MarksDAO {
...
}
As mentioned above, as spring does not require a getter method and I do not
have a getter method, why do I have such an exception thrown when I try to
deploy my war file??
Thank you.
|
|
From: Darren D. <da...@da...> - 2004-12-21 00:17:26
|
On Monday 20 December 2004 20:54, j=FCrgen h=F6ller [werk3AT] wrote: > I've just added such an "ignoreInvalidKeys" bean property to > PropertyOverrideConfigurer. thanks Juergen, works well. =2D-=20 Darren Davison Public Key: #DD356B0D |
|
From: <al...@jt...> - 2004-12-20 23:40:07
|
<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:#901090; }.unittests-failure { fon=
t-family:arial,helvetica,sans-serif; font-size:8pt; color:#FF0000; }.checks=
tyle-oddrow { background-color:#CCCCCC }.checkstyle-data { font-family:aria=
l,helvetica,sans-serif; font-size:8pt; color:#000000; }.checkstyle-sectionh=
eader { background-color:#000066; font-family:arial,helvetica,sans-serif; f=
ont-size:10pt; color:#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.175</td></tr><tr><td class=3D"header-data"><span class=
=3D"header-label">Date of build: </span>12/21/2004 00:16:45</td></tr><=
tr><td class=3D"header-data"><span class=3D"header-label">Time to build:&nb=
sp;</span>21 minutes 15 seconds</td></tr><tr><td class=3D"header-data"><spa=
n class=3D"header-label">Last changed: </span>12/20/2004 22:03:32</td>=
</tr><tr><td class=3D"header-data"><span class=3D"header-label">Last log en=
try: </span>added "ignoreInvalidKeys" bean property</td></tr></table><=
p>
<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-data">Note: S=
ome input files use or override a deprecated API.<br class=3D"none"/>Note: =
Recompile with -deprecation for details.<br class=3D"none"/>Note: /jteam/bu=
ild2/checkout/spring/spring/mock/org/springframework/mock/web/MockHttpSessi=
on.java uses or overrides a deprecated API.<br class=3D"none"/>Note: Recomp=
ile with -deprecation for details.<br class=3D"none"/>Note: Some input file=
s use or override a deprecated API.<br class=3D"none"/>Note: Recompile with=
-deprecation for details.<br class=3D"none"/></pre></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"><tr><td class=
=3D"compile-sectionheader"> Javadoc Errors/War=
nings: (26) </td></tr><tr><td><pre class=3D"compile-data=
">/jteam/build2/checkout/spring/spring/src/org/springframework/jdbc/support=
/lob/OracleLobHandler.java:76: warning - Tag @see: reference not found: ora=
cle.sql.BLOB<br/>/jteam/build2/checkout/spring/spring/src/org/springframewo=
rk/jdbc/support/lob/OracleLobHandler.java:76: warning - Tag @see: reference=
not found: oracle.sql.CLOB<br/>/jteam/build2/checkout/spring/spring/src/or=
g/springframework/jdbc/support/lob/OracleLobHandler.java:115: warning - Tag=
@see: reference not found: oracle.sql.BLOB#DURATION_SESSION<br/>/jteam/bui=
ld2/checkout/spring/spring/src/org/springframework/jdbc/support/lob/OracleL=
obHandler.java:115: warning - Tag @see: reference not found: oracle.sql.BLO=
B#MODE_READWRITE<br/>/jteam/build2/checkout/spring/spring/src/org/springfra=
mework/jdbc/support/lob/OracleLobHandler.java:115: warning - Tag @see: refe=
rence not found: oracle.sql.CLOB#DURATION_SESSION<br/>/jteam/build2/checkou=
t/spring/spring/src/org/springframework/jdbc/support/lob/OracleLobHandler.j=
ava:115: warning - Tag @see: reference not found: oracle.sql.CLOB#MODE_READ=
WRITE<br/>/jteam/build2/checkout/spring/spring/src/org/springframework/jdbc=
/support/lob/OracleLobHandler.java:154: warning - Tag @see: reference not f=
ound: oracle.jdbc.OracleConnection<br/>/jteam/build2/checkout/spring/spring=
/src/org/springframework/jdbc/support/lob/OracleLobHandler.java:164: warnin=
g - Tag @see: reference not found: oracle.sql.BLOB#createTemporary<br/>/jte=
am/build2/checkout/spring/spring/src/org/springframework/jdbc/support/lob/O=
racleLobHandler.java:164: warning - Tag @see: reference not found: oracle.s=
ql.CLOB#createTemporary<br/>/jteam/build2/checkout/spring/spring/src/org/sp=
ringframework/jdbc/support/nativejdbc/JBossNativeJdbcExtractor.java:49: war=
ning - Tag @see: reference not found: org.jboss.resource.adapter.jdbc.Wrapp=
edConnection#getUnderlyingConnection<br/>/jteam/build2/checkout/spring/spri=
ng/src/org/springframework/jdbc/support/nativejdbc/JBossNativeJdbcExtractor=
.java:49: warning - Tag @see: reference not found: org.jboss.resource.adapt=
er.jdbc.WrappedStatement#getUnderlyingStatement<br/>/jteam/build2/checkout/=
spring/spring/src/org/springframework/jdbc/support/nativejdbc/JBossNativeJd=
bcExtractor.java:49: warning - Tag @see: reference not found: org.jboss.res=
ource.adapter.jdbc.WrappedResultSet#getUnderlyingResultSet<br/>/jteam/build=
2/checkout/spring/spring/src/org/springframework/jdbc/support/nativejdbc/We=
bLogicNativeJdbcExtractor.java:45: warning - Tag @see: reference not found:=
weblogic.jdbc.extensions.WLConnection#getVendorConnection<br/>/jteam/build=
2/checkout/spring/spring/src/org/springframework/jdbc/support/nativejdbc/We=
bSphereNativeJdbcExtractor.java:34: warning - Tag @see: reference not found=
: com.ibm.ws.rsadapter.jdbc.WSJdbcConnection<br/>/jteam/build2/checkout/spr=
ing/spring/src/org/springframework/jdbc/support/nativejdbc/WebSphereNativeJ=
dbcExtractor.java:34: warning - Tag @see: reference not found: com.ibm.ws.r=
sadapter.jdbc.WSJdbcUtil#getNativeConnection<br/>/jteam/build2/checkout/spr=
ing/spring/src/org/springframework/jdbc/support/nativejdbc/WebSphereNativeJ=
dbcExtractor.java:34: warning - Tag @see: reference not found: com.ibm.ejs.=
cm.proxy.ConnectionProxy#getPhysicalConnection<br/>/jteam/build2/checkout/s=
pring/spring/src/org/springframework/orm/ibatis/SqlMapClientFactoryBean.jav=
a:170: warning - Tag @see: reference not found: com.ibatis.sqlmap.engine.tr=
ansaction.jdbc.JdbcTransactionConfig<br/>/jteam/build2/checkout/spring/spri=
ng/src/org/springframework/orm/ibatis/SqlMapClientFactoryBean.java:170: war=
ning - Tag @see: reference not found: com.ibatis.sqlmap.engine.transaction.=
jta.JtaTransactionConfig<br/>/jteam/build2/checkout/spring/spring/src/org/s=
pringframework/orm/ibatis/SqlMapClientFactoryBean.java:198: warning - Tag @=
see: reference not found: com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTra=
nsactionConfig<br/>/jteam/build2/checkout/spring/spring/src/org/springframe=
work/orm/ibatis/SqlMapClientFactoryBean.java:198: warning - Tag @see: refer=
ence not found: com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConf=
ig<br/>/jteam/build2/checkout/spring/spring/src/org/springframework/transac=
tion/jta/WebLogicJtaTransactionManager.java:67: warning - Tag @see: referen=
ce not found: weblogic.transaction.TransactionManager#forceResume<br/>/jtea=
m/build2/checkout/spring/spring/src/org/springframework/transaction/jta/Web=
LogicServerTransactionManagerFactoryBean.java:45: warning - Tag @see: refer=
ence not found: weblogic.transaction.TxHelper#getTransactionManager<br/>/jt=
eam/build2/checkout/spring/spring/src/org/springframework/transaction/jta/W=
ebSphereTransactionManagerFactoryBean.java:47: warning - Tag @see: referenc=
e not found: com.ibm.ws.Transaction.TransactionManagerFactory#getTransactio=
nManager<br/>/jteam/build2/checkout/spring/spring/src/org/springframework/t=
ransaction/jta/WebSphereTransactionManagerFactoryBean.java:47: warning - Ta=
g @see: reference not found: com.ibm.ejs.jts.jta.JTSXA#getTransactionManage=
r<br/>/jteam/build2/checkout/spring/spring/src/org/springframework/transact=
ion/jta/WebSphereTransactionManagerFactoryBean.java:47: warning - Tag @see:=
reference not found: com.ibm.ejs.jts.jta.TransactionManagerFactory#getTran=
sactionManager<br/>/jteam/build2/checkout/spring/spring/src/org/springframe=
work/web/servlet/handler/metadata/PathMap.java:31: warning - @@org.apache.c=
ommons.attributes.Indexed() is an unknown tag.<br/></pre></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"unittests-sectionheader"> =
Unit Tests: (2133) </td></tr><tr><td class=
=3D"unittests-data" colspan=3D"2"> All Tests Pas=
sed </td></tr><tr><td><table width=3D"98%" border=3D=
"0" cellspacing=3D"0" cellpadding=3D"2" align=3D"center"></table></td></tr>=
<tr></tr><tr><td colspan=3D"2"> </td></tr></table><p>
<table width=3D"98%" border=3D"0" cellspacing=3D"1" cellpadding=3D"2" align=
=3D"center"><tr><td colspan=3D"6" class=3D"modifications-sectionheader"> =
Modifications since last build: =
(29) </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/bean=
s/factory/config/PropertyResourceConfigurerTests.java</td><td class=3D"modi=
fications-data">added "ignoreInvalidKeys" bean property</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/config/PropertyOverrideConfigurer.ja=
va</td><td class=3D"modifications-data">added "ignoreInvalidKeys" bean prop=
erty</td></tr><tr class=3D"modifications-evenrow"><td class=3D"modification=
s-data">modified</td><td class=3D"modifications-data">jhoeller</td><td clas=
s=3D"modifications-data">src/org/springframework/beans/factory/support/Cgli=
bSubclassingInstantiationStrategy.java</td><td class=3D"modifications-data"=
>minimal logging at INFO level</td></tr><tr class=3D"modifications-oddrow">=
<td class=3D"modifications-data">modified</td><td class=3D"modifications-da=
ta">jhoeller</td><td class=3D"modifications-data">src/org/springframework/b=
eans/factory/support/AbstractAutowireCapableBeanFactory.java</td><td class=
=3D"modifications-data">minimal logging at INFO level</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/support/AbstractBeanFactory.java</td><=
td class=3D"modifications-data">minimal logging at INFO level</td></tr><tr =
class=3D"modifications-oddrow"><td class=3D"modifications-data">modified</t=
d><td class=3D"modifications-data">jhoeller</td><td class=3D"modifications-=
data">test/org/springframework/beans/factory/xml/XmlBeanFactoryTests.java</=
td><td class=3D"modifications-data">avoid potential NPE in case of chained =
factory-methods with factory-bean</td></tr><tr class=3D"modifications-evenr=
ow"><td class=3D"modifications-data">modified</td><td class=3D"modification=
s-data">jhoeller</td><td class=3D"modifications-data">test/org/springframew=
ork/beans/factory/xml/factory-methods.xml</td><td class=3D"modifications-da=
ta">avoid potential NPE in case of chained factory-methods with factory-bea=
n</td></tr><tr class=3D"modifications-oddrow"><td class=3D"modifications-da=
ta">modified</td><td class=3D"modifications-data">jhoeller</td><td class=3D=
"modifications-data">src/org/springframework/beans/factory/support/Abstract=
AutowireCapableBeanFactory.java</td><td class=3D"modifications-data">avoid =
potential NPE in case of chained factory-methods with factory-bean</td></tr=
><tr class=3D"modifications-evenrow"><td class=3D"modifications-data">modif=
ied</td><td class=3D"modifications-data">jhoeller</td><td class=3D"modifica=
tions-data">src/org/springframework/beans/factory/support/InstantiationStra=
tegy.java</td><td class=3D"modifications-data">avoid potential NPE in case =
of chained factory-methods with factory-bean</td></tr><tr class=3D"modifica=
tions-oddrow"><td class=3D"modifications-data">modified</td><td class=3D"mo=
difications-data">jhoeller</td><td class=3D"modifications-data">src/org/spr=
ingframework/beans/factory/support/SimpleInstantiationStrategy.java</td><td=
class=3D"modifications-data">avoid potential NPE in case of chained factor=
y-methods with factory-bean</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">test/org/springframework/sc=
heduling/quartz/QuartzSupportTests.java</td><td class=3D"modifications-data=
">added "schedulerListeners", "(global)JobListeners", "(global)TriggerListe=
ners" bean properties</td></tr><tr class=3D"modifications-oddrow"><td class=
=3D"modifications-data">modified</td><td class=3D"modifications-data">jhoel=
ler</td><td class=3D"modifications-data">src/org/springframework/scheduling=
/quartz/SchedulerFactoryBean.java</td><td class=3D"modifications-data">adde=
d "schedulerListeners", "(global)JobListeners", "(global)TriggerListeners" =
bean properties</td></tr><tr class=3D"modifications-evenrow"><td class=3D"m=
odifications-data">modified</td><td class=3D"modifications-data">jhoeller</=
td><td class=3D"modifications-data">src/org/springframework/scheduling/quar=
tz/CronTriggerBean.java</td><td class=3D"modifications-data">add "triggerLi=
stenerNames" bean property</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/sched=
uling/quartz/SimpleTriggerBean.java</td><td class=3D"modifications-data">ad=
d "triggerListenerNames" bean property</td></tr><tr class=3D"modifications-=
evenrow"><td class=3D"modifications-data">modified</td><td class=3D"modific=
ations-data">jhoeller</td><td class=3D"modifications-data">src/org/springfr=
amework/scheduling/quartz/JobDetailBean.java</td><td class=3D"modifications=
-data">add "jobListenerNames" bean property</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">test/org/spr=
ingframework/scheduling/timer/TimerSupportTests.java</td><td class=3D"modif=
ications-data">accept SchedulerTimerTasks with "period" <=3D0, schedulin=
g them for one-time execution</td></tr><tr class=3D"modifications-evenrow">=
<td class=3D"modifications-data">modified</td><td class=3D"modifications-da=
ta">jhoeller</td><td class=3D"modifications-data">src/org/springframework/s=
cheduling/timer/TimerFactoryBean.java</td><td class=3D"modifications-data">=
accept SchedulerTimerTasks with "period" <=3D0, scheduling them for one-=
time execution</td></tr><tr class=3D"modifications-oddrow"><td class=3D"mod=
ifications-data">modified</td><td class=3D"modifications-data">jhoeller</td=
><td class=3D"modifications-data">src/org/springframework/scheduling/timer/=
ScheduledTimerTask.java</td><td class=3D"modifications-data">accept Schedul=
erTimerTasks with "period" <=3D0, scheduling them for one-time execution=
</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">src/org/springframework/jms/core/JmsTemplate102.java</=
td><td class=3D"modifications-data">added "receiveSelected" and "receivedSe=
lectedAndConvert" methods, accepting JMS message selectors</td></tr><tr cla=
ss=3D"modifications-oddrow"><td class=3D"modifications-data">modified</td><=
td class=3D"modifications-data">jhoeller</td><td class=3D"modifications-dat=
a">src/org/springframework/jms/core/JmsOperations.java</td><td class=3D"mod=
ifications-data">added "receiveSelected" and "receivedSelectedAndConvert" m=
ethods, accepting JMS message selectors</td></tr><tr class=3D"modifications=
-evenrow"><td class=3D"modifications-data">modified</td><td class=3D"modifi=
cations-data">jhoeller</td><td class=3D"modifications-data">src/org/springf=
ramework/jms/core/JmsTemplate.java</td><td class=3D"modifications-data">add=
ed "receiveSelected" and "receivedSelectedAndConvert" methods, accepting JM=
S message selectors</td></tr><tr class=3D"modifications-oddrow"><td class=
=3D"modifications-data">modified</td><td class=3D"modifications-data">jhoel=
ler</td><td class=3D"modifications-data">test/org/springframework/jms/core/=
JmsTemplateTests.java</td><td class=3D"modifications-data">added "receiveSe=
lected" and "receivedSelectedAndConvert" methods, accepting JMS message sel=
ectors</td></tr><tr class=3D"modifications-evenrow"><td class=3D"modificati=
ons-data">modified</td><td class=3D"modifications-data">jhoeller</td><td cl=
ass=3D"modifications-data">test/org/springframework/jms/core/JmsTemplate102=
Tests.java</td><td class=3D"modifications-data">added "receiveSelected" and=
"receivedSelectedAndConvert" methods, accepting JMS message selectors</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">docs/reference/src/beans.xml</td><td class=3D"modifications-=
data">fixed constructor-arg code example</td></tr><tr class=3D"modification=
s-evenrow"><td class=3D"modifications-data">modified</td><td class=3D"modif=
ications-data">jhoeller</td><td class=3D"modifications-data">docs/reference=
/src/index.xml</td><td class=3D"modifications-data">updated for 1.1.4</td><=
/tr><tr class=3D"modifications-oddrow"><td class=3D"modifications-data">mod=
ified</td><td class=3D"modifications-data">jhoeller</td><td class=3D"modifi=
cations-data">readme.txt</td><td class=3D"modifications-data">updated for 1=
.1.4</td></tr><tr class=3D"modifications-evenrow"><td class=3D"modification=
s-data">modified</td><td class=3D"modifications-data">jhoeller</td><td clas=
s=3D"modifications-data">project.properties</td><td class=3D"modifications-=
data">updated for 1.1.4</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">mock/org/springframework/mock/we=
b/MockHttpServletResponse.java</td><td class=3D"modifications-data">flush b=
uffer before returning content</td></tr><tr class=3D"modifications-evenrow"=
><td class=3D"modifications-data">modified</td><td class=3D"modifications-d=
ata">jhoeller</td><td class=3D"modifications-data">mock/org/springframework=
/mock/web/DelegatingServletOutputStream.java</td><td class=3D"modifications=
-data">added delegating flush implementation</td></tr></table><p>
<table width=3D"98%" border=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=
=3D"center"><tr><td class=3D"distributables-sectionheader"> =
Deployments by this build: (16) </td>=
</tr><tr><td class=3D"distributables-data">Building jar: /jteam/build2/chec=
kout/spring/spring/dist/spring-core.jar</td></tr><tr class=3D"distributable=
s-oddrow"><td class=3D"distributables-data">Building jar: /jteam/build2/che=
ckout/spring/spring/dist/spring-aop.jar</td></tr><tr><td class=3D"distribut=
ables-data">Building jar: /jteam/build2/checkout/spring/spring/dist/spring-=
context.jar</td></tr><tr class=3D"distributables-oddrow"><td class=3D"distr=
ibutables-data">Building jar: /jteam/build2/checkout/spring/spring/dist/spr=
ing-dao.jar</td></tr><tr><td class=3D"distributables-data">Building jar: /j=
team/build2/checkout/spring/spring/dist/spring-orm.jar</td></tr><tr class=
=3D"distributables-oddrow"><td class=3D"distributables-data">Building jar: =
/jteam/build2/checkout/spring/spring/dist/spring-web.jar</td></tr><tr><td c=
lass=3D"distributables-data">Building jar: /jteam/build2/checkout/spring/sp=
ring/dist/spring-webmvc.jar</td></tr><tr class=3D"distributables-oddrow"><t=
d class=3D"distributables-data">Building jar: /jteam/build2/checkout/spring=
/spring/dist/spring.jar</td></tr><tr><td class=3D"distributables-data">Buil=
ding jar: /jteam/build2/checkout/spring/spring/dist/spring-mock.jar</td></t=
r><tr class=3D"distributables-oddrow"><td class=3D"distributables-data">Bui=
lding war: /jteam/build2/checkout/spring/spring/autobuilds/apps/buildtest/d=
ist/buildtest.war</td></tr><tr><td class=3D"distributables-data">Building w=
ar: /jteam/build2/checkout/spring/spring/autobuilds/apps/buildtest/dist/bui=
ldtest.war</td></tr><tr class=3D"distributables-oddrow"><td class=3D"distri=
butables-data">Building war: /jteam/build2/checkout/spring/spring/autobuild=
s/apps/buildtest/dist/buildtest.war</td></tr><tr><td class=3D"distributable=
s-data">Building jar: /jteam/build2/checkout/spring/spring/autobuilds/apps/=
jpetstore/war/WEB-INF/lib/jpetstore.jar</td></tr><tr class=3D"distributable=
s-oddrow"><td class=3D"distributables-data">Building war: /jteam/build2/che=
ckout/spring/spring/autobuilds/apps/jpetstore/dist/jpetstore.war</td></tr><=
tr><td class=3D"distributables-data">Building jar: /jteam/build2/checkout/s=
pring/spring/autobuilds/apps/jpetstore/war/WEB-INF/lib/jpetstore.jar</td></=
tr><tr class=3D"distributables-oddrow"><td class=3D"distributables-data">Bu=
ilding war: /jteam/build2/checkout/spring/spring/autobuilds/apps/jpetstore/=
dist/jpetstore.war</td></tr></table>
</body></html> |
|
From: Drew D. <dr...@og...> - 2004-12-20 23:04:27
|
Rod Johnson wrote: >> Thats great to know! I've been using lots of Tapestry + Spring + >> Hibernate lately and was a little worried that Tapestry 3.1 with all >> the HiveMind stuff might be painful to use what with all the HIveMind >> stuff everywhere - but this is great news! > > Must say that I'm still not entirely comfortable with this direction > of Tapestry. It smacks of a certain software company's policy of > bundling things :-) > > But, sure, the Spring philosophy is that we integrate with things, if > it brings value to our users. I've worked with this same stack (T-S-H) extensively. I also hammer on Howard to make sure that the configuration of HiveMind is capable of handling Spring integration smoothly. I wrote some integration stuff with Tapestry that allows for smoother integration with Spring for finding beans in components/pages, and for allowing the Visit and Global objects to participate with Spring in application and session configuration. I'd like a more orthogonal coupling that I currently have, but the problem is that there are certain aspects of Tapestry that are not "injectable" just as the Visit and Global (which are created by the Engine ala a factory method). I would really love to be able to integrate Spring services smoothly in all of the aspects of a Tapestry application - most notably the component loading (AOP would be a godsend; if it would look up the component references and let Spring-managed factories handle the pooling and creation of component/page classes that would be super-nifty). Anyway, Howard is at least aware of a vocal presence lobbying for this kind of support. I don't want him to feel that no one wants his child (HiveMind), but Spring has a critical mass that should not be ignored. Howard is intellectually honest enough to acknowlege this, I think. - Drew -- +---------------------------------+ < Drew Davidson | OGNL Technology > +---------------------------------+ | Email: dr...@og... / | Web: http://www.ognl.org / | Vox: (520) 531-1966 < | Fax: (520) 531-1965 \ | Mobile: (520) 405-2967 \ +---------------------------------+ |
|
From: <jue...@we...> - 2004-12-20 20:51:33
|
I've just added such an "ignoreInvalidKeys" bean property to =
PropertyOverrideConfigurer.
=20
Juergen
=20
________________________________
Von: spr...@li... im Auftrag =
von j=FCrgen h=F6ller [werk3AT]
Gesendet: Mo 20.12.2004 13:32
An: spr...@li...
Betreff: Re: [Springframework-developer] mixing =
PropertyPlaceholderConfigurer and PropertyOverrideConfigurer
Darren,
We could add an "ignoreInvalidKey" bean property to =
PropertyOverrideConfigurer, with default false. If turned on, any =
BeansException thrown by "processKey" would get caught and logged as =
warning. Is that what you have in mind?
Juergen
________________________________
Von: spr...@li... im Auftrag =
von Darren Davison
Gesendet: Mo 20.12.2004 13:14
An: spr...@li...
Betreff: [Springframework-developer] mixing =
PropertyPlaceholderConfigurer and PropertyOverrideConfigurer
I've got a context file that contains a bean with required constructor =
args
that I'd like to pull from a properties file which works fine with
PropertyPlaceholderConfigurer. However, I also have other bean =
properties
that specify sane defaults and which I'd like to be able to override =
with
definitions in PropertyOverrideConfigurer. Ideally I want to use the =
same
properties file for both.
This fails because the overrider throws an exception when trying to set
props used as constructor args (no bean named 'input' is defined); ie
beans.xml..
<bean id=3D"foo" class=3D"com.foo.Foo">
<constructor-arg =
index=3D"0"><value>${input.file}</value></constructor-arg>
<property name=3D"propOne"><value>myDefault</value></property>
</bean>
props..
input.file=3D/home/darren/some.file
foo.propOne=3Dsome-other-value
This would work if for instance overrider simply logged a message that =
no
bean was found rather than throwing an exception, but that could be
ambiguous if a bean named 'input' WAS defined.
Any way around this other than using a props-required and a =
props-optional
file which isn't very nice?
--
Darren Davison
Public Key: #DD356B0D
-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://productguide.itmanagersjournal.com/
_______________________________________________
Springframework-developer mailing list
Spr...@li...
https://lists.sourceforge.net/lists/listinfo/springframework-developer
|
|
From: Rob H. <ro...@ca...> - 2004-12-20 20:42:47
|
Eugene, I like the idea and I am more than willing to help. It would be great to provide a common framework for this kind of thing along with commons support for the AOP Alliance interfaces which will allow for the construction of really high performance AOP proxies. Rob Eugene Kuleshov wrote: > Folks, > > Sorry for the cross posting, but I'd like to make a formal proposal > for coordinated efford to generalize some of the common bytecode > transformations with ASM. > > It has been identified that Spring, AspectWerkz, CGLIB and DynAop > (indirectly trough CGLIB) projects have needs for "class proxy" > bytecode transformation. So, it seems makes sense to implement > something common and generic enoigh to be used across all projects. > > Thank you. > > Eugene > > > BRUNETON Eric RD-MAPS-GRE wrote: > > [skipped] > >> ... This could be an opportunity to start a new asm.adapters package >> containing commonly used adapters (the starting point could be a review >> of existing ASM adapters in CGLIB, AspectWerkz, ... to see if some >> abstract or even concrete transformers can be shared - after a >> generalization step, to make them customizable and reusable). This could >> be a common effort of the ASM community. >> >> Eric > > > > > ------------------------------------------------------- > SF email is sponsored by - The IT Product Guide > Read honest & candid reviews on hundreds of IT Products from real users. > Discover which products truly live up to the hype. Start reading now. > http://productguide.itmanagersjournal.com/ > _______________________________________________ > Springframework-developer mailing list > Spr...@li... > https://lists.sourceforge.net/lists/listinfo/springframework-developer > > |
|
From: Eugene K. <eu...@md...> - 2004-12-20 19:52:51
|
Folks, Sorry for the cross posting, but I'd like to make a formal proposal for coordinated efford to generalize some of the common bytecode transformations with ASM. It has been identified that Spring, AspectWerkz, CGLIB and DynAop (indirectly trough CGLIB) projects have needs for "class proxy" bytecode transformation. So, it seems makes sense to implement something common and generic enoigh to be used across all projects. Thank you. Eugene BRUNETON Eric RD-MAPS-GRE wrote: [skipped] > ... This could be an opportunity to start a new asm.adapters package > containing commonly used adapters (the starting point could be a review > of existing ASM adapters in CGLIB, AspectWerkz, ... to see if some > abstract or even concrete transformers can be shared - after a > generalization step, to make them customizable and reusable). This could > be a common effort of the ASM community. > > Eric |
|
From: Alexandre V. <ava...@gm...> - 2004-12-20 19:18:20
|
I am off course preashing for my own church, but an integration of - AWProxy (ok need to impl the interface based proxy and not only the current super delegation model) - AW AOPAlliance extension (runs AOP Alliance aspects in AW container, all statically compiled with all AW thingies for pointcuts expression / composition) - AW AOP Spring Aspect container (control aspect life cycle) would at address the need you describe. Perhaps a hammer though, but comes free with Advisable (per instance interceptor framework at very low cost), hot deployment of aspects (at no cost), rich pointcut grammar, annotation matching (with 1.4 annotation as well) etc. (again, my own church..) Alex On Mon, 20 Dec 2004 17:51:15 +0000, Rob Harrop <ro...@ca...> wrote: > Eugene, > > I started work on AWProxy integration this morning - just got caught up > in meetings for the rest of the day :(. AWProxy does indeed look for > useful and may be a good fit for our core AOP support. > > As for common patterns, we are looking for the ability to generate class > proxies that bypass calls (or fake them) to the parent class constructor > so that bean state is not overwritten after configuration. Chris is > already looking at this but I think he wishes he hadn't promised now ;). > Add to this the ability to generate specific bytecode for a chain of AOP > Alliance advice types and that covers exactly what we are looking for > from a proxy implementation in Spring. We also need to be able to > generate interface proxies that output bytecode based on the advice > types - currently we use JDK proxies which don't offer much in the way > of optimization opportunities. > > Rob > > Eugene Kuleshov wrote: > > > Rob, > > > > There is no code for this proposed ASM subproject. The idea was to > > analyse existing projects and identify common patterns for bytecode > > transformations. I can say right away that one of the most commonly > > used patterns is class proxy. It seems that AWProxy came very close to > > be generic enough and it is already ASM-based and perhaps Alex will > > not mind to generalize it to have no AW specifics. > > > > We would appreciate any input in this area. > > > > regards, > > Eugene > > > > > >> We are fine with direct bytecode manipulation, we just want to avoid > >> it if we can. Spring AOP ism't meant to have absolute raw > >> performance. Instead it is meant to over competitive performance in > >> any easy to use and understand package. With CGLIB, the biggest > >> problem is that we cant create specific bytecode for each advice type > >> using CGLIB as is. With Janino we can build specific Java code for > >> each each advice type in a proxy and then compile this all to > >> bytecode. The compilation will be a one off cost for class/advice > >> chain combinations. > >> > >> We should be providing AWProxy support as well since it covers most > >> of our needs, but Janino is a possibility for the proxy platform for > >> the future features to be added to Spring AOP. > >> > >> The ASM sub-library you are talking about sounds nice and I will > >> certainly consider using it - can you send more details? > >> > >> Rob > >> > >> Eugene Kuleshov wrote: > >> > >>> Rob, > >>> > >>> I'm not sure where you actually expecting to gain performance by > >>> using Janino. i believe that manually crafted bytecode will provide > >>> much better control. However if you are not confortable with direct > >>> bytecode manipulation you can use one of the existing high-level > >>> class proxy generators: > >>> > >>> -- CGLIB (with an appropriate fixes and extensions that CGLIB team > >>> should take care of), > >>> -- JBoss's Javaassist (closest to Janino in terms of providing > >>> Java-like granularity) > >>> -- AWProxy (it is directly using ASM and provide enough features > >>> for common AOP needs) > >>> -- Eric Bruneton of ASM recently proposed a new ASM subproject for > >>> most commonly used bytecode transformation (so, perhaps it could > >>> generalize CGLIB and/or AWProxy code) This will be the most > >>> lightweight but also most low level option. > >>> > >>> I believe that at least one of the above options should give > >>> enough comfort to Spring dev team, to it will not be necessary to > >>> invent a bycicle and introduce new runtime dependencies. > >>> > >>> Also, just for the record, class proxy will always cause security > >>> issues because they can't be instantiated without nested > >>> classloading or tricks with injecting classes into current > >>> classloaders (like CGLIB is doing), so you have to deal with it > >>> using Java security policy. > >>> > >>> regards, > >>> Eugene > >>> > >>> > >>>> Oliver, > >>>> > >>>> I think you are right on this point - Janino should in theory be > >>>> much faster since we can produce specific code for each advice type > >>>> as required, and we can do so easily. Coupled with some clever > >>>> caching we can do a lot with the Janino approach, make it very > >>>> performant, and we have full control over it. I am hoping to add > >>>> this support in time for 1.2 but I will be fixing current bugs with > >>>> the CGLIB implementation provided I can get the appropriate patches > >>>> added to CGLIB as required. > >>>> > >>>> Rob > >>>> > >>>> Oliver Hutchison wrote: > >>>> > >>>>> Using Janino is a great idea. > >>>>> > >>>>> A few months back I was playing around with implementing "abstract > >>>>> schema" for the Spring AOP subsystem and I did some simple > >>>>> benchmarking > >>>>> of Janino, CGLIB and JDK proxies and found that Janino was > >>>>> surprisingly > >>>>> efficient given the extra processing it needs to do. > >>>>> > >>>>> I generated the proxies using raw java code rather with than a > >>>>> template > >>>>> system as I didn't want to have any additional dependencies but what > >>>>> would be really nice is if you could generate the AST directly and I > >>>>> believe this may be on the way. > >>>>> > >>>>> Janino also includes line number (but not local variable) info in the > >>>>> generated classes. So if you save the code to disk you can step > >>>>> through > >>>>> the proxy implementation! > >>>>> Oliver > >>>>> > >>>>> > >>>>> > >>>>> > >>>>>> -----Original Message----- > >>>>>> From: spr...@li... > >>>>>> [mailto:spr...@li...] > >>>>>> On Behalf Of Rob Harrop > >>>>>> Sent: Friday, 17 December 2004 11:43 PM > >>>>>> To: spr...@li... > >>>>>> Subject: [Springframework-developer] Extending Spring AOP > >>>>>> > >>>>>> > >>>>>> All, > >>>>>> > >>>>>> I am planning to add to an additional proxy implementation to > >>>>>> Spring to solve some of the problems we are experiencing with > >>>>>> other approaches and to allow for additional optimizations and > >>>>>> advice types to be added in the most efficient way. > >>>>>> > >>>>>> Currently, I'm looking at two separate approaches - Java-based > >>>>>> using Janino and Bytecode-based using SERP. The Java-based > >>>>>> approach should be quite simple to create and could be coupled > >>>>>> with Velocity to externalize much of the boilerplate code needed > >>>>>> for the creation of proxy classes. Alternatively we could add a > >>>>>> simple abstraction layer on top of Janino, a la .NET CodeDOM > >>>>>> (good idea James). The bytecode approach is much more complex and > >>>>>> will be harder to debug but it would probably allow for absolute > >>>>>> raw performance. > >>>>>> > >>>>>> I am comfortable with either approach although I think that > >>>>>> Janino would be ideal for our purposes. > >>>>>> > >>>>>> Your thoughts? > >>>>>> > >>>>>> Rob > >>>>>> > >>>>>> > > > > > > > > ------------------------------------------------------- > > SF email is sponsored by - The IT Product Guide > > Read honest & candid reviews on hundreds of IT Products from real users. > > Discover which products truly live up to the hype. Start reading now. > > http://productguide.itmanagersjournal.com/ > > _______________________________________________ > > Springframework-developer mailing list > > Spr...@li... > > https://lists.sourceforge.net/lists/listinfo/springframework-developer > > > > > |
|
From: Rob H. <ro...@ca...> - 2004-12-20 17:49:23
|
Eugene, I started work on AWProxy integration this morning - just got caught up in meetings for the rest of the day :(. AWProxy does indeed look for useful and may be a good fit for our core AOP support. As for common patterns, we are looking for the ability to generate class proxies that bypass calls (or fake them) to the parent class constructor so that bean state is not overwritten after configuration. Chris is already looking at this but I think he wishes he hadn't promised now ;). Add to this the ability to generate specific bytecode for a chain of AOP Alliance advice types and that covers exactly what we are looking for from a proxy implementation in Spring. We also need to be able to generate interface proxies that output bytecode based on the advice types - currently we use JDK proxies which don't offer much in the way of optimization opportunities. Rob Eugene Kuleshov wrote: > Rob, > > There is no code for this proposed ASM subproject. The idea was to > analyse existing projects and identify common patterns for bytecode > transformations. I can say right away that one of the most commonly > used patterns is class proxy. It seems that AWProxy came very close to > be generic enough and it is already ASM-based and perhaps Alex will > not mind to generalize it to have no AW specifics. > > We would appreciate any input in this area. > > regards, > Eugene > > >> We are fine with direct bytecode manipulation, we just want to avoid >> it if we can. Spring AOP ism't meant to have absolute raw >> performance. Instead it is meant to over competitive performance in >> any easy to use and understand package. With CGLIB, the biggest >> problem is that we cant create specific bytecode for each advice type >> using CGLIB as is. With Janino we can build specific Java code for >> each each advice type in a proxy and then compile this all to >> bytecode. The compilation will be a one off cost for class/advice >> chain combinations. >> >> We should be providing AWProxy support as well since it covers most >> of our needs, but Janino is a possibility for the proxy platform for >> the future features to be added to Spring AOP. >> >> The ASM sub-library you are talking about sounds nice and I will >> certainly consider using it - can you send more details? >> >> Rob >> >> Eugene Kuleshov wrote: >> >>> Rob, >>> >>> I'm not sure where you actually expecting to gain performance by >>> using Janino. i believe that manually crafted bytecode will provide >>> much better control. However if you are not confortable with direct >>> bytecode manipulation you can use one of the existing high-level >>> class proxy generators: >>> >>> -- CGLIB (with an appropriate fixes and extensions that CGLIB team >>> should take care of), >>> -- JBoss's Javaassist (closest to Janino in terms of providing >>> Java-like granularity) >>> -- AWProxy (it is directly using ASM and provide enough features >>> for common AOP needs) >>> -- Eric Bruneton of ASM recently proposed a new ASM subproject for >>> most commonly used bytecode transformation (so, perhaps it could >>> generalize CGLIB and/or AWProxy code) This will be the most >>> lightweight but also most low level option. >>> >>> I believe that at least one of the above options should give >>> enough comfort to Spring dev team, to it will not be necessary to >>> invent a bycicle and introduce new runtime dependencies. >>> >>> Also, just for the record, class proxy will always cause security >>> issues because they can't be instantiated without nested >>> classloading or tricks with injecting classes into current >>> classloaders (like CGLIB is doing), so you have to deal with it >>> using Java security policy. >>> >>> regards, >>> Eugene >>> >>> >>>> Oliver, >>>> >>>> I think you are right on this point - Janino should in theory be >>>> much faster since we can produce specific code for each advice type >>>> as required, and we can do so easily. Coupled with some clever >>>> caching we can do a lot with the Janino approach, make it very >>>> performant, and we have full control over it. I am hoping to add >>>> this support in time for 1.2 but I will be fixing current bugs with >>>> the CGLIB implementation provided I can get the appropriate patches >>>> added to CGLIB as required. >>>> >>>> Rob >>>> >>>> Oliver Hutchison wrote: >>>> >>>>> Using Janino is a great idea. >>>>> >>>>> A few months back I was playing around with implementing "abstract >>>>> schema" for the Spring AOP subsystem and I did some simple >>>>> benchmarking >>>>> of Janino, CGLIB and JDK proxies and found that Janino was >>>>> surprisingly >>>>> efficient given the extra processing it needs to do. >>>>> >>>>> I generated the proxies using raw java code rather with than a >>>>> template >>>>> system as I didn't want to have any additional dependencies but what >>>>> would be really nice is if you could generate the AST directly and I >>>>> believe this may be on the way. >>>>> >>>>> Janino also includes line number (but not local variable) info in the >>>>> generated classes. So if you save the code to disk you can step >>>>> through >>>>> the proxy implementation! >>>>> Oliver >>>>> >>>>> >>>>> >>>>> >>>>>> -----Original Message----- >>>>>> From: spr...@li... >>>>>> [mailto:spr...@li...] >>>>>> On Behalf Of Rob Harrop >>>>>> Sent: Friday, 17 December 2004 11:43 PM >>>>>> To: spr...@li... >>>>>> Subject: [Springframework-developer] Extending Spring AOP >>>>>> >>>>>> >>>>>> All, >>>>>> >>>>>> I am planning to add to an additional proxy implementation to >>>>>> Spring to solve some of the problems we are experiencing with >>>>>> other approaches and to allow for additional optimizations and >>>>>> advice types to be added in the most efficient way. >>>>>> >>>>>> Currently, I'm looking at two separate approaches - Java-based >>>>>> using Janino and Bytecode-based using SERP. The Java-based >>>>>> approach should be quite simple to create and could be coupled >>>>>> with Velocity to externalize much of the boilerplate code needed >>>>>> for the creation of proxy classes. Alternatively we could add a >>>>>> simple abstraction layer on top of Janino, a la .NET CodeDOM >>>>>> (good idea James). The bytecode approach is much more complex and >>>>>> will be harder to debug but it would probably allow for absolute >>>>>> raw performance. >>>>>> >>>>>> I am comfortable with either approach although I think that >>>>>> Janino would be ideal for our purposes. >>>>>> >>>>>> Your thoughts? >>>>>> >>>>>> Rob >>>>>> >>>>>> > > > > ------------------------------------------------------- > SF email is sponsored by - The IT Product Guide > Read honest & candid reviews on hundreds of IT Products from real users. > Discover which products truly live up to the hype. Start reading now. > http://productguide.itmanagersjournal.com/ > _______________________________________________ > Springframework-developer mailing list > Spr...@li... > https://lists.sourceforge.net/lists/listinfo/springframework-developer > > |
|
From: Alexandre V. <ava...@gm...> - 2004-12-20 15:50:24
|
Hi guys AWProxy code is indeed nothing since the proxy we generate is only is a subclass of the target class that delegates all methods / constructors to its super.xxx(..) (hence regular proxy limitation as regards final method etc). AWProxy as is is useless (see ProxyCompiler source code f.e.) The value comes from the fact that the proxy compiler then pass it on to the weaver (under the hood, no special VM configuration), and the weaver does inject the AOP bytecode. We don't have yet interface based / implementation delegation proxy but that should be pretty much as easy. AWProxy is powerfull in the way that our AOP engine is blessing the proxy and handles it as the target class when it does the matching. In a regular AOP world (f.e AJ / JBoss), ones would have to adapt each pointcut to match on the proxy name (wich is quite hard to guess) or to match on "hierarchical pointcuts", or other way - ie to care about the proxy based architecture, which is the opposite of what we wanted. As regards reusable ASM stuff, we have a bunch of utility methods in a class named AsmHelper, and some reusable visitor (cglib has some others) to take care of tricky things (f.e. detect the instruction that is for the actual this() or super() in a constructor body etc). Alex On Mon, 20 Dec 2004 10:37:38 -0500, Eugene Kuleshov <eu...@md...> wrote: > Rob, > > There is no code for this proposed ASM subproject. The idea was to > analyse existing projects and identify common patterns for bytecode > transformations. I can say right away that one of the most commonly used > patterns is class proxy. It seems that AWProxy came very close to be > generic enough and it is already ASM-based and perhaps Alex will not > mind to generalize it to have no AW specifics. > > We would appreciate any input in this area. > > regards, > Eugene > > > We are fine with direct bytecode manipulation, we just want to avoid it > > if we can. Spring AOP ism't meant to have absolute raw performance. > > Instead it is meant to over competitive performance in any easy to use > > and understand package. With CGLIB, the biggest problem is that we cant > > create specific bytecode for each advice type using CGLIB as is. With > > Janino we can build specific Java code for each each advice type in a > > proxy and then compile this all to bytecode. The compilation will be a > > one off cost for class/advice chain combinations. > > > > We should be providing AWProxy support as well since it covers most of > > our needs, but Janino is a possibility for the proxy platform for the > > future features to be added to Spring AOP. > > > > The ASM sub-library you are talking about sounds nice and I will > > certainly consider using it - can you send more details? > > > > Rob > > > > Eugene Kuleshov wrote: > > > >> Rob, > >> > >> I'm not sure where you actually expecting to gain performance by > >> using Janino. i believe that manually crafted bytecode will provide > >> much better control. However if you are not confortable with direct > >> bytecode manipulation you can use one of the existing high-level class > >> proxy generators: > >> > >> -- CGLIB (with an appropriate fixes and extensions that CGLIB team > >> should take care of), > >> -- JBoss's Javaassist (closest to Janino in terms of providing > >> Java-like granularity) > >> -- AWProxy (it is directly using ASM and provide enough features for > >> common AOP needs) > >> -- Eric Bruneton of ASM recently proposed a new ASM subproject for > >> most commonly used bytecode transformation (so, perhaps it could > >> generalize CGLIB and/or AWProxy code) This will be the most > >> lightweight but also most low level option. > >> > >> I believe that at least one of the above options should give enough > >> comfort to Spring dev team, to it will not be necessary to invent a > >> bycicle and introduce new runtime dependencies. > >> > >> Also, just for the record, class proxy will always cause security > >> issues because they can't be instantiated without nested classloading > >> or tricks with injecting classes into current classloaders (like CGLIB > >> is doing), so you have to deal with it using Java security policy. > >> > >> regards, > >> Eugene > >> > >> > >>> Oliver, > >>> > >>> I think you are right on this point - Janino should in theory be much > >>> faster since we can produce specific code for each advice type as > >>> required, and we can do so easily. Coupled with some clever caching > >>> we can do a lot with the Janino approach, make it very performant, > >>> and we have full control over it. I am hoping to add this support in > >>> time for 1.2 but I will be fixing current bugs with the CGLIB > >>> implementation provided I can get the appropriate patches added to > >>> CGLIB as required. > >>> > >>> Rob > >>> > >>> Oliver Hutchison wrote: > >>> > >>>> Using Janino is a great idea. > >>>> > >>>> A few months back I was playing around with implementing "abstract > >>>> schema" for the Spring AOP subsystem and I did some simple > >>>> benchmarking > >>>> of Janino, CGLIB and JDK proxies and found that Janino was surprisingly > >>>> efficient given the extra processing it needs to do. > >>>> > >>>> I generated the proxies using raw java code rather with than a template > >>>> system as I didn't want to have any additional dependencies but what > >>>> would be really nice is if you could generate the AST directly and I > >>>> believe this may be on the way. > >>>> > >>>> Janino also includes line number (but not local variable) info in the > >>>> generated classes. So if you save the code to disk you can step through > >>>> the proxy implementation! > >>>> Oliver > >>>> > >>>> > >>>> > >>>> > >>>>> -----Original Message----- > >>>>> From: spr...@li... > >>>>> [mailto:spr...@li...] > >>>>> On Behalf Of Rob Harrop > >>>>> Sent: Friday, 17 December 2004 11:43 PM > >>>>> To: spr...@li... > >>>>> Subject: [Springframework-developer] Extending Spring AOP > >>>>> > >>>>> > >>>>> All, > >>>>> > >>>>> I am planning to add to an additional proxy implementation to > >>>>> Spring to solve some of the problems we are experiencing with other > >>>>> approaches and to allow for additional optimizations and advice > >>>>> types to be added in the most efficient way. > >>>>> > >>>>> Currently, I'm looking at two separate approaches - Java-based > >>>>> using Janino and Bytecode-based using SERP. The Java-based approach > >>>>> should be quite simple to create and could be coupled with Velocity > >>>>> to externalize much of the boilerplate code needed for the creation > >>>>> of proxy classes. Alternatively we could add a simple abstraction > >>>>> layer on top of Janino, a la .NET CodeDOM (good idea James). The > >>>>> bytecode approach is much more complex and will be harder to debug > >>>>> but it would probably allow for absolute raw performance. > >>>>> > >>>>> I am comfortable with either approach although I think that Janino > >>>>> would be ideal for our purposes. > >>>>> > >>>>> Your thoughts? > >>>>> > >>>>> Rob > >>>>> > >>>>> > > |
|
From: Eugene K. <eu...@md...> - 2004-12-20 15:38:06
|
Rob, There is no code for this proposed ASM subproject. The idea was to analyse existing projects and identify common patterns for bytecode transformations. I can say right away that one of the most commonly used patterns is class proxy. It seems that AWProxy came very close to be generic enough and it is already ASM-based and perhaps Alex will not mind to generalize it to have no AW specifics. We would appreciate any input in this area. regards, Eugene > We are fine with direct bytecode manipulation, we just want to avoid it > if we can. Spring AOP ism't meant to have absolute raw performance. > Instead it is meant to over competitive performance in any easy to use > and understand package. With CGLIB, the biggest problem is that we cant > create specific bytecode for each advice type using CGLIB as is. With > Janino we can build specific Java code for each each advice type in a > proxy and then compile this all to bytecode. The compilation will be a > one off cost for class/advice chain combinations. > > We should be providing AWProxy support as well since it covers most of > our needs, but Janino is a possibility for the proxy platform for the > future features to be added to Spring AOP. > > The ASM sub-library you are talking about sounds nice and I will > certainly consider using it - can you send more details? > > Rob > > Eugene Kuleshov wrote: > >> Rob, >> >> I'm not sure where you actually expecting to gain performance by >> using Janino. i believe that manually crafted bytecode will provide >> much better control. However if you are not confortable with direct >> bytecode manipulation you can use one of the existing high-level class >> proxy generators: >> >> -- CGLIB (with an appropriate fixes and extensions that CGLIB team >> should take care of), >> -- JBoss's Javaassist (closest to Janino in terms of providing >> Java-like granularity) >> -- AWProxy (it is directly using ASM and provide enough features for >> common AOP needs) >> -- Eric Bruneton of ASM recently proposed a new ASM subproject for >> most commonly used bytecode transformation (so, perhaps it could >> generalize CGLIB and/or AWProxy code) This will be the most >> lightweight but also most low level option. >> >> I believe that at least one of the above options should give enough >> comfort to Spring dev team, to it will not be necessary to invent a >> bycicle and introduce new runtime dependencies. >> >> Also, just for the record, class proxy will always cause security >> issues because they can't be instantiated without nested classloading >> or tricks with injecting classes into current classloaders (like CGLIB >> is doing), so you have to deal with it using Java security policy. >> >> regards, >> Eugene >> >> >>> Oliver, >>> >>> I think you are right on this point - Janino should in theory be much >>> faster since we can produce specific code for each advice type as >>> required, and we can do so easily. Coupled with some clever caching >>> we can do a lot with the Janino approach, make it very performant, >>> and we have full control over it. I am hoping to add this support in >>> time for 1.2 but I will be fixing current bugs with the CGLIB >>> implementation provided I can get the appropriate patches added to >>> CGLIB as required. >>> >>> Rob >>> >>> Oliver Hutchison wrote: >>> >>>> Using Janino is a great idea. >>>> >>>> A few months back I was playing around with implementing "abstract >>>> schema" for the Spring AOP subsystem and I did some simple >>>> benchmarking >>>> of Janino, CGLIB and JDK proxies and found that Janino was surprisingly >>>> efficient given the extra processing it needs to do. >>>> >>>> I generated the proxies using raw java code rather with than a template >>>> system as I didn't want to have any additional dependencies but what >>>> would be really nice is if you could generate the AST directly and I >>>> believe this may be on the way. >>>> >>>> Janino also includes line number (but not local variable) info in the >>>> generated classes. So if you save the code to disk you can step through >>>> the proxy implementation! >>>> Oliver >>>> >>>> >>>> >>>> >>>>> -----Original Message----- >>>>> From: spr...@li... >>>>> [mailto:spr...@li...] >>>>> On Behalf Of Rob Harrop >>>>> Sent: Friday, 17 December 2004 11:43 PM >>>>> To: spr...@li... >>>>> Subject: [Springframework-developer] Extending Spring AOP >>>>> >>>>> >>>>> All, >>>>> >>>>> I am planning to add to an additional proxy implementation to >>>>> Spring to solve some of the problems we are experiencing with other >>>>> approaches and to allow for additional optimizations and advice >>>>> types to be added in the most efficient way. >>>>> >>>>> Currently, I'm looking at two separate approaches - Java-based >>>>> using Janino and Bytecode-based using SERP. The Java-based approach >>>>> should be quite simple to create and could be coupled with Velocity >>>>> to externalize much of the boilerplate code needed for the creation >>>>> of proxy classes. Alternatively we could add a simple abstraction >>>>> layer on top of Janino, a la .NET CodeDOM (good idea James). The >>>>> bytecode approach is much more complex and will be harder to debug >>>>> but it would probably allow for absolute raw performance. >>>>> >>>>> I am comfortable with either approach although I think that Janino >>>>> would be ideal for our purposes. >>>>> >>>>> Your thoughts? >>>>> >>>>> Rob >>>>> >>>>> |
|
From: Darren D. <da...@da...> - 2004-12-20 12:45:43
|
On Monday 20 December 2004 12:32, j=FCrgen h=F6ller [werk3AT] wrote: > Darren, > > We could add an "ignoreInvalidKey" bean property to > PropertyOverrideConfigurer, with default false. If turned on, any > BeansException thrown by "processKey" would get caught and logged as > warning. Is that what you have in mind? I think so, yes. The alternative, to make PropertyOverrideConfigurer set=20 constructor args somehow, is non-intuitive in the properties file... foo.constructor-arg[0]=3DmyValue maybe doesn't look so good. =20 =2D-=20 Darren Davison Public Key: #DD356B0D |
|
From: <jue...@we...> - 2004-12-20 12:30:35
|
Darren,
=20
We could add an "ignoreInvalidKey" bean property to =
PropertyOverrideConfigurer, with default false. If turned on, any =
BeansException thrown by "processKey" would get caught and logged as =
warning. Is that what you have in mind?
=20
Juergen
=20
________________________________
Von: spr...@li... im Auftrag =
von Darren Davison
Gesendet: Mo 20.12.2004 13:14
An: spr...@li...
Betreff: [Springframework-developer] mixing =
PropertyPlaceholderConfigurer and PropertyOverrideConfigurer
I've got a context file that contains a bean with required constructor =
args
that I'd like to pull from a properties file which works fine with
PropertyPlaceholderConfigurer. However, I also have other bean =
properties
that specify sane defaults and which I'd like to be able to override =
with
definitions in PropertyOverrideConfigurer. Ideally I want to use the =
same
properties file for both.
This fails because the overrider throws an exception when trying to set
props used as constructor args (no bean named 'input' is defined); ie
beans.xml..
<bean id=3D"foo" class=3D"com.foo.Foo">
<constructor-arg =
index=3D"0"><value>${input.file}</value></constructor-arg>
<property name=3D"propOne"><value>myDefault</value></property>
</bean>
props..
input.file=3D/home/darren/some.file
foo.propOne=3Dsome-other-value
This would work if for instance overrider simply logged a message that =
no
bean was found rather than throwing an exception, but that could be
ambiguous if a bean named 'input' WAS defined.
Any way around this other than using a props-required and a =
props-optional
file which isn't very nice?
--
Darren Davison
Public Key: #DD356B0D
|
|
From: Rob H. <ro...@ca...> - 2004-12-20 12:24:10
|
All, I sent over a tuned configuration file to the AW guys a while ago to add to the AWBench project. You can see the new figures reflected on their Wiki at: http://docs.codehaus.org/display/AW/AOP+Benchmark. Check out an older version of the Wiki page to see the old figures. As you will notice there is a noticeable improvement in performance. You can download the benchmark suite from Codehaus CVS but for reference the two modifications I made to the ProxyFactoryBean configuration were: <property name="frozen"> <value>true</value> </property> <property name="optimize"> <value>true</value> </property> Note that this only works with Spring 1.1.3. I'll try to put together a quick post for TSS but I'm quite busy in the run up to Christmas and I go away on holiday in two days :) Rob |
|
From: Darren D. <da...@da...> - 2004-12-20 12:15:01
|
I've got a context file that contains a bean with required constructor args=
=20
that I'd like to pull from a properties file which works fine with=20
PropertyPlaceholderConfigurer. However, I also have other bean properties=
=20
that specify sane defaults and which I'd like to be able to override with=20
definitions in PropertyOverrideConfigurer. Ideally I want to use the same=
=20
properties file for both.
This fails because the overrider throws an exception when trying to set=20
props used as constructor args (no bean named 'input' is defined); ie
beans.xml..
<bean id=3D"foo" class=3D"com.foo.Foo">
<constructor-arg index=3D"0"><value>${input.file}</value></constructor-ar=
g>
<property name=3D"propOne"><value>myDefault</value></property>
</bean>
props..
input.file=3D/home/darren/some.file
foo.propOne=3Dsome-other-value
This would work if for instance overrider simply logged a message that no=20
bean was found rather than throwing an exception, but that could be=20
ambiguous if a bean named 'input' WAS defined.
Any way around this other than using a props-required and a props-optional=
=20
file which isn't very nice?
=2D-=20
Darren Davison
Public Key: #DD356B0D
|
|
From: Peng W. <wp...@gm...> - 2004-12-20 11:02:23
|
Rod, Thank you for your quick reply. Do you have any idea about the following questions? > > Pool is not a good idea! DataContext itself is lightweight, so creating > > one on the fly is not a problem. Its value (in addition to storing > > uncommitted state between requests) is that it caches only objects > > relevant to a given user session, so there is a high probability of > > cache reuse. A cached DataContext will simply hog extra memory and > > won't add much value over the shared cache provided by DataDomain. > > > > Now how you do it in Spring, I have no idea... There gotta be an easy > > way to access user session before you pass control to DAO. Spring > > couldn't possibly be that popular if all it does is serving stateless > > applications.. I just don't know what it is. Do you store any other > > state in the session? How do you access it from controller? Best Regards, Peng On Mon, 20 Dec 2004 10:39:07 +0000, Rod Johnson <ro...@in...> wrote: > Thanks. > > None of the core Spring developers is a Cayenne expert AFAIK, but we would certainly be happy to > help the Cayenne community achieve integration. > > Note that Oracle have now released a Spring/TopLink integration. > (http://www.oracle.com/technology/products/ias/toplink/preview/spring/index.html). This will be > supported by Oracle moving forward. > > The experience of the TopLink integration is that Spring's Hibernate and JDO integrations provide an > excellent architectural template which works well for other ORM products. Hopefully this should also > be useful to a Cayenne implementation. > > Rgds > Rod > > > Peng Wang wrote: > > I saw this message on cayenne list, so I move it here, hope someone can help. > > > > > > ---------- Forwarded message ---------- > > From: Andrus Adamchik <an...@ob...> > > Date: Sat, 18 Dec 2004 13:16:31 -0500 > > Subject: Re: Cayenne + Spring? > > To: cay...@ob... > > > > > > Hi James, > > > > > >>Are many people using Cayenne and Spring together? > > > > > > I know that many are waiting till the "official" integration, but if > > someone implemented their own Spring factories for Cayenne stack, > > please send us a note with your examples. Just yesterday I started > > doing the research of the steps needed for such integration, so I have > > the same question as James. > > > > > > > >>Each Service can reference multiple DAOs, and each Web Controller can > >>reference many Services. > >> > >>The DAOs, Services and Controllers will by default be singletons in > >>Spring, and I'd rather keep them that way. Therefore I can't > >>explicitly set a DataContext on them within Spring's application > >>context - they would be shared by all threads. > >> > >>Is there a good Spring-friendly way to bind a DataContext to each > >>thread as it enters my DAOs code? Or perhaps maintain a pool of > >>DataContext objects to be used by the DAOs? > > > > > > Pool is not a good idea! DataContext itself is lightweight, so creating > > one on the fly is not a problem. Its value (in addition to storing > > uncommitted state between requests) is that it caches only objects > > relevant to a given user session, so there is a high probability of > > cache reuse. A cached DataContext will simply hog extra memory and > > won't add much value over the shared cache provided by DataDomain. > > > > Now how you do it in Spring, I have no idea... There gotta be an easy > > way to access user session before you pass control to DAO. Spring > > couldn't possibly be that popular if all it does is serving stateless > > applications.. I just don't know what it is. Do you store any other > > state in the session? How do you access it from controller? > > > > > > Andrus > > > > > > ------------------------------------------------------- > > SF email is sponsored by - The IT Product Guide > > Read honest & candid reviews on hundreds of IT Products from real users. > > Discover which products truly live up to the hype. Start reading now. > > http://productguide.itmanagersjournal.com/ > > _______________________________________________ > > Springframework-developer mailing list > > Spr...@li... > > https://lists.sourceforge.net/lists/listinfo/springframework-developer > > > > -- > > ____________________________________________________ > Rod Johnson > CEO, Interface21 - Spring Services from the Source > http://www.springframework.com > > Founder, Spring Framework: > http://www.springframework.org > > Author, "Expert One-on-One J2EE Development Without EJB" > (May 2004, with Juergen Hoeller). > http://www.amazon.com/exec/obidos/ASIN/0764558315/ > > Author, "Expert One-on-One J2EE Design and Development" > (October 2002). > http://www.amazon.com/exec/obidos/tg/detail/-/0764543857/ > > ____________________________________________________ > Interface21 Limited > Registered Office Summit House, 2-2a Highfield Road, Dartford, Kent DA1 2JY > Registered in England and Wales No. 5187766 > ____________________________________________________ > > ------------------------------------------------------- > SF email is sponsored by - The IT Product Guide > Read honest & candid reviews on hundreds of IT Products from real users. > Discover which products truly live up to the hype. Start reading now. > http://productguide.itmanagersjournal.com/ > _______________________________________________ > Springframework-developer mailing list > Spr...@li... > https://lists.sourceforge.net/lists/listinfo/springframework-developer > |
|
From: Rod J. <ro...@in...> - 2004-12-20 10:39:45
|
Thanks. None of the core Spring developers is a Cayenne expert AFAIK, but we would certainly be happy to help the Cayenne community achieve integration. Note that Oracle have now released a Spring/TopLink integration. (http://www.oracle.com/technology/products/ias/toplink/preview/spring/index.html). This will be supported by Oracle moving forward. The experience of the TopLink integration is that Spring's Hibernate and JDO integrations provide an excellent architectural template which works well for other ORM products. Hopefully this should also be useful to a Cayenne implementation. Rgds Rod Peng Wang wrote: > I saw this message on cayenne list, so I move it here, hope someone can help. > > > ---------- Forwarded message ---------- > From: Andrus Adamchik <an...@ob...> > Date: Sat, 18 Dec 2004 13:16:31 -0500 > Subject: Re: Cayenne + Spring? > To: cay...@ob... > > > Hi James, > > >>Are many people using Cayenne and Spring together? > > > I know that many are waiting till the "official" integration, but if > someone implemented their own Spring factories for Cayenne stack, > please send us a note with your examples. Just yesterday I started > doing the research of the steps needed for such integration, so I have > the same question as James. > > > >>Each Service can reference multiple DAOs, and each Web Controller can >>reference many Services. >> >>The DAOs, Services and Controllers will by default be singletons in >>Spring, and I'd rather keep them that way. Therefore I can't >>explicitly set a DataContext on them within Spring's application >>context - they would be shared by all threads. >> >>Is there a good Spring-friendly way to bind a DataContext to each >>thread as it enters my DAOs code? Or perhaps maintain a pool of >>DataContext objects to be used by the DAOs? > > > Pool is not a good idea! DataContext itself is lightweight, so creating > one on the fly is not a problem. Its value (in addition to storing > uncommitted state between requests) is that it caches only objects > relevant to a given user session, so there is a high probability of > cache reuse. A cached DataContext will simply hog extra memory and > won't add much value over the shared cache provided by DataDomain. > > Now how you do it in Spring, I have no idea... There gotta be an easy > way to access user session before you pass control to DAO. Spring > couldn't possibly be that popular if all it does is serving stateless > applications.. I just don't know what it is. Do you store any other > state in the session? How do you access it from controller? > > > Andrus > > > ------------------------------------------------------- > SF email is sponsored by - The IT Product Guide > Read honest & candid reviews on hundreds of IT Products from real users. > Discover which products truly live up to the hype. Start reading now. > http://productguide.itmanagersjournal.com/ > _______________________________________________ > Springframework-developer mailing list > Spr...@li... > https://lists.sourceforge.net/lists/listinfo/springframework-developer > -- ____________________________________________________ Rod Johnson CEO, Interface21 - Spring Services from the Source http://www.springframework.com Founder, Spring Framework: http://www.springframework.org Author, "Expert One-on-One J2EE Development Without EJB" (May 2004, with Juergen Hoeller). http://www.amazon.com/exec/obidos/ASIN/0764558315/ Author, "Expert One-on-One J2EE Design and Development" (October 2002). http://www.amazon.com/exec/obidos/tg/detail/-/0764543857/ ____________________________________________________ Interface21 Limited Registered Office Summit House, 2-2a Highfield Road, Dartford, Kent DA1 2JY Registered in England and Wales No. 5187766 ____________________________________________________ |
|
From: Peng W. <wp...@gm...> - 2004-12-20 10:26:18
|
I saw this message on cayenne list, so I move it here, hope someone can help. ---------- Forwarded message ---------- From: Andrus Adamchik <an...@ob...> Date: Sat, 18 Dec 2004 13:16:31 -0500 Subject: Re: Cayenne + Spring? To: cay...@ob... Hi James, > Are many people using Cayenne and Spring together? I know that many are waiting till the "official" integration, but if someone implemented their own Spring factories for Cayenne stack, please send us a note with your examples. Just yesterday I started doing the research of the steps needed for such integration, so I have the same question as James. > Each Service can reference multiple DAOs, and each Web Controller can > reference many Services. > > The DAOs, Services and Controllers will by default be singletons in > Spring, and I'd rather keep them that way. Therefore I can't > explicitly set a DataContext on them within Spring's application > context - they would be shared by all threads. > > Is there a good Spring-friendly way to bind a DataContext to each > thread as it enters my DAOs code? Or perhaps maintain a pool of > DataContext objects to be used by the DAOs? Pool is not a good idea! DataContext itself is lightweight, so creating one on the fly is not a problem. Its value (in addition to storing uncommitted state between requests) is that it caches only objects relevant to a given user session, so there is a high probability of cache reuse. A cached DataContext will simply hog extra memory and won't add much value over the shared cache provided by DataDomain. Now how you do it in Spring, I have no idea... There gotta be an easy way to access user session before you pass control to DAO. Spring couldn't possibly be that popular if all it does is serving stateless applications.. I just don't know what it is. Do you store any other state in the session? How do you access it from controller? Andrus |
|
From: Rob H. <ro...@ca...> - 2004-12-20 09:43:45
|
Eugene, We are fine with direct bytecode manipulation, we just want to avoid it if we can. Spring AOP ism't meant to have absolute raw performance. Instead it is meant to over competitive performance in any easy to use and understand package. With CGLIB, the biggest problem is that we cant create specific bytecode for each advice type using CGLIB as is. With Janino we can build specific Java code for each each advice type in a proxy and then compile this all to bytecode. The compilation will be a one off cost for class/advice chain combinations. We should be providing AWProxy support as well since it covers most of our needs, but Janino is a possibility for the proxy platform for the future features to be added to Spring AOP. The ASM sub-library you are talking about sounds nice and I will certainly consider using it - can you send more details? Rob Eugene Kuleshov wrote: > Rob, > > I'm not sure where you actually expecting to gain performance by > using Janino. i believe that manually crafted bytecode will provide > much better control. However if you are not confortable with direct > bytecode manipulation you can use one of the existing high-level class > proxy generators: > > -- CGLIB (with an appropriate fixes and extensions that CGLIB team > should take care of), > -- JBoss's Javaassist (closest to Janino in terms of providing > Java-like granularity) > -- AWProxy (it is directly using ASM and provide enough features for > common AOP needs) > -- Eric Bruneton of ASM recently proposed a new ASM subproject for > most commonly used bytecode transformation (so, perhaps it could > generalize CGLIB and/or AWProxy code) This will be the most > lightweight but also most low level option. > > I believe that at least one of the above options should give enough > comfort to Spring dev team, to it will not be necessary to invent a > bycicle and introduce new runtime dependencies. > > Also, just for the record, class proxy will always cause security > issues because they can't be instantiated without nested classloading > or tricks with injecting classes into current classloaders (like CGLIB > is doing), so you have to deal with it using Java security policy. > > regards, > Eugene > > >> Oliver, >> >> I think you are right on this point - Janino should in theory be much >> faster since we can produce specific code for each advice type as >> required, and we can do so easily. Coupled with some clever caching >> we can do a lot with the Janino approach, make it very performant, >> and we have full control over it. I am hoping to add this support in >> time for 1.2 but I will be fixing current bugs with the CGLIB >> implementation provided I can get the appropriate patches added to >> CGLIB as required. >> >> Rob >> >> Oliver Hutchison wrote: >> >>> Using Janino is a great idea. >>> >>> A few months back I was playing around with implementing "abstract >>> schema" for the Spring AOP subsystem and I did some simple >>> benchmarking >>> of Janino, CGLIB and JDK proxies and found that Janino was surprisingly >>> efficient given the extra processing it needs to do. >>> >>> I generated the proxies using raw java code rather with than a template >>> system as I didn't want to have any additional dependencies but what >>> would be really nice is if you could generate the AST directly and I >>> believe this may be on the way. >>> >>> Janino also includes line number (but not local variable) info in the >>> generated classes. So if you save the code to disk you can step through >>> the proxy implementation! >>> Oliver >>> >>> >>> >>> >>>> -----Original Message----- >>>> From: spr...@li... >>>> [mailto:spr...@li...] >>>> On Behalf Of Rob Harrop >>>> Sent: Friday, 17 December 2004 11:43 PM >>>> To: spr...@li... >>>> Subject: [Springframework-developer] Extending Spring AOP >>>> >>>> >>>> All, >>>> >>>> I am planning to add to an additional proxy implementation to >>>> Spring to solve some of the problems we are experiencing with other >>>> approaches and to allow for additional optimizations and advice >>>> types to be added in the most efficient way. >>>> >>>> Currently, I'm looking at two separate approaches - Java-based >>>> using Janino and Bytecode-based using SERP. The Java-based approach >>>> should be quite simple to create and could be coupled with Velocity >>>> to externalize much of the boilerplate code needed for the creation >>>> of proxy classes. Alternatively we could add a simple abstraction >>>> layer on top of Janino, a la .NET CodeDOM (good idea James). The >>>> bytecode approach is much more complex and will be harder to debug >>>> but it would probably allow for absolute raw performance. >>>> >>>> I am comfortable with either approach although I think that Janino >>>> would be ideal for our purposes. >>>> >>>> Your thoughts? >>>> >>>> Rob >>>> >>>> > > > > ------------------------------------------------------- > SF email is sponsored by - The IT Product Guide > Read honest & candid reviews on hundreds of IT Products from real users. > Discover which products truly live up to the hype. Start reading now. > http://productguide.itmanagersjournal.com/ > _______________________________________________ > Springframework-developer mailing list > Spr...@li... > https://lists.sourceforge.net/lists/listinfo/springframework-developer > > |
|
From: Rob H. <ro...@ca...> - 2004-12-20 09:03:16
|
Bob, The biggest gripe with CGLIB support at the moment is that the ProxyCallbackFilter holds onto a lot of state which we don't want it to. However, we should be able to clear this out with some clever trickery - something I have planned for 1.1.4. The second major gripe is that methods called by the constructor are called during proxy construction and may reset bean state after the DI process occurs. I guess this is not a porblem you'll see with Dynaop but it is very annoying. Hopefully the CGLIB guys are going patch CGLIB to allow us to avoid this. Rob Bob Lee wrote: > On Dec 19, 2004, at 2:58 AM, Rod Johnson wrote: > >> Bob >> >> "Gutting our implementation" isn't quite accurate: proxy creation is >> behind an implementation, so it has purely localized effect. > > > Didn't mean to sound inflammatory. Simply meant "replacing the insides." > >> Our experience has been that CGLIB is getting harder and harder to >> maintain, for some of what we need to do with it. > > > Am I going to fall in the same trap? > >> Have to agree with RJ's point re dynamic proxies being preferable >> for various reasons, anyway. > > > The only reason I would prefer DPs is serialization. There are still > some problems with serializing circular class proxy references > transparently, though most people don't serialize proxies directly > anyway, and there is a workaround. > > Class proxies are better performance wise. For methods with no > interceptors, you can delegate directly to the target object or mixin > without creating an object array, boxing arguments, etc. > > I do wish cglib created it's own classloader rather than injecting > classes directly into the current one. AFAIK, they do this so proxies > can call package-private methods. I'd prefer they just created a new > class loader. This would alleviate any security concerns. > > Bob > >> Rgds >> Rod >> >> Bob Lee wrote: >> >>> Out of curiosity, what problems are you having with cglib that >>> could justify completely gutting your implementation? >>> You really can't optimize any more than cglib. The only reason >>> AspectWerkz is faster in those micro benchmarks literally amounts >>> to one object array creation. If it's that big of a deal, >>> statically analyze the bytecode of your interceptor class. If it >>> never uses the argument array, use a callback type that doesn't >>> create it. This would be insane, but it doesn't force the >>> performance optimization on the user. >>> Also, notice that all of the methods in the AWBench that take >>> arguments, take a single int, which requires boxing. Not something >>> that we should worry about. >>> In reality, real world stuff like invoking a mixin in Dynaop is as >>> fast as AW. >>> I'm just wondering because I'm personally liking cglib more and >>> more. I just submitted a couple patches to support Dynaop and found >>> their code pretty easy to maintain. Also, I've completely dumped >>> dynamic proxies in favor of cglib proxies. >>> Bob >>> On Dec 17, 2004, at 8:50 AM, Eugene Kuleshov wrote: >>> >>>> Folks, >>>> >>>> That is an interesting discussion... >>>> >>>> I've been looking to Janino for quite some time (actually it is >>>> used for some of the ASM's tests, especially to test for ASMifier >>>> tool). >>>> >>>> I can say that maintainer is quite busy and there still some >>>> bugs (at least one we hit from ASM test cases). >>>> >>>> However there is some activity going on about moving Janino to >>>> Codehaus and also it has been suggested to port Janino to use ASM >>>> as an internal bytecode toolkit underneath (right now it has its >>>> own proprietory bytecode manipulation framework). Also I know >>>> that Groovy and AW teams has been looking at Janino in order to >>>> use it for bytecode generation. The main reason is that Janino has >>>> extremly simplistic AST model, that allows to generate high level >>>> language constructs in memory without parsing strings (so, you can >>>> skip Velocity all together, which would be an important part in >>>> order to reduce dependencies for core AOP framework). >>>> >>>> regards, >>>> Eugene >>>> >>>> >>>>> Good point. What is the license (and maturity) of Janino? AWProxy >>>>> is also very new. >>>>> Colin Sampaleanu wrote: >>>>> >>>>>> One concern with AspectWerkz is the LGPL license. While >>>>>> Hibernate is also LGPL licensed, it is less a core part of >>>>>> Spring than the AOP stuff is. Now both Hibernate and AspectWerkz >>>>>> have a 'clarifying' statement about their interpretation of the >>>>>> LGPL: >>>>>> http://aspectwerkz.codehaus.org/license.html >>>>>> such that there is less ambiguity (in theory) about linkage to >>>>>> it, but I would be a bit reticent to have the main (non-proxy) >>>>>> AOP implementation in Spring be based on AspectWerkz because of >>>>>> concerns that Spring using organizations would have about LGPL. >>>>>> Whatever it's intentions, the LGPL is so badly worded that a >>>>>> number of companies will simply not use any libraries which are >>>>>> LGPL licensed... >>>>>> >>>>>> Colin >>>>> >>>> >>>> >>>> >>>> >>>> ------------------------------------------------------- >>>> SF email is sponsored by - The IT Product Guide >>>> Read honest & candid reviews on hundreds of IT Products from real >>>> users. >>>> Discover which products truly live up to the hype. Start reading >>>> now. http://productguide.itmanagersjournal.com/ >>>> _______________________________________________ >>>> Springframework-developer mailing list >>>> Spr...@li... >>>> https://lists.sourceforge.net/lists/listinfo/springframework- >>>> developer >>> >>> ------------------------------------------------------- >>> SF email is sponsored by - The IT Product Guide >>> Read honest & candid reviews on hundreds of IT Products from real >>> users. >>> Discover which products truly live up to the hype. Start reading >>> now. http://productguide.itmanagersjournal.com/ >>> _______________________________________________ >>> Springframework-developer mailing list >>> Spr...@li... >>> https://lists.sourceforge.net/lists/listinfo/springframework-developer >> >> >> -- >> >> ____________________________________________________ >> Rod Johnson >> CEO, Interface21 - Spring Services from the Source >> http://www.springframework.com >> >> Founder, Spring Framework: >> http://www.springframework.org >> >> Author, "Expert One-on-One J2EE Development Without EJB" >> (May 2004, with Juergen Hoeller). >> http://www.amazon.com/exec/obidos/ASIN/0764558315/ >> >> Author, "Expert One-on-One J2EE Design and Development" >> (October 2002). >> http://www.amazon.com/exec/obidos/tg/detail/-/0764543857/ >> >> >> ____________________________________________________ >> Interface21 Limited >> Registered Office Summit House, 2-2a Highfield Road, Dartford, Kent >> DA1 2JY >> Registered in England and Wales No. 5187766 >> ____________________________________________________ >> >> >> >> ------------------------------------------------------- >> SF email is sponsored by - The IT Product Guide >> Read honest & candid reviews on hundreds of IT Products from real >> users. >> Discover which products truly live up to the hype. Start reading >> now. http://productguide.itmanagersjournal.com/ >> _______________________________________________ >> Springframework-developer mailing list >> Spr...@li... >> https://lists.sourceforge.net/lists/listinfo/springframework-developer > > > > > ------------------------------------------------------- > SF email is sponsored by - The IT Product Guide > Read honest & candid reviews on hundreds of IT Products from real users. > Discover which products truly live up to the hype. Start reading now. > http://productguide.itmanagersjournal.com/ > _______________________________________________ > Springframework-developer mailing list > Spr...@li... > https://lists.sourceforge.net/lists/listinfo/springframework-developer > > |
|
From: Eugene K. <eu...@pl...> - 2004-12-20 03:13:17
|
Rob, I'm not sure where you actually expecting to gain performance by using Janino. i believe that manually crafted bytecode will provide much better control. However if you are not confortable with direct bytecode manipulation you can use one of the existing high-level class proxy generators: -- CGLIB (with an appropriate fixes and extensions that CGLIB team should take care of), -- JBoss's Javaassist (closest to Janino in terms of providing Java-like granularity) -- AWProxy (it is directly using ASM and provide enough features for common AOP needs) -- Eric Bruneton of ASM recently proposed a new ASM subproject for most commonly used bytecode transformation (so, perhaps it could generalize CGLIB and/or AWProxy code) This will be the most lightweight but also most low level option. I believe that at least one of the above options should give enough comfort to Spring dev team, to it will not be necessary to invent a bycicle and introduce new runtime dependencies. Also, just for the record, class proxy will always cause security issues because they can't be instantiated without nested classloading or tricks with injecting classes into current classloaders (like CGLIB is doing), so you have to deal with it using Java security policy. regards, Eugene > Oliver, > > I think you are right on this point - Janino should in theory be much > faster since we can produce specific code for each advice type as > required, and we can do so easily. Coupled with some clever caching we > can do a lot with the Janino approach, make it very performant, and we > have full control over it. I am hoping to add this support in time for > 1.2 but I will be fixing current bugs with the CGLIB implementation > provided I can get the appropriate patches added to CGLIB as required. > > Rob > > Oliver Hutchison wrote: > >> Using Janino is a great idea. >> >> A few months back I was playing around with implementing "abstract >> schema" for the Spring AOP subsystem and I did some simple benchmarking >> of Janino, CGLIB and JDK proxies and found that Janino was surprisingly >> efficient given the extra processing it needs to do. >> >> I generated the proxies using raw java code rather with than a template >> system as I didn't want to have any additional dependencies but what >> would be really nice is if you could generate the AST directly and I >> believe this may be on the way. >> >> Janino also includes line number (but not local variable) info in the >> generated classes. So if you save the code to disk you can step through >> the proxy implementation! >> Oliver >> >> >> >> >>> -----Original Message----- >>> From: spr...@li... >>> [mailto:spr...@li...] >>> On Behalf Of Rob Harrop >>> Sent: Friday, 17 December 2004 11:43 PM >>> To: spr...@li... >>> Subject: [Springframework-developer] Extending Spring AOP >>> >>> >>> All, >>> >>> I am planning to add to an additional proxy implementation to Spring >>> to solve some of the problems we are experiencing with other >>> approaches and to allow for additional optimizations and advice types >>> to be added in the most efficient way. >>> >>> Currently, I'm looking at two separate approaches - Java-based using >>> Janino and Bytecode-based using SERP. The Java-based approach should >>> be quite simple to create and could be coupled with Velocity to >>> externalize much of the boilerplate code needed for the creation of >>> proxy classes. Alternatively we could add a simple abstraction layer >>> on top of Janino, a la .NET CodeDOM (good idea James). The bytecode >>> approach is much more complex and will be harder to debug but it >>> would probably allow for absolute raw performance. >>> >>> I am comfortable with either approach although I think that Janino >>> would be ideal for our purposes. >>> >>> Your thoughts? >>> >>> Rob >>> >>> |
|
From: Rob H. <ro...@ca...> - 2004-12-19 23:47:22
|
Oliver, I think you are right on this point - Janino should in theory be much faster since we can produce specific code for each advice type as required, and we can do so easily. Coupled with some clever caching we can do a lot with the Janino approach, make it very performant, and we have full control over it. I am hoping to add this support in time for 1.2 but I will be fixing current bugs with the CGLIB implementation provided I can get the appropriate patches added to CGLIB as required. Rob Oliver Hutchison wrote: >Using Janino is a great idea. > >A few months back I was playing around with implementing "abstract >schema" for the Spring AOP subsystem and I did some simple benchmarking >of Janino, CGLIB and JDK proxies and found that Janino was surprisingly >efficient given the extra processing it needs to do. > >I generated the proxies using raw java code rather with than a template >system as I didn't want to have any additional dependencies but what >would be really nice is if you could generate the AST directly and I >believe this may be on the way. > >Janino also includes line number (but not local variable) info in the >generated classes. So if you save the code to disk you can step through >the proxy implementation! > >Oliver > > > > >>-----Original Message----- >>From: spr...@li... >>[mailto:spr...@li...] >> On Behalf Of Rob Harrop >>Sent: Friday, 17 December 2004 11:43 PM >>To: spr...@li... >>Subject: [Springframework-developer] Extending Spring AOP >> >> >>All, >> >>I am planning to add to an additional proxy implementation to >>Spring to >>solve some of the problems we are experiencing with other >>approaches and >>to allow for additional optimizations and advice types to be added in >>the most efficient way. >> >>Currently, I'm looking at two separate approaches - Java-based using >>Janino and Bytecode-based using SERP. The Java-based approach >>should be >>quite simple to create and could be coupled with Velocity to >>externalize >>much of the boilerplate code needed for the creation of proxy >>classes. >>Alternatively we could add a simple abstraction layer on top >>of Janino, >>a la .NET CodeDOM (good idea James). The bytecode approach is >>much more >>complex and will be harder to debug but it would probably allow for >>absolute raw performance. >> >>I am comfortable with either approach although I think that >>Janino would >>be ideal for our purposes. >> >>Your thoughts? >> >>Rob >> >> >>------------------------------------------------------- >>SF email is sponsored by - The IT Product Guide >>Read honest & candid reviews on hundreds of IT Products from >>real users. Discover which products truly live up to the >>hype. Start reading now. >>http://productguide.itmanagersjournal.com/ >>_______________________________________________ >>Springframework-developer mailing list >>Spr...@li... >>https://lists.sourceforge.net/lists/listinfo/springframework-developer >> >> >> > > >------------------------------------------------------- >SF email is sponsored by - The IT Product Guide >Read honest & candid reviews on hundreds of IT Products from real users. >Discover which products truly live up to the hype. Start reading now. >http://productguide.itmanagersjournal.com/ >_______________________________________________ >Springframework-developer mailing list >Spr...@li... >https://lists.sourceforge.net/lists/listinfo/springframework-developer > > > > |
|
From: <al...@jt...> - 2004-12-19 23:40:40
|
<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:#901090; }.unittests-failure { fon=
t-family:arial,helvetica,sans-serif; font-size:8pt; color:#FF0000; }.checks=
tyle-oddrow { background-color:#CCCCCC }.checkstyle-data { font-family:aria=
l,helvetica,sans-serif; font-size:8pt; color:#000000; }.checkstyle-sectionh=
eader { background-color:#000066; font-family:arial,helvetica,sans-serif; f=
ont-size:10pt; color:#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.174</td></tr><tr><td class=3D"header-data"><span class=
=3D"header-label">Date of build: </span>12/20/2004 00:17:01</td></tr><=
tr><td class=3D"header-data"><span class=3D"header-label">Time to build:&nb=
sp;</span>22 minutes 3 seconds</td></tr><tr><td class=3D"header-data"><span=
class=3D"header-label">Last changed: </span>12/19/2004 18:45:34</td><=
/tr><tr><td class=3D"header-data"><span class=3D"header-label">Last log ent=
ry: </span>renamed SPR391LookupMethodWrappedByCglibProxyTests to Looku=
pMethodWrappedByCglibProxyTests</td></tr></table><p>
<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-data">Note: S=
ome input files use or override a deprecated API.<br class=3D"none"/>Note: =
Recompile with -deprecation for details.<br class=3D"none"/>Note: /jteam/bu=
ild2/checkout/spring/spring/mock/org/springframework/mock/web/MockHttpSessi=
on.java uses or overrides a deprecated API.<br class=3D"none"/>Note: Recomp=
ile with -deprecation for details.<br class=3D"none"/>Note: Some input file=
s use or override a deprecated API.<br class=3D"none"/>Note: Recompile with=
-deprecation for details.<br class=3D"none"/></pre></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"><tr><td class=
=3D"compile-sectionheader"> Javadoc Errors/War=
nings: (26) </td></tr><tr><td><pre class=3D"compile-data=
">/jteam/build2/checkout/spring/spring/src/org/springframework/jdbc/support=
/lob/OracleLobHandler.java:76: warning - Tag @see: reference not found: ora=
cle.sql.BLOB<br/>/jteam/build2/checkout/spring/spring/src/org/springframewo=
rk/jdbc/support/lob/OracleLobHandler.java:76: warning - Tag @see: reference=
not found: oracle.sql.CLOB<br/>/jteam/build2/checkout/spring/spring/src/or=
g/springframework/jdbc/support/lob/OracleLobHandler.java:115: warning - Tag=
@see: reference not found: oracle.sql.BLOB#DURATION_SESSION<br/>/jteam/bui=
ld2/checkout/spring/spring/src/org/springframework/jdbc/support/lob/OracleL=
obHandler.java:115: warning - Tag @see: reference not found: oracle.sql.BLO=
B#MODE_READWRITE<br/>/jteam/build2/checkout/spring/spring/src/org/springfra=
mework/jdbc/support/lob/OracleLobHandler.java:115: warning - Tag @see: refe=
rence not found: oracle.sql.CLOB#DURATION_SESSION<br/>/jteam/build2/checkou=
t/spring/spring/src/org/springframework/jdbc/support/lob/OracleLobHandler.j=
ava:115: warning - Tag @see: reference not found: oracle.sql.CLOB#MODE_READ=
WRITE<br/>/jteam/build2/checkout/spring/spring/src/org/springframework/jdbc=
/support/lob/OracleLobHandler.java:154: warning - Tag @see: reference not f=
ound: oracle.jdbc.OracleConnection<br/>/jteam/build2/checkout/spring/spring=
/src/org/springframework/jdbc/support/lob/OracleLobHandler.java:164: warnin=
g - Tag @see: reference not found: oracle.sql.BLOB#createTemporary<br/>/jte=
am/build2/checkout/spring/spring/src/org/springframework/jdbc/support/lob/O=
racleLobHandler.java:164: warning - Tag @see: reference not found: oracle.s=
ql.CLOB#createTemporary<br/>/jteam/build2/checkout/spring/spring/src/org/sp=
ringframework/jdbc/support/nativejdbc/JBossNativeJdbcExtractor.java:49: war=
ning - Tag @see: reference not found: org.jboss.resource.adapter.jdbc.Wrapp=
edConnection#getUnderlyingConnection<br/>/jteam/build2/checkout/spring/spri=
ng/src/org/springframework/jdbc/support/nativejdbc/JBossNativeJdbcExtractor=
.java:49: warning - Tag @see: reference not found: org.jboss.resource.adapt=
er.jdbc.WrappedStatement#getUnderlyingStatement<br/>/jteam/build2/checkout/=
spring/spring/src/org/springframework/jdbc/support/nativejdbc/JBossNativeJd=
bcExtractor.java:49: warning - Tag @see: reference not found: org.jboss.res=
ource.adapter.jdbc.WrappedResultSet#getUnderlyingResultSet<br/>/jteam/build=
2/checkout/spring/spring/src/org/springframework/jdbc/support/nativejdbc/We=
bLogicNativeJdbcExtractor.java:45: warning - Tag @see: reference not found:=
weblogic.jdbc.extensions.WLConnection#getVendorConnection<br/>/jteam/build=
2/checkout/spring/spring/src/org/springframework/jdbc/support/nativejdbc/We=
bSphereNativeJdbcExtractor.java:34: warning - Tag @see: reference not found=
: com.ibm.ws.rsadapter.jdbc.WSJdbcConnection<br/>/jteam/build2/checkout/spr=
ing/spring/src/org/springframework/jdbc/support/nativejdbc/WebSphereNativeJ=
dbcExtractor.java:34: warning - Tag @see: reference not found: com.ibm.ws.r=
sadapter.jdbc.WSJdbcUtil#getNativeConnection<br/>/jteam/build2/checkout/spr=
ing/spring/src/org/springframework/jdbc/support/nativejdbc/WebSphereNativeJ=
dbcExtractor.java:34: warning - Tag @see: reference not found: com.ibm.ejs.=
cm.proxy.ConnectionProxy#getPhysicalConnection<br/>/jteam/build2/checkout/s=
pring/spring/src/org/springframework/orm/ibatis/SqlMapClientFactoryBean.jav=
a:170: warning - Tag @see: reference not found: com.ibatis.sqlmap.engine.tr=
ansaction.jdbc.JdbcTransactionConfig<br/>/jteam/build2/checkout/spring/spri=
ng/src/org/springframework/orm/ibatis/SqlMapClientFactoryBean.java:170: war=
ning - Tag @see: reference not found: com.ibatis.sqlmap.engine.transaction.=
jta.JtaTransactionConfig<br/>/jteam/build2/checkout/spring/spring/src/org/s=
pringframework/orm/ibatis/SqlMapClientFactoryBean.java:198: warning - Tag @=
see: reference not found: com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTra=
nsactionConfig<br/>/jteam/build2/checkout/spring/spring/src/org/springframe=
work/orm/ibatis/SqlMapClientFactoryBean.java:198: warning - Tag @see: refer=
ence not found: com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConf=
ig<br/>/jteam/build2/checkout/spring/spring/src/org/springframework/transac=
tion/jta/WebLogicJtaTransactionManager.java:67: warning - Tag @see: referen=
ce not found: weblogic.transaction.TransactionManager#forceResume<br/>/jtea=
m/build2/checkout/spring/spring/src/org/springframework/transaction/jta/Web=
LogicServerTransactionManagerFactoryBean.java:45: warning - Tag @see: refer=
ence not found: weblogic.transaction.TxHelper#getTransactionManager<br/>/jt=
eam/build2/checkout/spring/spring/src/org/springframework/transaction/jta/W=
ebSphereTransactionManagerFactoryBean.java:47: warning - Tag @see: referenc=
e not found: com.ibm.ws.Transaction.TransactionManagerFactory#getTransactio=
nManager<br/>/jteam/build2/checkout/spring/spring/src/org/springframework/t=
ransaction/jta/WebSphereTransactionManagerFactoryBean.java:47: warning - Ta=
g @see: reference not found: com.ibm.ejs.jts.jta.JTSXA#getTransactionManage=
r<br/>/jteam/build2/checkout/spring/spring/src/org/springframework/transact=
ion/jta/WebSphereTransactionManagerFactoryBean.java:47: warning - Tag @see:=
reference not found: com.ibm.ejs.jts.jta.TransactionManagerFactory#getTran=
sactionManager<br/>/jteam/build2/checkout/spring/spring/src/org/springframe=
work/web/servlet/handler/metadata/PathMap.java:31: warning - @@org.apache.c=
ommons.attributes.Indexed() is an unknown tag.<br/></pre></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"unittests-sectionheader"> =
Unit Tests: (2095) </td></tr><tr><td class=
=3D"unittests-data" colspan=3D"2"> All Tests Pas=
sed </td></tr><tr><td><table width=3D"98%" border=3D=
"0" cellspacing=3D"0" cellpadding=3D"2" align=3D"center"></table></td></tr>=
<tr></tr><tr><td colspan=3D"2"> </td></tr></table><p>
<table width=3D"98%" border=3D"0" cellspacing=3D"1" cellpadding=3D"2" align=
=3D"center"><tr><td colspan=3D"6" class=3D"modifications-sectionheader"> =
Modifications since last build: =
(14) </td></tr><tr class=3D"modifications-evenrow"><td =
class=3D"modifications-data">added</td><td class=3D"modifications-data">jho=
eller</td><td class=3D"modifications-data">test/org/springframework/beans/f=
actory/xml/LookupMethodWrappedByCglibProxyTests.java</td><td class=3D"modif=
ications-data">renamed SPR391LookupMethodWrappedByCglibProxyTests to Lookup=
MethodWrappedByCglibProxyTests</td></tr><tr class=3D"modifications-oddrow">=
<td class=3D"modifications-data">deleted</td><td class=3D"modifications-dat=
a">jhoeller</td><td class=3D"modifications-data">test/org/springframework/b=
eans/factory/xml/SPR391LookupMethodWrappedByCglibProxyTests.java</td><td cl=
ass=3D"modifications-data">renamed SPR391LookupMethodWrappedByCglibProxyTes=
ts to LookupMethodWrappedByCglibProxyTests</td></tr><tr class=3D"modificati=
ons-evenrow"><td class=3D"modifications-data">modified</td><td class=3D"mod=
ifications-data">jhoeller</td><td class=3D"modifications-data">test/org/spr=
ingframework/beans/factory/xml/overloadOverrides.xml</td><td class=3D"modif=
ications-data">renamed SPR391LookupMethodWrappedByCglibProxyTests to Lookup=
MethodWrappedByCglibProxyTests</td></tr><tr class=3D"modifications-oddrow">=
<td class=3D"modifications-data">added</td><td class=3D"modifications-data"=
>jhoeller</td><td class=3D"modifications-data">test/org/springframework/jdb=
c/core/JdbcTemplateQueryTests.java</td><td class=3D"modifications-data">fac=
tored out JdbcTemplateQueryTests from JdbcTemplateTests</td></tr><tr class=
=3D"modifications-evenrow"><td class=3D"modifications-data">modified</td><t=
d class=3D"modifications-data">jhoeller</td><td class=3D"modifications-data=
">test/org/springframework/jdbc/core/JdbcTemplateTests.java</td><td class=
=3D"modifications-data">factored out JdbcTemplateQueryTests from JdbcTempla=
teTests</td></tr><tr class=3D"modifications-oddrow"><td class=3D"modificati=
ons-data">modified</td><td class=3D"modifications-data">jhoeller</td><td cl=
ass=3D"modifications-data">src/org/springframework/jdbc/core/JdbcOperations=
.java</td><td class=3D"modifications-data">added overloaded "queryForList"/=
"queryForObject"/"queryForLong"/"queryForInt" methods with arg types</td></=
tr><tr class=3D"modifications-evenrow"><td class=3D"modifications-data">mod=
ified</td><td class=3D"modifications-data">jhoeller</td><td class=3D"modifi=
cations-data">src/org/springframework/jdbc/core/JdbcTemplate.java</td><td c=
lass=3D"modifications-data">added overloaded "queryForList"/"queryForObject=
"/"queryForLong"/"queryForInt" methods with arg types</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">te=
st/org/springframework/web/bind/RequestUtilsTests.java</td><td class=3D"mod=
ifications-data">changed "addParameter" methods to check for existing value=
s</td></tr><tr class=3D"modifications-evenrow"><td class=3D"modifications-d=
ata">modified</td><td class=3D"modifications-data">jhoeller</td><td class=
=3D"modifications-data">mock/org/springframework/mock/web/MockHttpServletRe=
quest.java</td><td class=3D"modifications-data">changed "addParameter" meth=
ods to check for existing values</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/springframewor=
k/web/servlet/mvc/WizardFormControllerTests.java</td><td class=3D"modificat=
ions-data">added overloaded "getFormSessionAttributeName" and "getPageSessi=
onAttributeName" methods</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/web/se=
rvlet/mvc/AbstractFormController.java</td><td class=3D"modifications-data">=
added overloaded "getFormSessionAttributeName" and "getPageSessionAttribute=
Name" methods</td></tr><tr class=3D"modifications-oddrow"><td class=3D"modi=
fications-data">modified</td><td class=3D"modifications-data">jhoeller</td>=
<td class=3D"modifications-data">src/org/springframework/web/servlet/mvc/Ab=
stractWizardFormController.java</td><td class=3D"modifications-data">added =
overloaded "getFormSessionAttributeName" and "getPageSessionAttributeName" =
methods</td></tr><tr class=3D"modifications-evenrow"><td class=3D"modificat=
ions-data">modified</td><td class=3D"modifications-data">kdonald</td><td cl=
ass=3D"modifications-data">sandbox/src/org/springframework/util/closure/sup=
port/AbstractConstraint.java</td><td class=3D"modifications-data">*** empty=
log message ***</td></tr><tr class=3D"modifications-oddrow"><td class=3D"m=
odifications-data">modified</td><td class=3D"modifications-data">kdonald</t=
d><td class=3D"modifications-data">sandbox/src/org/springframework/util/clo=
sure/support/AlgorithmsAccessor.java</td><td class=3D"modifications-data">*=
** empty log message ***</td></tr></table><p>
<table width=3D"98%" border=3D"0" cellspacing=3D"0" cellpadding=3D"2" align=
=3D"center"><tr><td class=3D"distributables-sectionheader"> =
Deployments by this build: (16) </td>=
</tr><tr><td class=3D"distributables-data">Building jar: /jteam/build2/chec=
kout/spring/spring/dist/spring-core.jar</td></tr><tr class=3D"distributable=
s-oddrow"><td class=3D"distributables-data">Building jar: /jteam/build2/che=
ckout/spring/spring/dist/spring-aop.jar</td></tr><tr><td class=3D"distribut=
ables-data">Building jar: /jteam/build2/checkout/spring/spring/dist/spring-=
context.jar</td></tr><tr class=3D"distributables-oddrow"><td class=3D"distr=
ibutables-data">Building jar: /jteam/build2/checkout/spring/spring/dist/spr=
ing-dao.jar</td></tr><tr><td class=3D"distributables-data">Building jar: /j=
team/build2/checkout/spring/spring/dist/spring-orm.jar</td></tr><tr class=
=3D"distributables-oddrow"><td class=3D"distributables-data">Building jar: =
/jteam/build2/checkout/spring/spring/dist/spring-web.jar</td></tr><tr><td c=
lass=3D"distributables-data">Building jar: /jteam/build2/checkout/spring/sp=
ring/dist/spring-webmvc.jar</td></tr><tr class=3D"distributables-oddrow"><t=
d class=3D"distributables-data">Building jar: /jteam/build2/checkout/spring=
/spring/dist/spring.jar</td></tr><tr><td class=3D"distributables-data">Buil=
ding jar: /jteam/build2/checkout/spring/spring/dist/spring-mock.jar</td></t=
r><tr class=3D"distributables-oddrow"><td class=3D"distributables-data">Bui=
lding war: /jteam/build2/checkout/spring/spring/autobuilds/apps/buildtest/d=
ist/buildtest.war</td></tr><tr><td class=3D"distributables-data">Building w=
ar: /jteam/build2/checkout/spring/spring/autobuilds/apps/buildtest/dist/bui=
ldtest.war</td></tr><tr class=3D"distributables-oddrow"><td class=3D"distri=
butables-data">Building war: /jteam/build2/checkout/spring/spring/autobuild=
s/apps/buildtest/dist/buildtest.war</td></tr><tr><td class=3D"distributable=
s-data">Building jar: /jteam/build2/checkout/spring/spring/autobuilds/apps/=
jpetstore/war/WEB-INF/lib/jpetstore.jar</td></tr><tr class=3D"distributable=
s-oddrow"><td class=3D"distributables-data">Building war: /jteam/build2/che=
ckout/spring/spring/autobuilds/apps/jpetstore/dist/jpetstore.war</td></tr><=
tr><td class=3D"distributables-data">Building jar: /jteam/build2/checkout/s=
pring/spring/autobuilds/apps/jpetstore/war/WEB-INF/lib/jpetstore.jar</td></=
tr><tr class=3D"distributables-oddrow"><td class=3D"distributables-data">Bu=
ilding war: /jteam/build2/checkout/spring/spring/autobuilds/apps/jpetstore/=
dist/jpetstore.war</td></tr></table>
</body></html> |
|
From: Oliver H. <Ol...@ou...> - 2004-12-19 22:54:48
|
Using Janino is a great idea. A few months back I was playing around with implementing "abstract schema" for the Spring AOP subsystem and I did some simple benchmarking of Janino, CGLIB and JDK proxies and found that Janino was surprisingly efficient given the extra processing it needs to do. I generated the proxies using raw java code rather with than a template system as I didn't want to have any additional dependencies but what would be really nice is if you could generate the AST directly and I believe this may be on the way. Janino also includes line number (but not local variable) info in the generated classes. So if you save the code to disk you can step through the proxy implementation!=20 Oliver > -----Original Message----- > From: spr...@li...=20 > [mailto:spr...@li...] > On Behalf Of Rob Harrop > Sent: Friday, 17 December 2004 11:43 PM > To: spr...@li... > Subject: [Springframework-developer] Extending Spring AOP >=20 >=20 > All, >=20 > I am planning to add to an additional proxy implementation to=20 > Spring to=20 > solve some of the problems we are experiencing with other=20 > approaches and=20 > to allow for additional optimizations and advice types to be added in=20 > the most efficient way. >=20 > Currently, I'm looking at two separate approaches - Java-based using=20 > Janino and Bytecode-based using SERP. The Java-based approach=20 > should be=20 > quite simple to create and could be coupled with Velocity to=20 > externalize=20 > much of the boilerplate code needed for the creation of proxy=20 > classes.=20 > Alternatively we could add a simple abstraction layer on top=20 > of Janino,=20 > a la .NET CodeDOM (good idea James). The bytecode approach is=20 > much more=20 > complex and will be harder to debug but it would probably allow for=20 > absolute raw performance. >=20 > I am comfortable with either approach although I think that=20 > Janino would=20 > be ideal for our purposes. >=20 > Your thoughts? >=20 > Rob >=20 >=20 > ------------------------------------------------------- > SF email is sponsored by - The IT Product Guide > Read honest & candid reviews on hundreds of IT Products from=20 > real users. Discover which products truly live up to the=20 > hype. Start reading now.=20 > http://productguide.itmanagersjournal.com/ > _______________________________________________ > Springframework-developer mailing list=20 > Spr...@li... > https://lists.sourceforge.net/lists/listinfo/springframework-developer >=20 |
|
From: <jue...@we...> - 2004-12-19 21:09:56
|
Luke, Maven users, Could someone please give the latest project.xml (as in CVS) a try, to = verify that the following issue is indeed fixed? http://opensource.atlassian.com/projects/spring/browse/SPR-562 Juergen =20 |