Re: [OT] paranoid

2008-03-04 Thread Tom Schneider
LOL  Oh, I didn't tell you, the JUEL plugin has some experimental 
psychic code in it.  Part of the Apache 'I know what you did last 
summer!' project. :)

Tom

Musachy Barroso wrote:

I was playing around with JUEL plugin last night, and while running
the example I saw the first input on the form had my name on it. I
spent 10 minutes trying to figure out how it knew it was me, until I
(gave up) looked at the code and saw my name was hardcoded there. Nice
work Tom :)

//is anybody else doing/planning to do anything on this plugin?

musachy

  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Thoughts on JSPs and OGNL

2008-01-27 Thread Tom Schneider

Brian,
I worked on Unfied EL a bit towards the end of last year: 
http://cwiki.apache.org/S2PLUGINS/unified-el-plugin.html  I was able to 
get it working for basic expressions, but it is nowhere near ready for 
production.  It would need a lot more coding/testing before it would 
even be considered beta status.  I also think there are some fundamental 
limits to what can be done with standard JSP unified el.  From my 
investigation, I'm not sure we could support all of the cool stuff we 
can do with OGNL.  Another possibility is that Jesse talked about adding 
a UEL compatability layer to OGNL.  I haven't followed up so I'm not 
sure if that went anywhere.

Tom

Brian Pontarelli wrote:

Just to preface this email, I've never been a big OGNL fan...

Okay, I'm updating everything to 2.1.1 and the new convention plugin 
and realized a major change from 2.0.9 to 2.1.1 is that the struts 
tags no longer accept JSP expressions, which has caused some major 
headaches. I could change the tld, but that's non-standard with 
Struts. My last email about compatibility didn't really get any 
responses and I think that it is really important overall. Upgrading 
between 2.0 and 2.1 is gonna be painful and it is something that 
should probably be documented.


Here's some thoughts after having done some upgrading and also worked 
with very green developers and loads of different clients over the 
last year:


- The fact that some attributes take OGNL directly, some via aliases 
like %{} and some not at all is REALLY confusing and cumbersome


- OGNL itself is strange since it has a tree structure and the # 
syntax is confusing for new developers


- I still haven't figured out a way to get at some JSP concepts such 
as include parameters (i.e. jsp:param values) and this requires 
hacks like:


 c:set name=foo value=${param['foo']}/
 s:hidden name=foo value=%{#attr.foo}/

 (yeah %{#parameters.foo} doesn't work for some reason. If someone 
knows the fix, let me know)


- Different syntax to get values from objects inside and outside tags 
in a JSP - on the page is JSP EL (required so you don't get nested XML 
and your code can be XML validated) and OGNL in the tags. This is not 
so pleasant


- Not well documented what is available from OGNL in the JSP

Thus far I haven't found any major benefit to OGNL in any of my 
applications. I'm certain others have, but I would guess these are 
minimal and could be handled by some ognl tag like ognl:eval/.


I know there are some folks trying to update to the UEL and this is 
somewhat of thinking out loud about moving this timeline up to 2.1.1 
or the immediate next release. It would seem that this will make 
things a lot more standard overall. Anything I can do to help, just 
let me know.


-bp

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Thoughts on JSPs and OGNL

2008-01-27 Thread Tom Schneider
Unfortunately, I haven't had much (any) time to work on s2 at all since 
December.  Feel free to poke around and see how far you can get.

Tom

Brian Pontarelli wrote:

Tom Schneider wrote:

Brian,
I worked on Unfied EL a bit towards the end of last year: 
http://cwiki.apache.org/S2PLUGINS/unified-el-plugin.html  I was able 
to get it working for basic expressions, but it is nowhere near ready 
for production.  It would need a lot more coding/testing before it 
would even be considered beta status.  I also think there are some 
fundamental limits to what can be done with standard JSP unified el.  
From my investigation, I'm not sure we could support all of the cool 
stuff we can do with OGNL.  Another possibility is that Jesse talked 
about adding a UEL compatability layer to OGNL.  I haven't followed 
up so I'm not sure if that went anywhere.
My feeling is that the cool stuff with OGNL is probably better 
suited for an action or somewhere else and even if it needed to be in 
the page it could be handled via an OGNL tag. It would be nice to use 
the same syntax anywhere on the JSP including in and out of tags. I 
would even think that we could cover the majority of the cases using 
UEL ${} syntax rather than the #{} syntax.


Here's another example. I was using the s:action tags quite a bit for 
invoking setup actions and for creating select boxes and such. From 
2.0.9 to 2.1.1 this broke. I used to be able to set into the s:param 
an OGNL list and it would end up in the action just fine. Now it 
doesn't work. It would be nice to just use JSP EL since I can pass in 
a list object and the container is responsible for finding the object 
and setting it into the taglib. So, now I just pass in a String and 
for figure everything out myself, because I know it won't ever break 
across versions of Struts and OGNL.


If you want some help with the UEL stuff, let me know. I'd definitely 
like to see one language that is simple and efficient.


-bp

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Struts 2.1.1 Release Planning

2008-01-14 Thread Tom Schneider
+1 for ditching JDK 1.4 on the Struts 2.1.x series.  Struts 2.0.x
should be a reasonable transition for those still on JDK 1.4.
Tom

On Jan 14, 2008 10:37 AM, Ted Husted [EMAIL PROTECTED] wrote:
 Works for me. It has to happen sometime.


 On Jan 14, 2008 11:27 AM, Al Sutton [EMAIL PROTECTED] wrote:
  Ditch JDK 1.4 support... problem solved ;).
 
  Al.
 
  - Original Message -
  From: Antonio Petrelli [EMAIL PROTECTED]
  To: Struts Developers List dev@struts.apache.org
 
  Sent: Monday, January 14, 2008 3:49 PM
  Subject: Re: Struts 2.1.1 Release Planning
 
 
   2008/1/14, Ted Husted [EMAIL PROTECTED]:
   Is anyone else up to helping with the 2.1.1 release management? With
   the anniversary of the first Struts 2.0 GA coming up in February, it
   would be nice if we could squeeze out another tagged build.
  
   Wait some hours, until we clear things up about WW-2379:
   https://issues.apache.org/struts/browse/WW-2379
  
   Antonio

 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [S2] Libraries in JDK 1.4 distribution

2008-01-12 Thread Tom Schneider
I disagree, I think there is a support cost.  If users are having issues 
with the 1.4 stuff, (which happens more often than not) then we're 
obligated to assist that user.  If we dropped the 1.4 stuff, maybe for 
Struts 2.1, then we would no longer have that obligation.  Long term I 
think we will drop the 1.4 stuff at some point, it's just a matter of 
figuring out when.


Another advantage is the builds become a bit simpler.  (Or at least 
there's a chunk of the build that goes away)  I'm not arguing for 
dropping 1.4 support, but there are some reasons to consider it.

Tom

Antonio Petrelli wrote:

2008/1/12, Al Sutton [EMAIL PROTECTED]:
  

I'd vote for sticking with the current approach for 2.0 and then dropping
the 1.4 support entirely for 2.1.

It would cause confusion to change the existing convention of dependancy
packaging, but for a the new minor release (2.1) we can finally follow the
statement on the struts2 website saying that Java 5 is a requirement and
redirect the effort currently spent on the J4 release into improving the
code code.



I sincerely don't know why we should remove the J4 support, since it
costs zero for us, thanks to Retrotranslator.

Antonio

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Destroy Of Interceptor

2007-12-14 Thread Tom Schneider

You know, I think you're right!  I searched the entire codebase (both xwork
and struts) and I have found nowhere where we call destroy() on the
interceptors.  I guess that hasn't been an issue because if the destroy
isn't being called, no big deal because your usually shutting down anyway.

If we were to call destroy on the interceptors, I would expect it to happen
in the cleanup() method of Dispatcher.  This is where all the rest of the
cleanup happens.  At runtime, the list of interceptors is stored in the
ActionConfig object.  (part of xwork)  Perhaps it might be a good idea to
submit a patch that fixes this issue. :) (hint, hint)
Tom


Décio Heinzelmann Luckow wrote:
 
 Hi All,
 
 I´m studing Interceptors and I was looking for the local where Struts call
 the destroy() method of Interceptor.
 
 The init() method is called at the same time of construction of
 Interceptor,
 but I can´t find where the destroy is called.
 
 Someone know where its happen?
 
 Tanks!
 
 Décio Heinzelmann Luckow
 
 
 
 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]
 
 
 

-- 
View this message in context: 
http://www.nabble.com/Destroy-Of-Interceptor-tp14338766p14339890.html
Sent from the Struts - Dev mailing list archive at Nabble.com.


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: web-beans ?

2007-12-14 Thread Tom Schneider
Actually, we've done a little more work on the scope plugin since we 
took it out of the sandbox:

http://cwiki.apache.org/S2PLUGINS/scope-plugin.html
Originally we took most of our API from Seam, but I think we'll be 
diverging from Seam a bit since it will make things easier for s2 users.


My understanding is that Bob Lee is one of the leads on the web beans 
spec.  So we might get JSR-299 support for free because we integrate 
with Guice.  (At least that was my hope)  That's why I haven't done much 
more with it.  (That and a lot of the spec isn't applicable to an action 
based framework)

Tom

Ted Husted wrote:

If by alternate implementation, you mean an implementation of JSR
299, that's something best discussed with the MyFaces group.
Evidentially, Shale is merging with MyFaces, making MyFaces our
one-stop JSF shop. :)

Meanwhile, Don's been working on a scope plugin in the sandbox that
mimic's Seam-style bijection. I'm not sure of the status, but you
might want to have a look at what he's done so far. '

http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-scope-plugin/

Also in the Apache Struts sandbox is the JPA MailReader implementation
that Wes mentioned.

 * http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/

I'll probably be heads-down on some Ajax stuff the rest of December,
but I hope to get back to this eventually.

-- HTH, Ted
 * http://www.StrutsMentor.com/


On Dec 14, 2007 2:41 AM, nicolas de loof [EMAIL PROTECTED] wrote:
  

Hello,

I' just looked at jBoss Seam documentation. I wonder if anyone allready
suggested to have similar features on Struts actions, that seems not so
difficult to implement, by mixing an OpenSessionInView interceptor, some
ModelDriven elements and injecting a JPA EntityManager in the action.

As Seams is now promoted as a JSR (299), this could be nice to have Struts
as an alternative implementation.

Nico.



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: In regards to Struts 2 Validation.

2007-12-12 Thread Tom Schneider
I have plenty of examples from our application.

The first is a case where the user must enter at least one phone
number and if the type of phone is selected, then the user must enter
a phone number.  The validation code is as follows:

if(!hasFieldErrors(exampleData.phoneNumber1) 
   !hasFieldErrors(exampleData.phoneNumber2) 
   !hasFieldErrors(exampleData.phoneNumber3) 
   !hasFieldErrors(exampleData.phoneNumber4))
{
  if((!exampleData.getPhoneNumber1().equals()
exampleData.getPhoneType1()== 0) ||
 (!exampleData.getPhoneNumber2().equals()
exampleData.getPhoneType2()== 0) ||
 (!exampleData.getPhoneNumber3().equals()
exampleData.getPhoneType3()== 0) ||
 (!exampleData.getPhoneNumber4().equals()
exampleData.getPhoneType4()== 0))
  {
addActionError(getText(phoneType.error));
  }

  if((exampleData.getPhoneNumber1().equals()
exampleData.getPhoneType1()!= 0) ||
 (exampleData.getPhoneNumber2().equals()
exampleData.getPhoneType2()!= 0) ||
 (exampleData.getPhoneNumber3().equals()
exampleData.getPhoneType3()!= 0) ||
 (exampleData.getPhoneNumber4().equals()
exampleData.getPhoneType4()!= 0))
  {
addActionError(getText(phoneNumber.error));
  }
}

Note, I did not write this, this is taken straight from our source code.

The second example I have is a case where we want to use some logic to
validate prescription information.  The validation for prescriptions
is tricky because the user doesn't have to enter prescriptions, but if
anything is entered for a prescription, then the prescription data is
fully validated.  Note that we have several places in the app where
this is done so I'd prefer not to duplicate this validation logic in
all the places we need it.  (i.e. don't want to violate the DRY
principle)  I broke this out into a helper class for reusability.  The
isEmpty() method on PrescriptionData checks to see if there is any
data populated.

  public void validate(String propertyPrefix, List prescriptionList,
ValidationAware errors, TextProvider textProvider)
  {
for (int i = 0; i  prescriptionList.size(); i++)
{
  PrescriptionData data = (PrescriptionData) prescriptionList.get(i);
  // pull out conversion errors and set original values
  ActionInvocation invocation =
ActionContext.getContext().getActionInvocation();
  Map conversionErrors =
invocation.getInvocationContext().getConversionErrors();
  if (!data.isEmpty())
  {
if (data.getApplicantId() == 0)
{
  errors.addFieldError(medication, textProvider
.getText(medicalQuestions.applicant.required));
}
if (ValidationUtils.isStringEmpty(data.getMedication()))
{
  errors.addFieldError(medication, textProvider
.getText(medicalQuestions.medication.required));
}
if (ValidationUtils.isStringEmpty(data.getDescription()))
{
  errors.addFieldError(description, textProvider
.getText(medicalQuestions.dosage.required));
}

if (!hasConversionError(propertyPrefix + [ + i +
].startDate, conversionErrors)  data.getStartDate() == null)
{
  errors.addFieldError(startDate, textProvider
.getText(medicalQuestions.startDate.required));
}
if (data.getStartDate() != null  data.getEndDate() != null)
{
  Calendar startCal = Calendar.getInstance();
  startCal.setTime(data.getStartDate());
  Calendar endCal = Calendar.getInstance();
  endCal.setTime(data.getEndDate());
  if (startCal.after(endCal))
  {

errors.addActionError(textProvider.getText(medicalQuestions.startAfterEnd));
  }
}
  }
}
  }

The final example is a case where some might consider it a 'business
rule', however, in my opinion, validation is validation regardless of
whether you're implementing business rule validation or simple UI
validation.  My argument for this is the fact that the simple UI
validation is used as part of the business rule validation.  (For
example, you might need to check that a string is not blank or null)
In this use case, we allow the user to enter a state and a zip and we
verify that the state and zip match.  We do this by making sure that
the combination of state and zip produce at least one valid county.

if (!hasFieldErrors(siteLocationView.zip)
   !hasFieldErrors(siteLocationView.state))
{
  CountyData counties[] =
siteLocationProcess.getCountiesForZipAndState(siteLocationView
.getZip(), siteLocationView.getStateAbbr());
  if (counties.length  1)
  {
addActionError(getText(siteLocationView.zipcountymismatch.error));
  }
}

This is a case where the validation is dependent on a business process object.

There's plenty more where that came from, so if you need more
examples, I'd be happy to provide them.  These examples show how
verbose the 

Re: [s2] Allowed methods next step

2007-12-09 Thread Tom Schneider
CMA = container managed authentication for those who haven't memorized 
every three letter acronym under the sun.


What about using an s2 interceptor to enforce role security?  That way 
you could have an implementation for whatever security mechanism your 
using and it's not tied to the struts configuration.  I suppose we could 
still have a place to store role metadata in the configuration, but I 
wouldn't want the specific security enforcement logic to be tied to the 
s2 itself.

Tom

Matt Raible wrote:

Is there anything on action that allows restricting roles? I
remember this being in S1 and I'm unsure if it exists in S2. If not,
it's something I believe we should add as I believe it's useful when
using CMA. When using Spring Security, I generally keep all my
configuration in my context file, but I can see why it's useful when
using CMA. If it is an attribute, I suppose having separate action
definitions is the best way to allow different roles for different
methods? If not, I could see some sort of method:role1/role2
shortcut being useful - but it might also make things more
complicated.

Matt

On Dec 9, 2007 5:30 AM, Don Brown [EMAIL PROTECTED] wrote:
  

Since the commit for this feature involved a rather large XWork change
(properly immutable configuration objects [1]), I decided to commit
what I have and discuss the next steps.

First, due the aforementioned fix [1], Brian, your SmartURL's
migration work will probably be most affected.  I changed the
configuration objects to be immutable using a static inner builder
class pattern.  This makes construction a bit tricker, so pay
attention to the changes in the code and tests for the codebehind
plugin.  The bright side is the construction code is much more
readable and nasty state bugs should be gone.  You can do nifty things
like this:

ActionConfig config = new ActionConfig.Builder(mypackage, foo/*/*,
foo.BarAction)
.methodName(execute)
.addParam(someparam, someval)
.addResultConfig(new
ResultConfig.Builder(success{1}, foo.MyResult)
.addParams(location, /foo.jsp)
.build())
.build();

As for the allowed methods, I originally suggested three options:

1. A new property/constant titled 'struts.restrictToDeclaredMethod'
that will instruct the ActionConfig (where the allowedMethods property
lives) to only allow the method that is explicitly defined (defaults
to 'execute').  If false, all methods will be allowed.

2. A new attribute on the action element called 'allowedMethods',
which takes a comma-separated list of method names to allow

3. A new @ActionMethod annotation for the codebehind plugin that
declares a method as callable

And after the comments, I see #2 is important and #3 I'll skip, since
Brian will be rewriting that stuff anyways.

To answer Matt's concern, yes, the default will be all public, no-arg
methods can be called, but what this will allow folks to do is limit
the methods that can be called, if they so choose.  It also makes it
clearer to the developer what methods are being exposed through tools
like the config browser plugin.  I'm also thinking it will be helpful
down the road when a plugin wants to move behind no-arg methods (I've
tried it, it can be pretty powerful).

See https://issues.apache.org/struts/browse/WW-2363

Any more thoughts?

Don

[1] http://jira.opensymphony.com/browse/XW-594

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]







  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: In regards to Struts 2 Validation.

2007-12-08 Thread Tom Schneider
Just wanted to chime in here.  I have very specific goals that I am 
trying to achieve, so I thought I would explain them in detail.  (this 
is something I've been tasked with at work)


1. We have a core product that is 'customized' for several client 
implementations.  Validation is an area where we have a need to 
'customize' certain validation rules.  I think a way to separate out 
'rules' that can be referenced via a key and replaced via configuration 
would work well here.  Sort of a 'lite' rules engine targeted 
specifically to validation.


2. Ideally I would want to combine our current XML and action.validate 
validation.  Right now we do the simple validation in XML and the rest 
of the validation in action.validate.  I would prefer to have all 
validation in one place.


3. I want to be able to share validation between batch processes and the 
UI.  Right now it's somewhat challenging to reuse validation between UI 
and batch processes.  I would like one validation framework for both UI 
validation and validation in batch processes--at least for writing of 
the rules is concerned.  Obviously there would need to be different 
adapters to invoke the validation in different contexts.


4. Validation should be easy to write and easy to use.  I don't want a 
framework that is overly complex and hard to figure out.  This is to 
satisfy the KISS principle.  (Keep it simple stupid)


So far, I like the grails validation the best.  They have the concept of 
a 'constraint', which is like a rule but can be referenced directly in 
the groovy closure that defines the validation constraints.  It should 
be easy enough to create new closures that define more complex 
validation directly in the closure.


The other 2 projects I've looked at are: http://oval.sourceforge.net/ 
and 
https://springmodules.dev.java.net/docs/reference/0.8/html/validation.html#beanValidator.  
Both have some interesting concepts, but neither of them satisfy all of 
my needs out of the box.


So that's where I'm currently at.  I haven't had much time yet to really 
dig into this yet.  Any additional ideas/suggestions would be greatly 
appreciated.

Tom


rburton wrote:

Tom Schneider and a few other folks have been talking about validation in
Struts 2 and how it can be improved. I figured it would be useful to spawn a
thread in order to stir up some idea’s that may help inspire us. I know
validation isn’t an easy task, and some would argue it’s a cross cutting
concern; so does anyone have any idea’s on what they would like to see done?
How can the existing validation framework be improved? My only issue with
the existing validation framework is I can’t define validation rules which
can be referenced in my validation.xml file. 


Any ideas would be greatly appreciated! Struts 2 = :rules:

Best Regards,
Richard L. Burton III

P.S. I hate being at work on Sunday morning at 1 AM EST time to do a
migration. 
  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: JSP EL in struts2 tags

2007-12-03 Thread Tom Schneider
Well, I am definitely interested in this.  I had no idea this was being 
planned.  (I'll have to pop over to the OGNL site more often now)  It 
definitely would be good for us to keep in sync since we may be 
duplicating efforts.  My work thus far has been mostly a Proof of 
Concept, so I haven't invested too much time at this point.  It would 
also probably be easier from a migration standpoint if we could get 
something like this going.

Tom

Jessek wrote:

I don't know how relevant it is to the conversation or how awful it's going
to be trying to do it but I did plan on taking a stab at creating a new
unified-el compatible grammar for OGNL when I do my big IoC-friendly
re-factor.  (probably a 2.7.3 release kind of change)

Since jboss and others already sound like they do some el extensions of
their own to support parameter passing / other things it hopefully won't be
too bad.   I'll try and post updates wherever I can to get more people
involved but knowing how you want to handle backwards compatibility -
unified el + ognl stuff (if at all) and if OGNL needs to perform any extra
tricks to make it happen would be a good thing to have ready and discuss /
etc during that dev cycle. 


I'm guessing I'll probably start on it sometime this month and finish
whenever. .


Tom Schneider wrote:
  
I was working on a proof of concept for Unified EL:  
http://cwiki.apache.org/S2PLUGINS/unified-el-plugin.html


I had a basic value stack up and running, however, I never took it any 
farther than that.  Richard Burton is planning on implemented an MVEL 
stack in the near future, but he's waiting on some changes from Chris 
Brock in MVEL itself.


I think in the long run, we really need a new tag library to fully take 
advantage of the unfied EL.  Even if we do that though, standard unified 
EL is not as powerful as OGNL.  We would need to extend the language or 
be limited when compared to what is possible with OGNL today.  Maybe for 
some people that's not an issue, but I fear that would keep some people 
from switching.

Tom




  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: JSP EL in struts2 tags

2007-12-02 Thread Tom Schneider
I was working on a proof of concept for Unified EL:  
http://cwiki.apache.org/S2PLUGINS/unified-el-plugin.html


I had a basic value stack up and running, however, I never took it any 
farther than that.  Richard Burton is planning on implemented an MVEL 
stack in the near future, but he's waiting on some changes from Chris 
Brock in MVEL itself.


I think in the long run, we really need a new tag library to fully take 
advantage of the unfied EL.  Even if we do that though, standard unified 
EL is not as powerful as OGNL.  We would need to extend the language or 
be limited when compared to what is possible with OGNL today.  Maybe for 
some people that's not an issue, but I fear that would keep some people 
from switching.

Tom

Adam Hardy wrote:

Ing. Andrea Vettori on 30/11/07 16:40, wrote:


It seems to me that if the problem is triggered only when using a 
request parameter inside EL than EL should be on by default on s2 
tags because using request parameters that way is bad practice 
(should'nt we use actions getters/setters and than call a jsp view?)


I also think that this mixture of OGNL and EL is confusing and if I 
must choose to have only one I'll choose EL that's a standard and is 
supported on many other taglibs.


I thought I heard Ted say a month ago that Don was doing some 
refactoring in XWork that would allow the script language to be 
pluggable.


I missed any further comments on the subject though so I don't know if 
it was successful or still in the pipeline or what.



Regards
Adam


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



JRuby in Struts 2

2007-12-02 Thread Tom Schneider
These last 2 weeks, Richard Burton and I have been working on adding 
JRuby support to S2.  We've been successful in getting a very basic 
action up and running, but we're running into something of an impedance 
mismatch between S2 and Ruby.  Some of the issues we've run into:


1. Ruby's object properties are typeless, this means that when we go to 
set values on ruby actions and ruby domain objects, the type conversion 
is useless because we can't look at the property type to figure out what 
to convert it to.


2. No annotations in Ruby, a lot of functionality in S2 is driven 
through annotations.


3. For the reasons stated in #1 and #2, it's hard to recreate the domain 
model on a save action so the properties can be set back onto the domain 
model.


For these reasons, it quickly becoming clear to me that we can't just 
create s2 actions in ruby.  The language has too many differences with 
Java to really be a drop in replacement.  (Groovy is much better in this 
regard)  So the only alternative I can think of is to create a 
fundamentally new web framework that runs in s2, but uses Ruby as it's 
language.  So I'm curious to see where others on the dev list see Ruby 
fitting into the s2 ecosystem.  Should we have a rails-like framework 
that is pretty close to Ruby on Rails and makes an easy transition from 
rails?  Or do we want something that diverges from the rails and 
provides an alternate to rails development on the JRuby platform?  This 
is a Brave New World for struts so I think it's useful to get some ideas 
on where we might take this.

Tom

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: JSP EL in struts2 tags

2007-12-02 Thread Tom Schneider
It wouldn't even be a configuration change.  Just drop the plugin jar in 
your s2 project and you're using my value stack.  (Most likely breaking 
a lot of your OGNL)  At this point, we execute the unified EL outside of 
the JSP engine, within the tags/value stack.  So at a minimum, if we 
wanted to support EL at a JSP level, we'd have to create a new tld 
file.  I'm not sure how that would work with the existing tags, it's 
been a while since I've written a taglib outside of s2/webwork.  It all 
depends on how seamlessly you would want it to work with existing JSP 
taglibs, like JSTL.  The work I've done would certainly be a darn good 
start.  If we needed a whole new taglib, I think that would be a good 
amount of work.

Tom

Adam Hardy wrote:

Very interesting.

The situation at the moment is that EL and OGNL should not be used 
together, for security reasons as I understand it, and therefore S2 
doesn't allow EL. It seems the ideal solution is to offer the option 
of either EL or OGNL, with only a change in one configuration option 
needed to specify which.


Tom Schneider on 02/12/07 19:34, wrote:
I was working on a proof of concept for Unified EL:  
http://cwiki.apache.org/S2PLUGINS/unified-el-plugin.html


I had a basic value stack up and running, however, I never took it 
any farther than that.  Richard Burton is planning on implemented an 
MVEL stack in the near future, but he's waiting on some changes from 
Chris Brock in MVEL itself.


I think in the long run, we really need a new tag library to fully 
take advantage of the unfied EL.  Even if we do that though, standard 
unified EL is not as powerful as OGNL.  We would need to extend the 
language or be limited when compared to what is possible with OGNL 
today.  Maybe for some people that's not an issue, but I fear that 
would keep some people from switching.

Tom


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: JRuby in Struts 2

2007-12-02 Thread Tom Schneider
I agree, I think it would be interesting to create a plugin that gives 
us a seamless full stack: Struts2/Spring/JPA or Struts2/Guice/JPA.


However, one of the advantages of Groovy/Ruby is the fact that the 
classes can be updated just by reloading the page and new language 
features, such as closures and dynamic properties.  This is where rails 
really shines, it takes advantage of those language features in the 
framework itself.  Since we're currently restricted to Java, that limits 
what we can do.  We can get close, but can we get close enough.


One of the areas where I plan on exploring this question is with 
validation.  The current validation in s2 is ok for the basic stuff, but 
falls short when you start getting complicated validation logic.  There 
just isn't good support out-of-the-box for this type of thing, so I was 
hoping to integrate some Grails validation support into s2/webwork.  
Closures are a very elegant way to define validation for a domain 
object, the simplicity of a declarative XML type syntax with the power 
of a full language.

Tom


Ted Husted wrote:

I would say that Rails is an excellent source of inspiration, but I
don't think Ruby or Rails is magic. Rails incorporates a number of
good ideas, and a take no prisoners perspective toward productivity,
but that doesn't mean every idea is perfectly implemented.

It's my belief that we can achieve the same level of productivity in
Java by using tools like Eclipse, Maven, and JPA to their full extent.
I'm especially impressed by the plugins now available with MyEclipse.
With Tomcat and Derby bundled in, we can download Java and MyEclipse
and start writing enterprise-grade applications out of the box.

A key to the success of Rails has been ActiveRecord. Likewise, a key
to creating a highly productive Java stack is adopting and exploiting
JPA. For the type of applications that most people write, especially
with something like Rails, JPA is an ideal technology.

I'm finishing up a JPA/Struts training course now. I'm presenting it
next week, and after I hope to do a series of companion tutorials. I'm
not sure that everyone realizes how close the Java ecosystem may be to
a productivy tipping point, where we might see 2x and 3x gains, just
by aggressively integrating and exploiting the tools we already have
at our fingertips.

-Ted.

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: REST Plugin and auto-generated XHTML Views

2007-12-01 Thread Tom Schneider
Personally, I !!HATE!! writing xsl.  I try to avoid it at all costs, but 
maybe others might feel differently.  Is the idea here that the action 
would output XML then let the xsl processor on the client convert it to 
html?  If so, would you expect the domain model to be automatically 
serialized to xml, or would there need to be code to do that?  Also, 
would we need a new xsl for each screen?  I guess I'm having trouble 
understanding exactly how this would work.


Where I work, they used to do XML + XSL - HTML, but they did it 
server-side.  It was terrible from a performance perspective--although 
moving it to the client might work better.  I would still be a little 
hesitant to go down this path just because of the war stories I heard. :)


I think I would rather see something more along the lines of 
rails/grails.  Have a default template that's automatically used for 
list/edit/delete screens.  If you need to diverge from the default, then 
you could generate a real view from the template and start with that.

Tom

Matt Raible wrote:

I just thought of something that might be an easy way to generate
XHTML views for the REST Plugin.

What if we used XSL on the client-side with the XML views? As far as
browser capabilities, I think client-side XSL could be a hidden gem
that hasn't been looked at in a while. Of course, it could also be
something that doesn't work very well across browsers.

Do you guys think it's worth looking into?

If it works, .html (or .xhtml) could render HTML views and we could
allow users to override the XSL stylesheet.

Matt

  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Googlecode Maven Repository for External Struts 2 Plugins

2007-11-27 Thread Tom Schneider
I think having separate googlecode projects for each plugin has worked 
well up to this point.  Creating a googlecode project is quick and 
easy.  Googlecode seems to be designed to have a lot of really small 
projects, rather than one big projects with many subprojects.  The one 
thing that ties everything together is the plugin registry.  If 
anything, I'd rather see that expanded.  Maybe add a list of developers 
to the plugin registry.  I think the apache developers would feel more 
obligated to maintain something hosted on Apache as opposed to something 
hosted on googlecode.  As you may be able to tell, not a lot of the 
googlecode plugin sites have a ton of content.  The only reason I 
created a common maven repository is so that end users only have to add 
one plugin repository to get access to most of the plugins.


Ted Husted wrote:

Very cool, Tom.

Has anyone started a shared GoogleCode project for Struts 2 plugins yet?

The notion being that instead of everyone starting up one-off
projects, we could have one GC project that anyone with a Google ID
could join and use to maintain a third-party Struts 2 plugin -- a
Struts 2 Plugin Commons.

Of course, the group could still have a select group of owners that
could remove someone who joined and then turned out to be a troll.

-Ted.

On Nov 25, 2007 10:12 AM, Tom Schneider [EMAIL PROTECTED] wrote:
  

Hey all,
I finally figured out a way to host a maven repository on googlecode.
This should greatly simplify using googlecode hosted plugins in Struts
2.  For me, it's also much nicer to use maven to deploy than trying to
get a jar manually uploaded into the central repository.  Instructions
on how to use this repo for Struts 2 projects are at:
http://code.google.com/p/struts2plugin-maven-repo/

Anyone who has a plugin hosted at googlecode can use this maven
repository to host their plugin.  (I've already added several developers
that I know of, if your not in the list let me know)  I've also already
added several of my more popular plugins.  I plan on adding the rest as
time permits.  Please look at the scope plugin (on googlecode) for an
example of how to configure maven to deploy to this repository.
Tom



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Googlecode Maven Repository for External Struts 2 Plugins

2007-11-27 Thread Tom Schneider
Wendy,
I'm all for syncing it with the central repository, it's just a
question of how.  Googlecode doesn't give shell access so I have no
access to cron to sync things up.  I could sync it up manually by
checking it out and running the rsync on my local machine, but that
seems less than ideal.  Any suggestions would be greatly appreciated.
Tom

On Nov 27, 2007 11:04 AM, Wendy Smoak [EMAIL PROTECTED] wrote:
 On 11/25/07, Tom Schneider [EMAIL PROTECTED] wrote:
  Hey all,
  I finally figured out a way to host a maven repository on googlecode.
  This should greatly simplify using googlecode hosted plugins in Struts
  2.  For me, it's also much nicer to use maven to deploy than trying to
  get a jar manually uploaded into the central repository.  Instructions
  on how to use this repo for Struts 2 projects are at:
  http://code.google.com/p/struts2plugin-maven-repo/

 On behalf of Maven users everywhere, please consider getting this
 synced with the central Maven repository.  (I think that mostly works
 via rsync right now, but hopefully something can be arranged to handle
 svn.)

 Having to add an additional repository to your settings is a pain, and
 causes things like archetypes to not Just Work like they're supposed
 to.

 --
 Wendy


 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Did I break bamboo or is bamboo broken?

2007-11-24 Thread Tom Schneider
I checked in a very minor change for WW-2328 and now the 
Struts2PortletTest is failing in both the java5 and java6 bamboo 
builds--but with different exceptions.  I have a clean checkout of 
struts2 and everything builds fine locally with a mvn -Pall build.  So 
is this a case of gremlins in the s2 build, or did I really break 
something and just can't reproduce it?

Tom

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Googlecode Maven Repository for External Struts 2 Plugins

2007-11-24 Thread Tom Schneider

Hey all,
I finally figured out a way to host a maven repository on googlecode.  
This should greatly simplify using googlecode hosted plugins in Struts 
2.  For me, it's also much nicer to use maven to deploy than trying to 
get a jar manually uploaded into the central repository.  Instructions 
on how to use this repo for Struts 2 projects are at:

http://code.google.com/p/struts2plugin-maven-repo/

Anyone who has a plugin hosted at googlecode can use this maven 
repository to host their plugin.  (I've already added several developers 
that I know of, if your not in the list let me know)  I've also already 
added several of my more popular plugins.  I plan on adding the rest as 
time permits.  Please look at the scope plugin (on googlecode) for an 
example of how to configure maven to deploy to this repository.

Tom

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: JPA in mailreader

2007-11-21 Thread Tom Schneider

Ted, I finally had a chance to look at your JPA mailreader.

I know this was in the original, but I really don't like the way that 
they have most of the functionality for the actions is in a superclass.  
To me, that's hiding functionality.  (Especially when the domain model 
is in the super class)  And this become problematic on bigger projects.  
Do you have multiple superclasses to extend from with different domain 
models?  What if you need functionality from 2 different superclasses.  
At a certain size of project this technique breaks down and it irritates 
me that the standard example shows it this way.


I also don't like having a separate create vs. update action.  My 
general rule of thumb is: if the domain model is the same and the use 
cases are closely related, it should be the same action.  I don't 
generally combine list and edit actions, but the create/edit/save 
functionality will all be in one class as would be the list/paging/sort 
use cases.


Why are the name queries on the domain object?  I don't dislike it, I'm 
just curious about why you took that approach.


I think the validation annotations are ugly and hard to read, but others 
may disagree.  I do like how grails uses enclosures to capture that 
information, can you convert this example to grails? :)


I'm not a fan of having a separate interface for the Manager classes, 
just for the sake of having an interface.  If it's unlikely that there 
will ever be another implementation, then it should just be a class.  
One argument you could make is: Well what if you switch data storage 
technologies?  Well, we just did that in this example and the 
interfaces had to be redesigned, so did they really buy you anything?


Again I cringe at seeing a superclass for all domain objects.  I think 
it makes sense for the managers to have a superclass though.  In my 
experience with big projects, having a superclass for domain objects 
doesn't make a lot of sense.


I hope I haven't been too brutal with my comments. :)  I'm so glad we 
finally have a mailreader example that uses JPA.  A lot of what you see 
here is my experience from working with webwork on a large (200+ action) 
project.  There's lots of things that seem fine on a small scale, but 
when you have to scale up to that size, lots of things become 
problematic.  I'd also be curious to find out how others have structured 
larger projects in webwork/struts.  I think that's helpful because we 
spent a lot of time reinventing the wheel when it comes to large project 
best practices.

Tom


Ted Husted wrote:

The work-in-progress is checked into the sandbox now.

 * http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/

I'll track further work through https://issues.apache.org/struts/browse/WW-1399

This is still very much a prototype, and I would gladly receive any
suggestions.

-Ted.

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Struts 2 Plugin for Grails?

2007-11-19 Thread Tom Schneider
For those interested, Mark and I have been collaborating on a proof of
concept for this idea. Details are here:
http://cwiki.apache.org/confluence/display/S2PLUGINS/Grails+Plugin  We
have a simple precompiled groovy controller and GSP up and running.

On Nov 13, 2007 10:38 PM, Vinny [EMAIL PROTECTED] wrote:
 My unsolicited 2 cents. The idea of integrating Grails scaffolding with
 Struts 2 has been bouncing
 in my  head for  few weeks now. The Grails CRUD is a true sweet spot for me
 but
 Struts still excels when it's time to move beyond a CRUD Action. Getting the
 2 frameworks
 working together would be awesome. Looking forward to see where this goes.


 On Nov 13, 2007 9:00 AM, Tom Schneider [EMAIL PROTECTED] wrote:

  Just for completeness I'd think we'd want a GSPResult.  Just because
  it's slow now, doesn't mean it will be slow in the future.  (Look at how
  slow freemarker was before we tweaked it)  Also, for those looking to
  migrate over, if GSP isn't supported, that might be a issue for existing
  grails apps.
 
  And who says that Struts 2 devs recommend Freemarker?  I sure don't. :)
  Tom
 
  Matt Raible wrote:
   I don't know if we'd really need to support GSPResult in a Struts 2
   Plugin. AFAIK, the slowest part of Grails is GSP.
  
   http://tinyurl.com/2298jh
  
   If we were to write a plugin, would it implement the same scaffolding
   that Grails has by default? If so, it might be better to use
   FreeMarker since that seems to be a recommended choice among Struts 2
   developers. I don't believe there's a FreeMarker Plugin for Grails,
   but I'd be interested in creating one. A colleague of mine has been
   successful in making Grails work with JSP.
  
 
  -
  To unsubscribe, e-mail: [EMAIL PROTECTED]
  For additional commands, e-mail: [EMAIL PROTECTED]
 
 


 --
 The Street Programmer http://streetprogrammer.com


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: JPA in mailreader

2007-11-15 Thread Tom Schneider
Are you worried about optimistic locking at all?  (I'm guessing not
for this simple example)  Although I think your technique is clever,
in a situation where optimistic locking is used, you should really be
editing the object that was originally read from the database.  Might
I suggest the scope plugin.  :)

I'm not sure we'd want to introduce optimistic locking in a simple
example--although it would be good to have one example that uses it.
Tom

On Nov 15, 2007 2:54 AM, Ted Husted [EMAIL PROTECTED] wrote:
 I'm starting to make some progress on this again. I having great fun
 re-discovering how some of the S2 features work together. For example,
 custom type converters and persistence URL parameters are a great
 tag team. Given a converter for user, and a parameter like
 ?user=husted, S2 can automatically restore the husted user from
 the database, and any other url tags on the result page are also
 automatically embellished with ?user=husted again.

 Though, there's more to do, since the JPA merging isn't working quite
 right yet. :(

 -Ted.


 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Confluence Rate Plugin for the Plugin Registry

2007-11-14 Thread Tom Schneider
Thanks for doing this Don, I appreciate you taking the lead on this.
Did you vote for all your own plugins? :)
Tom

On Nov 14, 2007 4:17 PM, Don Brown [EMAIL PROTECTED] wrote:
 Done.  Unfortunately, the latest version requires a newer version of
 Confluence, so I installed an older version.  I placed the macro on
 each plugin page, but found a couple of issues:
  * Anyone can reset the ratings
  * The table report doesn't seem to work right, so I didn't put that
 report on the home page
  * New votes won't kick off an export of the page, so users using the
 static page won't see the new votes

 Still, I think it is better than nothing, so vote away.

 Don


 On 11/11/07, Tom Schneider [EMAIL PROTECTED] wrote:
  I know I've mentioned this before, but I was wondering if we could use
  this plugin:
 
  http://www.atlassian.com/software/confluence/plugins/rate.jsp
 
  To provide user rating capabilities for the plugin registry.  As more
  and more of the core functionality becomes plugins, I think it makes
  sense to let people vote on the plugins so new users have an idea of
  which plugins are the most popular.
  Tom
 
  -
  To unsubscribe, e-mail: [EMAIL PROTECTED]
  For additional commands, e-mail: [EMAIL PROTECTED]
 
 

 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Struts 2 Plugin for Grails?

2007-11-13 Thread Tom Schneider
Just for completeness I'd think we'd want a GSPResult.  Just because 
it's slow now, doesn't mean it will be slow in the future.  (Look at how 
slow freemarker was before we tweaked it)  Also, for those looking to 
migrate over, if GSP isn't supported, that might be a issue for existing 
grails apps.


And who says that Struts 2 devs recommend Freemarker?  I sure don't. :)
Tom

Matt Raible wrote:

I don't know if we'd really need to support GSPResult in a Struts 2
Plugin. AFAIK, the slowest part of Grails is GSP.

http://tinyurl.com/2298jh

If we were to write a plugin, would it implement the same scaffolding
that Grails has by default? If so, it might be better to use
FreeMarker since that seems to be a recommended choice among Struts 2
developers. I don't believe there's a FreeMarker Plugin for Grails,
but I'd be interested in creating one. A colleague of mine has been
successful in making Grails work with JSP.
  


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: JPA in mailreader

2007-11-12 Thread Tom Schneider
Yes, avoid JpaTemplate, just like HibernateTemplate should be avoided.
 Shouldn't be necessary with the latest versions of the respective
frameworks.
Tom

On Nov 12, 2007 9:17 AM, Wes Wannemacher [EMAIL PROTECTED] wrote:
 I can agree with that... I'm still thinking of avoiding JpaTemplate
 though because they indicate that it only exists to help people used
 to HibernateTemplate / JdoTemplate.

 -Wes


 On 11/12/07, Tom Schneider [EMAIL PROTECTED] wrote:
  My vote is to just use spring, for both EntityManagerFactory injection
  and Transaction Management.  As Richard and I were discussing this
  weekend, Spring is a very common framework when used with Struts.  It
  will also provide a full stack Struts/Spring/JPA example.
  Tom
 
  On Nov 12, 2007 9:05 AM, Wes Wannemacher [EMAIL PROTECTED] wrote:
   Hello,
  
   I've been quietly learning JPA / implementing a JPA struts2-mailreader.
  
   I have a judgment call to make now and wanted some input. At first I
   was hoping to create this in a non-IoC fashion. This was simply to
   keep the dependencies at a minimum and concentrate on integrating JPA
   and struts2. But, in many spots, the JPA docs indicate that the
   EntityManagerFactory should be injected (although it isn't that hard
   to instantiate by hand). I've thought about using Spring, which will
   make things pretty easy with it's transaction management and DI. It
   has been suggested to me to use the JpaTemplate, but while I was
   reading the JavaDoc for it -
  
   http://static.springframework.org/spring/docs/2.0.x/api/org/springframework/orm/jpa/JpaTemplate.html
  
   It indicates that new projects should use a DAO with a shared EM injected.
  
   If I make DAOs, I may skip Spring altogether.
  
   Also, I could do the transaction management in the DAO implementations
   or try to hook into the transactional management of an ee server. If I
   manage the transactions myself, it will make mailreader work in non-ee
   servers as well. However, if this is a best-practices example, I
   should probably use the ee server. What do you guys think will be the
   best approach.
  
   -Wes
  
   --
   Wesley Wannemacher
   President, Head Engineer/Consultant
   WanTii, Inc.
   http://www.wantii.com
  
   -
   To unsubscribe, e-mail: [EMAIL PROTECTED]
   For additional commands, e-mail: [EMAIL PROTECTED]
  
  
 
  -
  To unsubscribe, e-mail: [EMAIL PROTECTED]
  For additional commands, e-mail: [EMAIL PROTECTED]
 
 


 --

 Wesley Wannemacher
 President, Head Engineer/Consultant
 WanTii, Inc.
 http://www.wantii.com

 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Confluence Rate Plugin for the Plugin Registry

2007-11-11 Thread Tom Schneider
I know I've mentioned this before, but I was wondering if we could use 
this plugin:


http://www.atlassian.com/software/confluence/plugins/rate.jsp

To provide user rating capabilities for the plugin registry.  As more 
and more of the core functionality becomes plugins, I think it makes 
sense to let people vote on the plugins so new users have an idea of 
which plugins are the most popular.

Tom

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Struts 2 Plugin for Grails?

2007-11-11 Thread Tom Schneider

Mark,
I was reading Getting Started With Grails this weekend and the more I 
look at Grails, the more I see your Groovy Works effort fitting into a 
Grails mini-porting effort to Struts 2.  Much of what you describe is 
already in Grails and I think the last thing we need is yet another 
groovy web framework. :)


Just to expand upon this, I think there are 3 main pieces we would need 
to make this work:
1. A new plugin based on Don's rest plugin that maps incoming request to 
grails controllers.
2. A grails controller engine that can take the grails request, provide 
the necessary context and execute a grails controller.
3. A GSPResult that can create the context for the GSP page and execute 
the GSP page.


I did some work on this over the weekend and it didn't take too much 
effort to get a GSPResult going.  (Although the templated executed, it 
didn't display any data because I didn't have a ModelAndView for the 
template to run against)

Tom


Mark Menard wrote:

On 11/7/07 2:58 PM, Tom Schneider [EMAIL PROTECTED] wrote:
  
They are very similar. The difference used to be that s2ss did not require

Spring, or didn't support it. I don't exactly recall. Groovy Works requires
and uses Spring to wire the dependencies of the objects it manufactures.

Additionally I think the directions were different. It was my plan, if I had
more time, to really build on the Groovy Works thing and make it more like a
Groovy version of Struts 2 with an integrated stack. I really haven't had
time to pursue that goal. The idea was download GW's and its maven template.
Run the template and code without need for XML, with a well defined project
structure, ORM in place, etc. Obviously I haven't gotten that far, and other
things have come along in S2 that do some of those things, like SmartURLs,
code behing, zero config, etc.

Mark


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Struts 2 Plugin for Grails?

2007-11-11 Thread Tom Schneider

See my comments below:

Mark Menard wrote:

On 11/11/07 5:07 PM, Tom Schneider [EMAIL PROTECTED] wrote
I will agree with you, and I've decided I'm done reinventing wheels. So, I'm
game. I'm very pressed for time, but I'm definitely interested in this. I
think a bridge from Java based Struts 2 development into Groovy is really
exciting. We have realized some serious productivity gains using Groovy with
Struts 2 in the simple way we've been using it in house for some time now.
  
Good, I'm glad we're on the same page.  I really liked some of the stuff 
I saw with Groovy/Grails.  No rush here, I just wanted to throw this out 
there in case anyone else was interested in pursuing this.  (Don 
expressed interest at one point)

3. A GSPResult that can create the context for the GSP page and execute
the GSP page.

I did some work on this over the weekend and it didn't take too much
effort to get a GSPResult going.  (Although the templated executed, it
didn't display any data because I didn't have a ModelAndView for the
template to run against)



I think someone has done a GSP result. It might make some sense to look at
that.
  
Close, but not exactly a GSPResult: 
http://struts.apache.org/2.x/docs/groovyresult.html


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [s2] extras-lib (was JUEL plugin (was Roadmap for the core taglib))

2007-11-07 Thread Tom Schneider
Putting down my work would only motivate me more. :)  That's exactly
how this was started back in February--Chris Brock was bragging about
how superior MVEL was and how slow OGNL was.  Well, we'll show him!
Tom

On 11/7/07, Ian Roughley [EMAIL PROTECTED] wrote:
 It's great that Tom is doing this work, and it wasn't my intent to put
 down the effort.  I guess I was just trying to preempt given some of the
 OGNL threads.

 /Ian

 Tom Schneider wrote:
  LOL, I didn't know my efforts were going to cause such a raucous. :)
 
  Ted is correct--I started this on Saturday on a whim.  At this point
  it is completely experimental--we have a long ways to go before it is
  even close to usable.  However, I was able to execute a simple
  expression using my value stack, which for me, was a worthwhile
  accomplishment.  I didn't want Don's work to abstract away the value
  stack to be completely wasted, we needed at least one other value
  stack implementation to truly test his changes.  Don did good work,
  but there is still a lot of OGNLisms that have crept into the code
  over time.  It would be nice to find and eliminate these
 
  Ian brings up a good point in that we'll have to decide how to handle
  some things like I18N/type conversion/method invocation.  Not all EL's
  are created equal and OGNL probably is a little more flexible and
  powerful than most.  Then even if we get all that working, what's the
  migration strategy?
  Tom
 

 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Struts 2 Plugin for Grails?

2007-11-07 Thread Tom Schneider
Interesting idea!

Another plug-in idea would be to see if there was a way to integrate
grails flow:

http://www.jcatalog.com/oss/grailsflow/whygrailsflow.html

I've been considering ways to make the Spring Webflow Plugin easier.
(We all know how much you like that plugin, Matt)  There's just too
much overlap between what the SWF XML does and what the XWork XML
does.
Tom

On 11/7/07, Matt Raible [EMAIL PROTECTED] wrote:
 Has anyone thought about creating a Struts 2 Plugin for Grails?
 There's one for Wicket - which proves you don't have to use the
 default web framework (Spring MVC).

 http://grails.org/Wicket+Plugin

 IMO, Grails Controllers look a lot more like Struts Actions than they
 do Spring MVC. I really like the productivity Groovy gives you and
 I'm impressed with Grails. I especially like it because it uses all
 the same underlying technologies as AppFuse - it just simplifies things.

 Thanks,

 Matt

 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Struts 2 Plugin for Grails?

2007-11-07 Thread Tom Schneider
How are http://code.google.com/p/s2ss/ and
http://code.google.com/p/groovyworks/ different?  Looking at the code
they look very similar.  I've been trying to make sure the Plugin
Registry is up to date and has all the plugins that are available, so
I'm wondering if these are 2 separate entries, or if they are
essentially the same thing.
Thanks,
Tom

On 11/7/07, Mark Menard [EMAIL PROTECTED] wrote:
 On 11/7/07 1:38 PM, Matt Raible [EMAIL PROTECTED] wrote:

  What I'd like is to use Grails to develop my application, but have it
  use Struts 2 under-the-covers instead of Spring MVC. As far as code
  differences between writing a Spring MVC Grails Controller and a
  Struts 2 Grails Controller - I don't think there needs to be any.

 Hmmm This sounds a lot like what I've been working with for the past
 year sort of. I'm not using Grails, but I have been using Groovy over Struts
 2.

 I really haven't dug into Grails much, only picked over the transactions and
 proxy stuff deep in the framework at one point, but it seems to me that
 Grail is fairly closely wedded to Spring MVC under the covers. At least from
 outward appearances. I think swapping the underlying framework would be a
 lot of work, and would make the framework into something else, so to speak.
 I doubt it could be done without creating incompatibilities.

 Now, if it could be done that would be really cool and I'd probably migrate
 my current project to it to take advantage of the highly integrated stack of
 Grails.

  The problem I'm looking to solve is one where companies are using two
  web frameworks: a dynamic one (Grails) and a static one (Struts 2).

 Yup. Understood. Take a look at: http://code.google.com/p/groovyworks/

 It's young, but it does allow development of pretty much everything in
 Groovy over Struts 2. It's really not hard. You just need an object factory
 that can manufacture objects from Groovy scripts. Then use Spring's
 scripting support for your service beans and DAO's. (The nice thing about
 this setup is you only need to restart if you change an interface or your
 domain model.) Now, with Groovy 1.1's support for annotations you can use
 all the neat stuff that's in S2 and can even do your domain objects in
 Groovy.

 Now, with all of that said I'm interested in what you find when you dig into
 Grails. If looks feasible let me know. I might be able to come up for air
 from this project I've been on and be able to lend a hand.

 Mark
 --
 Mark Menard
 personal: http://www.vitarara.org/
 business: http://www.vitarara.net/


 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [s2] extras-lib (was JUEL plugin (was Roadmap for the core taglib))

2007-11-07 Thread Tom Schneider
I agree, there's many failure modes that aren't being handle well in
the value stack.  Hopefully having more than one implementation will
point to areas that need improvement.

Another issue I ran into with regard to the ParametersInterceptor is
that we are currently filtering anything that has a '#' in it.  This
mean we can never support deferred expressions such as
#{exampleBean.exampleProperty}.  My fix for this was to all anything
that starts with '#{'.

On 11/7/07, Brian Pontarelli [EMAIL PROTECTED] wrote:
 Tom Schneider wrote:
  On 11/6/07, Don Brown [EMAIL PROTECTED] wrote:
 
  Type conversion isn't tied to OGNL in 2.1.  XWork has a new API
  (copied from OGNL) to abstract type conversion.  Of course not all
  EL's support type conversion in the same way, so there may be issues
  down the road.  i18N isn't tied at all to OGNL, so I agree with Chris
  here as well.
 
 
  That's good to hear, I haven't gotten far enough to fully implement
  type conversion at this point, but that is one of the next things I'll
  be working on.
 
 It would definitely be nice to have a bit more robust type conversion
 handling that can differentiate between failed conversion (i.e. 'fred'
 isn't a number dude) and invalid type conversion configuration.

 I did some work on support for attributes within the parameters
 interceptor so that I could pass information like date format and
 currency code to the type converters. The biggest issue I had with this
 was that it was impossible to tell XWork that I had configured an
 invalid date format and to explode nicely with a solid error message.
 So, instead I just log a stack trace to the logs and thrown an
 exception, which XWork interprets as a failed conversion. I'd like to
 see the type converter interface have to well known and checked
 exceptions thrown:

 com.opensymphony.xwork2.conversion.FailedConversionException
 com.opensymphony.xwork2.conversion.ConverterConfigurationException

 These would be caught and handled appropriately by XWork.

 It would also be nice to settle on a good handling for additional
 information for each parameter similar to my attributes handling here:

 http://vertigo-java.googlecode.com/svn/vertigo-core/trunk/src/java/main/org/inversoft/vertigo/struts/interceptor/VertigoParametersInterceptor.java

 -bp


 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [s2] extras-lib (was JUEL plugin (was Roadmap for the core taglib))

2007-11-07 Thread Tom Schneider
Well, Richard Burton is supposed to be working on an MVEL value stack,
so hopefully we'll be able to pit them all against each other. :)
Tom

On 11/7/07, Chris Brock [EMAIL PROTECTED] wrote:

 For the record, I still maintain that it's better :)


 Tom Schneider wrote:
 
  Putting down my work would only motivate me more. :)  That's exactly
  how this was started back in February--Chris Brock was bragging about
  how superior MVEL was and how slow OGNL was.  Well, we'll show him!
  Tom
 
  On 11/7/07, Ian Roughley [EMAIL PROTECTED] wrote:
  It's great that Tom is doing this work, and it wasn't my intent to put
  down the effort.  I guess I was just trying to preempt given some of the
  OGNL threads.
 
  /Ian
 
  Tom Schneider wrote:
   LOL, I didn't know my efforts were going to cause such a raucous. :)
  
   Ted is correct--I started this on Saturday on a whim.  At this point
   it is completely experimental--we have a long ways to go before it is
   even close to usable.  However, I was able to execute a simple
   expression using my value stack, which for me, was a worthwhile
   accomplishment.  I didn't want Don's work to abstract away the value
   stack to be completely wasted, we needed at least one other value
   stack implementation to truly test his changes.  Don did good work,
   but there is still a lot of OGNLisms that have crept into the code
   over time.  It would be nice to find and eliminate these
  
   Ian brings up a good point in that we'll have to decide how to handle
   some things like I18N/type conversion/method invocation.  Not all EL's
   are created equal and OGNL probably is a little more flexible and
   powerful than most.  Then even if we get all that working, what's the
   migration strategy?
   Tom
  
 
  -
  To unsubscribe, e-mail: [EMAIL PROTECTED]
  For additional commands, e-mail: [EMAIL PROTECTED]
 
 
 
  -
  To unsubscribe, e-mail: [EMAIL PROTECTED]
  For additional commands, e-mail: [EMAIL PROTECTED]
 
 
 

 --
 View this message in context: 
 http://www.nabble.com/-s2--extras-lib-%28was-JUEL-plugin-%28was-Roadmap-for-the-core-taglib%29%29-tf4751589.html#a13635524
 Sent from the Struts - Dev mailing list archive at Nabble.com.


 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [s2] extras-lib (was JUEL plugin (was Roadmap for the core taglib))

2007-11-06 Thread Tom Schneider
LOL, I didn't know my efforts were going to cause such a raucous. :)

Ted is correct--I started this on Saturday on a whim.  At this point
it is completely experimental--we have a long ways to go before it is
even close to usable.  However, I was able to execute a simple
expression using my value stack, which for me, was a worthwhile
accomplishment.  I didn't want Don's work to abstract away the value
stack to be completely wasted, we needed at least one other value
stack implementation to truly test his changes.  Don did good work,
but there is still a lot of OGNLisms that have crept into the code
over time.  It would be nice to find and eliminate these

Ian brings up a good point in that we'll have to decide how to handle
some things like I18N/type conversion/method invocation.  Not all EL's
are created equal and OGNL probably is a little more flexible and
powerful than most.  Then even if we get all that working, what's the
migration strategy?
Tom

On 11/6/07, Ted Husted [EMAIL PROTECTED] wrote:
 On Nov 6, 2007 3:00 PM, Ian Roughley [EMAIL PROTECTED] wrote:
  For your comment, I am assuming you are saying the message is - changing
  the EL means changing everything the EL touches, and selecting an EL
  means making a choice on everything the EL touches, correct?

 At this point, JUEL is just something Tom committed to the sandbox,
 like yesterday (literally). We aren't sending any messages to anyone
 else, since I doubt that many of us have had a chance to look at it
 ourselves yet.

 If JUEL turns out to be too much work, then none of us will use it
 ourselves, and it will simply wither away.

 The general idea is that we are building the framework that we want to
 use, and then sharing the wealth with others. But, Job 1 is that it
 has to be the framework that *we* want to use. Evidentially, Tom
 thinks he might want to use a framework that supports JUEL. The next
 question is whether anyone else feels the same way.

 -Ted.

 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [s2] extras-lib (was JUEL plugin (was Roadmap for the core taglib))

2007-11-06 Thread Tom Schneider
On 11/6/07, Don Brown [EMAIL PROTECTED] wrote:
 Type conversion isn't tied to OGNL in 2.1.  XWork has a new API
 (copied from OGNL) to abstract type conversion.  Of course not all
 EL's support type conversion in the same way, so there may be issues
 down the road.  i18N isn't tied at all to OGNL, so I agree with Chris
 here as well.

That's good to hear, I haven't gotten far enough to fully implement
type conversion at this point, but that is one of the next things I'll
be working on.

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [S2] Taglib Exercises Appilcation and ShowCase Expectations

2007-11-04 Thread Tom Schneider
I'm not sure it is practical for a junit test to test all the variations 
of the tags.  Just setting up the expected output would be very 
tedious.  I like the idea of having a taglib showcase to test all the 
tags--I looked at showcase the other day to see if it had this and it 
didn't.  Also, being able to switch themes on the fly would be a good 
thing.  Even in a taglib showcase, we couldn't possibly test every 
single tag variation, however, it would be a nice sanity check above the 
level of test case to verify we didn't totally mess something up.  
(That's always my fear with the ftl templates)


Ted Husted wrote:

Except that I'd have to learn to write them :)

On Nov 4, 2007 7:51 AM, Don Brown [EMAIL PROTECTED] wrote:
  

The junit tests actually have a pretty good set of functional, black
box tests for the tags, although there are holes.  Therefore, I don't
think showing every single tag for the purposes of testing is
necessary.

Kudos for taking up showcase cleanup banner.



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



[s2] Roadmap for the core taglib

2007-11-04 Thread Tom Schneider
Speaking of the core taglib, what ARE we going to do with it.  There's 
been talk of moving them to a separate plugin, reimplementing them in a 
java, etc.  It would be nice to know from a roadmap prespective about 
where the core taglib is headed--I have several plugins that would be 
affected by it.


At a minimum, if we're going to keep the ftl template at all, then I 
would recommend we bring in tabletags.  (At least the paging and sorting 
tags)  Looking at the downloads page for tabletags, there have been over 
7000 downloads over the last year.  That seems significant to me.  The 
table tag itself probably needs a little TLC at the moment, but I think 
the other tags are pretty solid.  I'm also open to looking at other tags 
that should be brought in--again this is contingent on what we decide to 
do with them pesky tags.

Tom

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [s2] Roadmap for the core taglib

2007-11-04 Thread Tom Schneider

Ted Husted wrote:

Don's also been doing some preliminary refactoring in XWork so that
the expression language can be made pluggable, meaning we would also
be able to plugin something else instead of OGNL.

-Ted.
You mean like JUEL? 
http://cwiki.apache.org/confluence/display/S2PLUGINS/JUEL+plugin  :)


Thanks for the info Ted, that helps me out.  So looking down the road we 
might have:

xml configuration or codebehind;
new java taglib or current templating taglib;
freemarker, velocity or JSP;
OGNL, MVEL, or JUEL.

I'm all for choice, but trying to support all those combinations might 
be challenging. I can just imagine the posts on the user list:
Um.. I'm using Struts 2 with the code behind and rest plugin and the 
java taglib in velocity with MVEL and my page doesn't display
I'm not saying we shouldn't persue these endeavors, but I think it's 
helpful to consider things from a new user perspective and decide if 
we're going to support every combination of technology.

Tom

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [s2] JUEL plugin (was Roadmap for the core taglib)

2007-11-04 Thread Tom Schneider
Isn't that what Ted wanted?  A new plug-in a day for 60 days.  :)  I 
have one lined up for tomorrow.

Tom

Don Brown wrote:

Whoa, where did that one come from?  I was just begging for such a
plugin yesterday on #struts from Richard Burton, who is working on an
MVEL one.  I could see Struts 3 == new taglib + JUEL + robust rest and
codebehind.

As for the problem of so many combinations of plugins, I'm all for the
proliferation of plugins, but do think we need to not ship with two
plugins that solve the same problem.  For example, it would be
confusing to ship with two codebehind plugins or two expression
language plugins, especially since the latter could require its own
taglib.  The distribution we ship as official Struts 2 should stay
coherent and focused.

Do


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [PROPOSAL] Merge Able/Code Behind/Zero-Config/SmartURLs into view-behind specification

2007-11-01 Thread Tom Schneider
Looks good to me.  I was going to suggest putting this on the wiki,
but a googlecode project is even better.  So would the code for this
new struts2 plugin live here or in the struts codebase?

On 11/1/07, Ted Husted [EMAIL PROTECTED] wrote:
 Just to followup, I setup a Google Code site as a place to describe
 and design cross-platform technologies that pertain to web application
 development and deployment. For some time now, I've spent half my time
 working in .NET, which probably won't change for another year or two,
 and so working on cross-platform technologies is of great interest to
 me.

 I've extended the initial draft posted here to include the action URI
 to Action Class mappings. While based on SmartURLs and CodeBehind, the
 description goes beyond what either can do right now.

  * http://code.google.com/p/web-alignment-group/wiki/WAG_RFC_001

 Before doing any more work on the description, I'd be very interested
 on feedback as to whether I'm making any sense, or whether the draft
 has turned into opaque gibberish :)

 -Ted.


 On Oct 17, 2007 2:24 AM, Ted Husted [EMAIL PROTECTED] wrote:
  Following up on suggestions made by Don and Brian, I'd like to propose
  that we draft a formal specification describing the logic to be used
  by the (deep-breath) Able/Code Behind/Zero-Config/SmartURLs plugin
  for 2.1. The purpose of the specification would be to better define
  what backward compatibility means, and also to encourage
  implementation of this pattern by other frameworks.
 
  Following is the beginning of an early draft of a proposed
  view-behind specification. (In case anyone is interested, I'm using
  the JSON-RPC specification format as a model.) If there is interest in
  this proposal, I'd suggest we decide whether to complete the
  specification as part of our documentation, or at some other location.
  Of course, people working with other frameworks
  (coughstripes/cough) would be welcome to join in.

 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [S2] Plugins gone wild!

2007-10-22 Thread Tom Schneider
On 10/22/07, Frank W. Zammetti [EMAIL PROTECTED] wrote:
 I'm still not 100% convinced there's a ton of benefit to this plugin
 frankly, other than perhaps visibility, but it's there now in any case.

That how I feel too with most of the plugins I've written.  I wish we
could add a plugin voting/ranking system so we could see the most
popular ones and which ones get the most votes.  This would allow
users to see which ones are high quality and which ones are more beta
plugins.  Most of the eclipse plugin sites I've seen have this type of
functionality.  Might be useful for the struts2 plugin site.

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: A session value is overwrited by demanding a browser.

2007-10-17 Thread Tom Schneider
No because OGNL can access the private Session variable directly.  (I
noticed this behavior when I was fixing a race condition)  It first
tries to call the getproperty(), if that fails, then it will turn on
reflection accessibility and access the variable directly.

On 10/17/07, Jim Cushing [EMAIL PROTECTED] wrote:
 I haven't tested this, but is the problem solved by making your
 getSession() method protected, instead of public? The SessionAware
 interface only requires a public setSession() method. If you haven't
 defined a getSession() method, or if it's already protected, then I
 suggest you file a JIRA ticket (http://issues.apache.org/struts/),
 perhaps with some sample code.

 On Oct 17, 2007, at 9:12 AM, Hisato Killing wrote:

  Hello.
 
  I'm sorry. Information that I had sent seems to have been
  insufficient.
 
  1.This problem is caused in struts 2.0.9 and others perhaps.
 
  In that case, it is assumed that it is as follows.
  i. SomeAction is implements SessionAware.
  ii. And It is defined in struts-default.
  iii. devMode is true or false.
 
  [someValue] of the name of someKey enters in SessionMap when the
  request shown in that URL is processed.
  It is meant that [someValue]  is an array including someValue.
  This causes ClassCastException in case of almost.
 
  [EMAIL PROTECTED]
  It is thought that this only has to be my mistake ,setting etc.
 
  Thanks
 
  -
  To unsubscribe, e-mail: [EMAIL PROTECTED]
  For additional commands, e-mail: [EMAIL PROTECTED]
 


 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [PROPOSAL] Merge Able/Code Behind/Zero-Config/SmartURLs into view-behind specification

2007-10-17 Thread Tom Schneider
First of all, I think Ted did a good job of getting a start on this.
His proposal is a great start that would unify several misc things
that really needed to be unified.  (Especially for 2.1.x where it
would be nice to have a unified approach to these things)

Secondly, our company does the exact same thing that Brian's in that
we have standardized components and I would love to have an open
source standard to use.  However, is that part of what Ted created, or
is this a separate proposal?  I really like the idea of having one
place for xml configuration, whether it be struts config overrides,
JPA class definitions or what-not, but that seems like a separate
issue from what Ted is proposing.
Tom

On 10/17/07, Brian Pontarelli [EMAIL PROTECTED] wrote:
 Looks good. I like the name and most of the concepts. Here's some
 additional thoughts:

 1. If no code component exists and a default is not available, the code
 invocation can be completely by-passed and processing should proceed
 with the view component handling. The caveat here is that this will
 require adding a goal to support for messaging, localization and i18n,
 since this is something that is currently cumbersome.

 Also, the default handling should be spelled out with Index actions and
 all the URL nuances like trailing slashes and such.

 1.1 I'd like to add in a componentization goal here. SmartURLs and
 Vertigo are leveraging a file named META-INF/component.xml (inside JAR
 files) to specify not only all the action packages and the result
 locations for actions and views bundled inside JAR files, but also to
 specify JPA domain classes and other configuration for the component.
 This is HUGE for companies that like to build components and then just
 drop them in to web applications. We have a number of these including
 user admin, CMS, blogs, news, todo, etc. I think that expanding this
 into the specification will help solidify that this architecture can be
 done on Struts2 and that it is a goal of the project.



 Ted Husted wrote:
  Following up on suggestions made by Don and Brian, I'd like to propose
  that we draft a formal specification describing the logic to be used
  by the (deep-breath) Able/Code Behind/Zero-Config/SmartURLs plugin
  for 2.1. The purpose of the specification would be to better define
  what backward compatibility means, and also to encourage
  implementation of this pattern by other frameworks.
 
  Following is the beginning of an early draft of a proposed
  view-behind specification. (In case anyone is interested, I'm using
  the JSON-RPC specification format as a model.) If there is interest in
  this proposal, I'd suggest we decide whether to complete the
  specification as part of our documentation, or at some other location.
  Of course, people working with other frameworks
  (coughstripes/cough) would be welcome to join in.
 
 

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Source and test maven artifacts for struts2

2007-10-08 Thread Tom Schneider
My apologies, I've located
https://issues.apache.org/struts/browse/WW-2028 which addresses this
issue, please disregard my original email.  I'll take a look at this
issue today since I've setup builds that have included source.
Tom

On 10/7/07, Tom Schneider [EMAIL PROTECTED] wrote:
 Is there anyplace where the source and test jars are deployed as part of
 a release?  Looking in the central maven repository and on
 http://people.apache.org/repo/m2-ibiblio-rsync-repository, I only see
 the bin artifact.  I ran into an issue with needing the test artifact
 because I extend a JUnit test to test some custom tags I wrote.
 Deploying the test artifact I could see skipping, however, it seems like
 having the source artifacts available via maven would be a useful
 thing.  (In fact, it is recommended in the Maven artifact upload guide)
 Tom


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [s2] Goal - no experimental code in core for 2.1

2007-10-07 Thread Tom Schneider

+1 for anything that makes configuration easier

Don Brown wrote:

With the latest refactorings in XWork that allow plugins to provide
code that load Packages, I'd like to suggest that we make it a key
design feature of Struts 2.1 that Core includes no code labeled
experimental.

Here is what I imagine it would entail:

1. Move the zero conf code (annotations and code from
ClasspathConfigurationProvider) into the codebehind plugin.

2. Move restful mapper into its own plugin

There are two main general advantages of this from a user perspective:
 1. Code from core can be fully trusted to be deemed of GA quality
 2. Using zero conf and restful features become easier

While the first one is pretty self-explanatory, the second makes sense
when you think about how plugins work.  Currently, to use the zero
conf or restful code, you have to have the right jars, config
settings, and follow poorly documented rules.  If, for example, the
restful code was its own plugin, you could drop the restful jar in and
it would configure your application with the appropriate settings
automatically - disable .action extension, enable slashes in action
names, set the restful mapper, etc.  Right now, it takes some voodoo
magic to get restful and zero conf working right (especially
together), even for me and I wrote most of it :(

By moving the zero conf code into the codebehind plugin, we also make
it easier to maintain, document, and use for developers.  Also, it
makes it easier for other plugins, like SmartURL, to provide an
alternate zero conf implementation.

A different, but related discussion, is how best to provide zero conf
in Struts 2, and honestly, I don't see a clear solution yet.  What is
in core now is ok, SmartURL improves things, but other parts I don't
like as much, so by putting them all on the same playing field, I'd
hope we encourage innovation.

Anyways, back to the main topic, I'd like to get all experimental code
out of core.  Any objections?

Don

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Source and test maven artifacts for struts2

2007-10-07 Thread Tom Schneider
Is there anyplace where the source and test jars are deployed as part of 
a release?  Looking in the central maven repository and on 
http://people.apache.org/repo/m2-ibiblio-rsync-repository, I only see 
the bin artifact.  I ran into an issue with needing the test artifact 
because I extend a JUnit test to test some custom tags I wrote.  
Deploying the test artifact I could see skipping, however, it seems like 
having the source artifacts available via maven would be a useful 
thing.  (In fact, it is recommended in the Maven artifact upload guide)

Tom

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: WW-1399 - converting mailreader to hsqldb

2007-10-05 Thread Tom Schneider
http://openjpa.apache.org/ is an option too.  Seems logical since it
is an apache project.

On 10/5/07, Ted Husted [EMAIL PROTECTED] wrote:
 On 10/5/07, Wes Wannemacher [EMAIL PROTECTED] wrote:
  I am poking around for things I can help with. I came across WW-1399
  and I remember some discussion before on struts-[dev|user] that
  hibernate's license is not compatible with apache's. So, assuming we
  want to use ORM, is there a particular mapper I should look at? I could
  give this a try with cayenne. It isn't as popular, but mostly similar.
  One issue though is that Spring and cayenne don't make much sense, so
  it probably would not include DI...
 
  Anyhow, what are your thoughts? I could be wrong about hibernate, if
  it can be distributed with mailreader, I'll use it.

 Today, I would go with JPA and TopLink (we can distribute TopLink as a
 binary.) See the end of Musachy's tutorial.

  * http://struts.apache.org/2.x/docs/struts-2-spring-2-jpa-ajax.html

 BTW, I have a refactored version of the people example here:

  * https://sq1-struts2.googlecode.com/svn/trunk/articles/people

 In the Shale repository, there is a JPA MailReader implementation, but
 I haven't had a chance to try it out.

  * 
 http://svn.apache.org/viewvc/shale/framework/trunk/shale-apps/shale-mailreader-jpa/

 A good way to go would be to snag the Shale JPA Mailreader classes,
 try them under Toplink, and make whatever changes we need to the
 MailReader to make it work. When Cayenne 3 comes out, we can try
 switching providers, to prove that JPA can be a commodity :)

 As far as the MailReader in general goes, the implementation could use
 an overhaul. The original MailReader DAO is quirky, and so the
 MailReader implementation has to work around the quirks. With a
 streamlined DAO, the MailReader implementation could also be
 streamlined.

 -- HTH, Ted
 Attend Migrating to Ajax at ApacheCon US 2007:
  * http://us.apachecon.com/us2007/program/talk/1883

 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [s2] The death of the .action extension

2007-09-08 Thread Tom Schneider
What kind of strange new world will it be without .action?  I've grown 
so used to it I can't imagine not using it.  So you're saying you would 
have the same url without the .action part?


Now that we have all these options for mapping url's to 
actions/parameters, is there a new recommended approach that developers 
should follow?  Essentially you are getting rid of the old recommended 
webwork approach.  Options are great, but if you can't make heads or 
tails of which way is 'recommended' I think it may lead to confusion.  
(Not to mention more issues when trying support less experienced 
developers)  It would require updating all the docs/examples with the 
new approach.

Tom

Don Brown wrote:

A long time coming, it is now possible (and practical) to get rid of
extensions altogether, hence the subject, the death of the .action
extension.  With WW-2163 [1], Struts can make the distinction between
a setting that has Struts match all URL's, and one that only matches
URLs with no extension, and furthermore, extension and no extension
URLs can co-exist.

Accordingly, I changed the default 'struts.action.extension' setting
from 'action' to 'action,,'  This allows the default-action-ref
element in struts.xml to do what you would expect - let you define an
action to handle directory URLs such as
http://example.com/myapp/mynamespace/

In a future release, maybe 2.2, I'd like to get rid of the .action
extension altogether.  I think one of the key strengths of Struts 2 is
its closeness to the HTTP protocol, and therefore, I think it has
great potential to be a solid REST platform, an architectural style
that leverages the features of HTTP rather than fight them.

Here's to the death of the .action extension! :)

Don

[1] https://issues.apache.org/struts/browse/WW-2163

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [s2] The death of the .action extension

2007-09-08 Thread Tom Schneider

Don Brown wrote:

Right, and that's why I didn't move to kill it off for 2.1.  Give it
some time, let the feature get some exercise, then if all agree, we
could change the default later.  As with any new feature, I'd put it
in a sort of experimental category for at least one major release.
  
So, do you have a final goal in mind for this or are you just working to 
open up options?  I'd be very interested in hearing of the any options 
we have.  Are we moving more towards Rails, or are there other better 
alternatives?


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [s2] Painless migration with WebWork 2 plugin

2007-09-03 Thread Tom Schneider

Nice work Don!

I attempted this a while back, but ran into some issues that I couldn't 
reconcile.  I'll definitely be trying this on our app.

Tom

Don Brown wrote:

I've completed a spike on a Struts 2 plugin for WebWork 2, providing a
drop-in replacement with no code or configuration file changes.  So
far, I've only tested it with simple Spring-based applications, so I'm
sure there are more areas it will need to wrap, but so far, you just
drop in Struts 2 with this plugin to replace WebWork 2.

Since we changed packages for XWork 2, this was actually pretty easy.
In the plugin, I extended relevant interfaces and classes like so:

package com.opensymphony.xwork;
public interface Action extends com.opensymphony.xwork2.Action {}

The plugin then
 * provides a com.opensymphony.webwork.dispatcher.FilterDispatcher class
 * adds support for xwork.xml files (stubbing webwork-default.xml correctly)
 * translates webwork.properties files
 * provides the tags with expected URI and prefix (JSP, Freemarker,
and Velocity).

I hope to try the plugin on more advanced WebWork 2 applications
(Atlassian, my employer, has a couple), so I'm hopeful it can save us
a good amount of work.

http://cwiki.apache.org/S2PLUGINS/webwork2-plugin.html

Don

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [S2] Struts tags for generating html, head and body

2007-08-24 Thread Tom Schneider
I already created a body tag on our webwork project at work (we needed 
the onload event hook)


+1 from me.
Tom

Ted Husted wrote:

Another good use for head or body tags might be to generate a JavaScript hook.

A head tag could also inject the doctype redtape, that we might
otherwise paste into every page.

On 8/24/07, Nils-Helge Garli [EMAIL PROTECTED] wrote:
  

It would be nice having struts tags that generate the html, head
and body sections of the HTML page. These tags could have support
for different renderers, as the url and form tags have, that could
be overriden in plugins like the portlet plugin. So when the tag runs
in a regular servlet container, the tags creates regular html,
head and body tags, but when it runs in a portlet container, it
could be overriden to skip rendering, since portlets should only
generate page fragments.

This would make it easier to migrate webapps to portlet apps, since
you no longer need to remove content from your JSPs, and also make it
easier if you want a Struts 2 application to be able to run in both a
servlet container and a portlet container.

Do you think this would be useful, or is it just unnecessary overhead?
Should we for instance  write guidelines/tutorials on how to use
SiteMesh for this purpose instead?

Nils-H



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Struts 2.0.10 versus 2.1.0

2007-08-22 Thread Tom Schneider
I could see 2 ways of handling this and you'll have to provide your 
input as to which makes more sense:


1. Treat the compressed javascript as a maven artifact and create a 
custom maven mojo and artifact type to handle it.


2. Use the maven antrun plugin or the assembly plugin to create the 
compressed file.  (is it just a zip file?)


Option 2 will be easier to implement, option 1 will be more work, but it 
makes more sense if we'll have to do this type of thing for more 
javascript libraries.  I've done option 2 myself recently, so I can 
provide some tips there.  Option 1 would require a bit more programming 
effort.

Tom

Musachy Barroso wrote:

By the way I forgot to bring this up, the compressed javascript
files(custom Dojo build) is not built using maven, currently I build
them on my machine  and commit them, does anybody know how to automate
that? I added a text file with instructions to the dojo plugin along
with the js file required to build them

  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Struts 2.0.10 versus 2.1.0

2007-08-22 Thread Tom Schneider
Looks to me like the maven antrun plugin would be a good choice for
implementing this:
http://maven.apache.org/plugins/maven-antrun-plugin/run-mojo.html
It would just be a matter of implementing the ant scripts for this in
the plugin's pom.
Tom

On 8/22/07, Musachy Barroso [EMAIL PROTECTED] wrote:
 Here is how to do it:

 http://www.dojotoolkit.org/book/dojo-book-0-4/part-6-customizing-dojo-builds-better-performance/dojo-build-system/creating-cust

 The short version is:

 1. checkout Dojo's code (we can probably just use the code that is
 already in the plugin and add the build scripts)
 2. Create a profile (it is already done)
 3. Execute Dojo's build script with some parameters (pointing to our profile)
 4. Rename the 2 main js files and copy them into the plugin

 musachy

 On 8/22/07, Tom Schneider [EMAIL PROTECTED] wrote:
  I could see 2 ways of handling this and you'll have to provide your
  input as to which makes more sense:
 
  1. Treat the compressed javascript as a maven artifact and create a
  custom maven mojo and artifact type to handle it.
 
  2. Use the maven antrun plugin or the assembly plugin to create the
  compressed file.  (is it just a zip file?)
 
  Option 2 will be easier to implement, option 1 will be more work, but it
  makes more sense if we'll have to do this type of thing for more
  javascript libraries.  I've done option 2 myself recently, so I can
  provide some tips there.  Option 1 would require a bit more programming
  effort.
  Tom
 
  Musachy Barroso wrote:
   By the way I forgot to bring this up, the compressed javascript
   files(custom Dojo build) is not built using maven, currently I build
   them on my machine  and commit them, does anybody know how to automate
   that? I added a text file with instructions to the dojo plugin along
   with the js file required to build them
  
  
 
 
  -
  To unsubscribe, e-mail: [EMAIL PROTECTED]
  For additional commands, e-mail: [EMAIL PROTECTED]
 
 


 --
 Hey you! Would you help me to carry the stone? Pink Floyd

 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [S2] [2.1.x] Bundled Plugins

2007-08-19 Thread Tom Schneider
I disagree with moving the Spring plugin outside of the core set of 
plugins.  I think a lot of people use Spring and it would be a shame to 
not have it as a core feature.  Keep in mind that I think we run a huge 
risk (IMO) of plugins being unmaintained if we set them free, however, 
I'm more than happy to do it for the more fringe plugins that not a lot 
of people use.  I also think the JSF plugin is more of a fringe 
plugin--I'd be curious to know how many people are actually using it in 
production.


There has been no interest whatsoever of anyone helping out on table 
tags.  I knew I wouldn't have the time to work on it after I initially 
created it, but I was hoping other developers would take interest.  That 
hasn't happened.  (I may get some time if we upgrade to struts 2 at 
work)  If we want to integrate it into core, we need developers to 
really run with it and make it real.  Right now it isn't production 
ready--I just haven't spent enough time with it.


Everything else in your list looks good to me.
Tom

Ted Husted wrote:

On 8/18/07, Musachy Barroso [EMAIL PROTECTED] wrote:
  

do you mean to move the plugin out of Struts? Because Dojo is already
on its own plugin in trunk.



My question was whether we wanted to keep Dojo as part of the project,
or move it GoogleCode, along with the YUI plugin. I think some of the
other questions misunderstood where we already are, in that for 2.1.x
Dojo is one of our bundled plugins, like Spring and JasperReports.
Right now the bundled plugin list for 2.1.x is

 * codebehind
 * config-browser
 * dojo
 * jasperreports
 * jfreechart
 * jsf
 * pell-multichart
 * plexus
 * spring
 * struts1
 * tiles

The underlying question is whether we have active committers who
actually *want* to maintain all of these plugins as part of the trunk.

Initially, we dragged most of these along because there were part of
WebWork and 2.0 was the backward-compatibility series. Moving forward,
we might want to be more careful about the plugins that we bundle. One
idea would be to create a Struts Plugin project somewhere, where
third-party plugins could be maintained jointly.

My suggestion would be to retain

 * codebehind
 * config-browser
 * jsf
 * struts1
 * tiles

and add (with the permission of the owners)

 * JSON Plugin
 * Table Tags
 * Smart URLs

And then encourage the remainder be adopted by an independant open
source project (while we keep a snapshot of what we have now in the
Archive).

 * dojo
 * jasperreports
 * jfreechart
 * pell-multichart
 * plexus
 * spring

Ideally, some of the other plugin projects might merge into the
independant Struts Plugin project, making it easier for people to gain
access later if the original author drifts awqay.

Thoughts?

-Ted.

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Struts 1/2 and Logging

2007-07-08 Thread Tom Schneider
So what determines what should be an instance logger and what should be 
a static logger?  From the original article, they recommend creating the 
loggers as needed when logging in a static context.  To me, that implies 
only instance level loggers are allowed globally to a class.  In static 
contexts, you should get the loggers on an as needed basis.

Tom

Paul Benedict wrote:
It doesn't have to be an all or nothing game either. Obviously, even 
in a shared library, instance loggers are not always appropriate. So 
it's definitely on a class by class basis.


Frank W. Zammetti wrote:
FWIW, my opinion would be go ahead and change it... unless someone 
can show where it would cause trouble, I'm in the better safe than 
sorry camp.  I know of a number of instances where I've seen Struts 
installed in a shared way, either at EAR-level or something like 
Tomcat's shared libs directory... I've never heard any trouble 
reported from those cases though to be fair.


I think the performance/memory implications are the only thing that 
might stop you from wanting to do this... perhaps some benchmarking 
is in order?


Frank




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [S2] Heads Up: possible DOS problem

2007-07-05 Thread Tom Schneider

ww:property value=[EMAIL PROTECTED]@currentTimeMillis()}/ works
for me, so I think a remote execution is definitely possible.
(Something like Runtime.exec would probably cause a lot of problems)

Do we need to filter certain classes/methods?  I'm not sure how else
we would solve this--this could allow someone to do some nasty stuff.
Tom

On 7/5/07, Bob Lee [EMAIL PROTECTED] wrote:

On 7/5/07, Ing. Andrea Vettori [EMAIL PROTECTED] wrote:

 The DoS is because you can trigger an infinite loop.


My point is, can you execute arbitrary code on the server? If so, a DoS is
the least of your worries.

Bob



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Portlet plugin

2007-06-11 Thread Tom Schneider

Nils,
This is a great start.  I had wanted to do this myself, but I never 
found the time.  I only took a brief look at the patch, but a few things 
jumped out at me:


1. I'm not sure the UrlRendererFactory is needed.  I believe the whole 
purpose of guice is to not have anymore factories anymore, so guice 
should just inject the necessary UrlRenderer.  (especially if they are 
stateless)


2. As a first step in separating out the url building logic I like how 
you have the form url building seperate from the typical url building.  
I tried to combine these and couldn't find a clean way to resolve the 
differences.


HTH,
Tom


I have finally been able to extract the portlet code into a plugin,
but it required some shortcuts due to couplings between the
Components (URL, Form and it's super classes) and generating the URLs.
But at least all tests pass, and there are no more dependencies to the
portlet API in the core. I have attached the files as patches to the
JIRA ticket (https://issues.apache.org/struts/browse/WW-1645), since
it needs a review and probably some discussion.

Nils-H

On 4/11/07, Nils-Helge Garli [EMAIL PROTECTED] wrote:

I have started the process of moving the portlet code to a plugin. But
any further progress requires the url building abstraction discussed
earlier. What is the status for this code?

Also, I think the code in general would benefit from a common
abstraction of the servlet- and portlet types (request, response,
context etc). It would most certainly reduce the amount of almost
duplicated code needed to operate Struts in a portlet.

Nils-H

On 3/26/07, Ted Husted [EMAIL PROTECTED] wrote:
 The trunk is the correct place (we branched for 2.0.x).

 On 3/25/07, Nils-Helge Garli [EMAIL PROTECTED] wrote:
  Hi!
 
  I want to start looking into moving the portlet support to a plugin,
  but need a little guidance to get started.
 
  - What is the status of refactoring the URL-building, as 
discussed in

  previous mail threads?
  - From what I understand, a hook for injecting a URL builder
  implementation from the plugin must be provided. How is that 
achieved?
  - Is trunk the correct place to work on, or will a 2.1.x branch 
be created?

 
  Nils-H

 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Table Tag With Freemarker Templates

2007-05-31 Thread Tom Schneider

The current version of table tags does use freemarker templates when
rendering a table.
Tom

On 5/31/07, André Faria [EMAIL PROTECTED] wrote:

Hi All,

I am interested in Table Tags Project to apply it resources in a
project with Struts 2, but I'd like to know if you are planning to
implement some functionality to add a freemarker template in the tags
using the theme attribute like in old Struts 2 s:table tag.

Thank's
André Faria
/

/

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [S2] Where's Waldo?

2007-05-18 Thread Tom Schneider
I'm here, I've just been insanely busy with other things for the last 2 
months.  Can you believe they actually want me to write non-open-source 
business code at work?  Absolutely ridiculous. :)


I'm hoping things will slow down a bit now, but I can't make any promises.
Tom

Philip Luppens wrote:

Hmm, same here. Too busy with the new job. I'm still working on
various S2 plugins at nighttime.

As for the rest of the old WW team I know about:
- Rainer: too much work for clients atm
- Rene: on vacation
- Ian: writing book(s)
- Toby: focused on bugfixes for WW atm (has some legacy apps to take 
care of)


Personally, I'd like to know what Nils is doing (he is/was working on
the portlet plugin, but waiting for the URLBuilder), and where Tom is
atm (haven't heard from him in a long time). I suppose everyone is
just a tad too busy or on vacation ..

Cheers,

Phil




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: OGNL performance detrimental to Struts 2

2007-03-24 Thread Tom Schneider
I wrote a struts2 caching implementation of the freemarker templates:  
https://issues.apache.org/struts/browse/WW-1661


Freemarker wouldn't know how to cache the templates as well as struts2 
does since we know how the templates are being used and whether or not 
it is safe to cache them.

Tom

Claus Ibsen wrote:

From the performance tuning page:

Copy the /template directory from the Struts 2 jar in your WEB_APP root.

Freemarker fails to properly cache templates when they are retrieved from the 
classpath. Copying them to the WEB_APP root allows Freemarker to cache them 
correctly. Freemarker looks at the last modified time of the template to 
determine if it needs to reload the templates. Resources retrieved from the 
classpath have no last modified time, so Freemarker will reload them on every 
request.


Isn't it possible to file a JIRA to freemarker so they could improve freemarker 
to let it be able to cache templates loaded from classpath?

I doubt many users know about copying resources from within struts2.jar to 
their own folder. I think the best is that it just works out-of-the-box.
-
Posted via Jive Forums
http://forums.opensymphony.com/thread.jspa?threadID=53086messageID=135504#135504


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: OGNL performance detrimental to Struts 2

2007-03-24 Thread Tom Schneider
Well, there is a small risk of things being cached and a developer 
relying on the behavior of not caching the templates.  However, I think 
those cases will be rare and it would benefit many people.

Tom

Musachy Barroso wrote:
Any reason why this shouldn't be applied on the 2.0 branch instead of 
2.1?


musachy

On 3/24/07, Tom Schneider [EMAIL PROTECTED] wrote:


I wrote a struts2 caching implementation of the freemarker templates:
https://issues.apache.org/struts/browse/WW-1661

Freemarker wouldn't know how to cache the templates as well as struts2
does since we know how the templates are being used and whether or not
it is safe to cache them.
Tom

Claus Ibsen wrote:
 From the performance tuning page:

 Copy the /template directory from the Struts 2 jar in your WEB_APP 
root.


 Freemarker fails to properly cache templates when they are retrieved
from the classpath. Copying them to the WEB_APP root allows 
Freemarker to

cache them correctly. Freemarker looks at the last modified time of the
template to determine if it needs to reload the templates. Resources
retrieved from the classpath have no last modified time, so 
Freemarker will

reload them on every request.


 Isn't it possible to file a JIRA to freemarker so they could improve
freemarker to let it be able to cache templates loaded from classpath?

 I doubt many users know about copying resources from within 
struts2.jarto their own folder. I think the best is that it just 
works out-of-the-box.

 -
 Posted via Jive Forums

http://forums.opensymphony.com/thread.jspa?threadID=53086messageID=135504#135504 




 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]








-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Spring Web Flow Plugin in Maven Repo?

2007-03-14 Thread Tom Schneider
No, you're not missing anything.  I never got around to creating an 
upload request.  Feel free to submit it. :-)  I should have some time 
this weekend to roll another release (with SWF 1.0.1) and upload it to 
maven.

Tom

mraible wrote:

The Spring Web Flow plugin looks like it's in the form of a Maven bundle
ready to upload, but I can't find it in Maven's central repository.  Am I
missing something?

http://code.google.com/p/struts2webflow/downloads/list

Thanks,

Matt
  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Enhancement to Zero Config: Default Success Result

2007-02-28 Thread Tom Schneider

See http://struts.apache.org/2.x/docs/codebehind-plugin.html

The very first line from the docs are:
*
Default results* - The purpose of most Actions is to execute code to 
prepare the data for a specific page. The name of this page is often the 
same as the Action itself.


Is this not what your looking for, or is there more to it?  I've seen 
the Spring MVC support for this and this looks like exactly the same 
functionality to me.  In fact the struts version is more flexible 
because it looks for /NAMESPACE/ACTION-RESULT.jsp as well as 
/NAMESPACE/ACTION.jsp.

Tom

mraible wrote:

Is there a default success result when using Zero configuration?  I'd like to
see this feature added.  Spring MVC has something similar, as does Tapestry.
It's quite nice to simple create a controller, as well as a view without
having to configure anything.

http://www.springframework.org/docs/reference/mvc.html#mvc-coc-r2vnt

Implementation ideas: specify the default directory on the filter, then name
the JSP the same as the URL.

For example, TestAction would expect a test.jsp page.

Specify the default result type should be possible in struts.xml.  Maybe
this setting should go there as well.  


Does the actionPackages configuration belong in struts.xml instead of
web.xml?

Thanks,

Matt
  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [s2] Enhancement to Zero Config: Default Success Result

2007-02-28 Thread Tom Schneider

Guys,
I think the codebehind plugin already supports all this.  (The 
codebehind plugin consists of 1 whole java file!!)  The property for 
default location of jsp's is:


struts.codebehind.pathPrefix

The docs just need to be updated.  Looking at the code, it looks like it 
also supports all result types, not just success or input.


Cheers to Don for covering all the bases. :-)
Tom

David H. DeWolf wrote:



mraible wrote:
Yes, this is what I'm looking for, and I was able to use it 
successfully.
Strangely enough, I couldn't get the @Result annotation to work with 
zero

config.  Is there anything special I need to do for that?


I use it and don't recall anything special.  Do you have errors that 
are occurring? What happens when you try to use it?




One change I'd like to see to the codebehind plugin is the ability to
specify the default location of pages. For example WEB-INF/pages.  Or is
that what the struts.codebehind.defaultPackage constant is for? 


I'd also like to expand support so that all result values can be used 
as post fixes.  Instead of supporting just page-success.jsp and 
page-input.jsp, why not support page-whatevertheresultis.jsp.  Thoughts?




I think it makes sense to combine Zero Config and Code Behind as they 
both

seem to be doing the same thing.  Zero config means no config, and if
there's still an @Result required - that's configuration, no? ;-)


I have a hard time envisioning someone using them separately as well. . .

-D


Thanks,

Matt





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Guice 1.0rc2

2007-02-26 Thread Tom Schneider

There is no pico/nanocontainer support in struts2 at the moment.  (I
don't think it made it over in the merger)  IMO this is best
implemented as an external plugin anyhow.  All external plugins thus
far have used googlecode to host their projects.  If you do create
this plugin, please register your plugin in the plugin registry:
http://cwiki.apache.org/S2PLUGINS/home.html

It shouldn't be too difficult to convert the existing WW support to
struts2, although ironically, you'll have to register it with Guice.
:o)
Tom

On 2/26/07, Philip Luppens [EMAIL PROTECTED] wrote:

On 2/26/07, Konstantin Priblouda [EMAIL PROTECTED] wrote:

 --- Bob Lee [EMAIL PROTECTED] wrote:
 [snip]

 Pico is also integated with WW2 and struts ( if not -
 I can contribute it if you like )

 regards,


Afaik, there's no Pico plugin available for Struts 2. So, yes,
Konstantin, if you're willing to provide us with one and register it
on the Plugin registry, that would certainly be welcome.

Cheers,

Phil
--
iDTV System Engineer
Always code as if the guy who ends up maintaining your code will be a
violent psychopath who knows where you live. - John F. Woods

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Guice 1.0rc2

2007-02-26 Thread Tom Schneider

The architecture between webwork and struts2 has changed.

Every other project that provides the same functionality, (e.g.
Plexus, Spring, etc.) was written as a plugin in Struts2.  Technically
it is possible to use the object factories, interceptors, etc. without
using the plugin architecture but it makes it much more difficult for
end users.  With a plugin, you can just drop it in, do some very
minimal config and go.

On 2/26/07, Konstantin Priblouda [EMAIL PROTECTED] wrote:



If S2 architecture is the same than  WW2, then it is
not necessary to register it as plugin - it's just an
object factory  and couple of filters ( which are
independet of S2/WW )


regards,

[ Konstantin Pribluda http://www.pribluda.de ]
Still using XDoclet 1.x?  XDoclet 2 is released and of production quality.
check it out: http://xdoclet.codehaus.org




Finding fabulous fares is fun.
Let Yahoo! FareChase search your favorite travel sites to find flight and hotel 
bargains.
http://farechase.yahoo.com/promo-generic-14795097

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [s2] Struts 2.0.7 Status

2007-02-25 Thread Tom Schneider



Core Plugins

This is more of a 2.1.x status item, but looking forward, do we want
to bundle so many plugins with the core, or do we want to try and cut
some of these loose somehow? Of course, there is also something to be
said for letting sleeping dogs lie.


I think we should cut some of them loose.  The only question in my mind 
is: if we cut them loose, can we still include them in the core?  
There's probably quite a few plugins that should be included even if we 
cut them loose.  Also, there's probably some projects, like tabletags, 
that is replacing core functionality that should be included in the 
struts distribution itself.  (Once we feel it is of sufficient quality 
of course)


I'm glad everyone is following my trend to use googlecode for external 
projects.  :)  It's actually a really good fit for this kind of stuff 
compared to sourceforge.  I've been using the plugin registry for all my 
documentation since I like Confluence better than the google wiki. :)  I 
hope no one minds.


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [s2] Development Infrastructure (Re: [s2] Struts 2.0.7 Status)

2007-02-25 Thread Tom Schneider



There's a few parts of GoogleCode that are still quirky. I'm
disappointed that the Subversion alerts do not include the DIFFs.
We've had to resort to posting our own daily DIFFs. The immutable
issue descriptions is also awkward. But, the other sites also have
their own quirks too. It does seem like GC is on the right track, so
it's going to remain my own independent open source host of choice for
now. I'm no fan of moin-moin, but it will be interesting to see what
happens with this notion of storing wiki pages under SVN.
I agree that the issue tracking leaves much to be desired compared to 
JIRA, but since my projects aren't real active, I've only had to deal 
with 5 issues total so far.  :-)

Meanwhile, for our next battle, what do we need to do to get a
JiveForum setup for the Struts list somewhere. In the past, the best
way to get something into the ASF infrastructure is to vote with our
feet and host it somewhere else first. Then, we can point and say Yet
it moves!.

For the dev list, there's already something setup at opensymphony:

http://forums.opensymphony.com/forum.jspa?forumID=34

I think it would be trivial to setup the user list.  Then it's just a 
matter of moving it over to an apache server.


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Nightly build script needs updating

2007-02-25 Thread Tom Schneider
The nightly scripts seem to be out of date for struts2.  The 2.0.x build 
is currently building trunk and there is no nightly build for 2.0.x:

http://svn.apache.org/repos/asf/struts/maven/trunk/scripts/nightly/nightly-2.0.x.sh

I'd be happy to update the scripts if someone could enlighten me on the 
proper procedure.  (Modifying the svn isn't the correct procedure 
according to the README.txt)


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Struts 1.4 2.1 sharing localization code

2007-02-22 Thread Tom Schneider
Actually I think the xwork2 i18n code is pretty good.  I would probably 
look at that code as the basis--or at least make sure that we don't 
loose any functionality.  Although there's some areas that need 
work--(hint validators), I thought webwork had pretty good i18n 
support.  Far more flexible and straightforward than Strut1 from what I 
remember. :)

Tom


Don Brown wrote:

Ah, that makes much more sense :)  As for collaborating, I'm all for it,
however in the case of Struts 2, it would happen probably at the XWork 2
layer.  Since this code would be useful to non-Struts projects, 
perhaps it
would be better to move it to Jakarta Commons, say commons-i18n?  I 
believe
that project is still in the sandbox and looking for developers so it 
may be
ripe for new development.  I thought there was another commons project 
that

Struts 1 was always going to move to, commons-resources or something?

Don

On 2/21/07, Paul Benedict [EMAIL PROTECTED] wrote:


Ah. Good email. I didn't realize that my sentence could be read as such,
but now I can see that interpretation. Here's what I meant:

I'd like to propose creating a sub-project (like the annotations) for
localization. Not creating annotations for localization, but a
subproject like you did for annotations.

Is that clearer? Man, sounds confusing still.

Paul

Don Brown wrote:
 For the unaware like me, could you go more into the problem that
 exists in Struts 1 and 2, and the solution that involves these
 annotations?  Just from this message, I'm a bit confused why we would
 use annotations for something like this.

 Don

 On 2/21/07, *Paul Benedict* [EMAIL PROTECTED]
 mailto:[EMAIL PROTECTED] wrote:

 I'd like to propose creating a sub-project like the annotations 
for

 localization. I am not at the point of committing my 1.4 changes,
but
 real important classes are independent of s1 and could be used in
s2.

 This is all theory. I haven't spent enough time looking at s2 to
 figure
 out in-depth its localization strategies are. But I think it's a
 worthwhile effort to look into. Is anyone interested?

 Paul


-
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 mailto:[EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]
 mailto:[EMAIL PROTECTED]









-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



I need struts2 documation wiki karma

2007-02-18 Thread Tom Schneider

Hi, my name is Earl...I need karma.

I have some updates to the struts2 documentation--can someone grant me 
some karma to do so?


Thanks,
Tom

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [ANN] New Struts Committers: Musachy Barroso, Philip Luppens, Tom Schneider, Henri Yandell

2007-02-18 Thread Tom Schneider

I went to an engineering school, we didn't have a school song.  :-)

Musachy Barroso wrote:

bring it on Tom :)

musachy

On 2/18/07, Paul Benedict [EMAIL PROTECTED] wrote:


All new committers must sing their alma mater. Who wants to be first?




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Users guide

2007-02-12 Thread Tom Schneider

Just to add my 2 cents...

I agree with Ted that the wiki is a bad place to do long cohesive
documents.  Would a PDF format be a better choice?

With webwork, what most users had was Jason's/Pat's 'Webwork in
Action' in combination with the online documentation.  This was a
really good combination IMO.  I'd love to see something similar for
Struts2, but without having to buy a book.  (i.e. as part of the core
documentation, maybe not quite as extensive as the book was, only the
first 5-6 chapters were really relevant in getting started)

The other thing I'd like to see is some sort of Developer's/Plugin
Developer's guide.  This is the one area where webwork really didn't
have anything.  (and I mean nothing)  I had to dig through the code to
figure out most of this stuff.  (Not a terrible thing, but something
more would have been helpful)  This is something that I'll be working
on as time permits.
Tom

On 2/12/07, Philip Luppens [EMAIL PROTECTED] wrote:

On 2/12/07, Musachy Barroso [EMAIL PROTECTED] wrote:

  It's also not clear whether the intention is to create new content or
  link to the old.
 I think the idea is just to organize the info in a way that a user new
 to struts 2 can understand. From my personal experience, when I started
 with S2, I couldn't make sense out of the wiki, I had to read WW in
 Action, and after that, the wiki was just great!

Well, the first point is: what belongs in a user guide ? Is it just an
'easier' Developers Guide ? Does it contain examples ? Or rather
tutorials ? Should it contain links to the reference pages ? Isn't the
Developers Guide in fact our Reference Guide ? Should we split it up ?

To be honest, I find it very hard to imagine what a newbie thinks or
expects from a user guide. Does the User Guide take a new user to the
point where he or she can create basic Actions, views (JSP,
Freemarker, Velocity, ..), and set up a basic configuration
(struts.xml) ? In that case, shouldn't a big tutorial be easier ?
The Developers Guide is supposed to give insights into the inner
workings of Struts 2, about extension points (Interceptors, Plugins,
PreResultListeners, ..), but right now, it looks more like the
reference guide.

So, let's decide what guides we want (installation guide, user guide,
developer guide, reference, tutorial, ..), and what the goal/outline
for each guide is.

I admit: the current guide and outline is not for newbies. Part of
Struts success was its excellent Users Guide, something I really want
to see in Struts 2 - because it would greatly impact the success of
Struts 2 amongst new programmers.

But, like we point out below: there are books going to be written (and
being written), so we might leave the authors of those books something
to tell ;-)
All kidding aside: I really like the Hibernate documentation: a simple
getting started example, and a user guide. Plus there's the Hibernate
in action book that lists best practices and designs. Maybe that's a
good example ?


  My suggestion would be to look at the existing content as an
  encyclopedia (or wikipedia), augmented by tutorials and FAQs.
  Personally, I'd suggest putting the effort into expanding the
  bootstrap tutorial, merging it with the CRUD tutorial, making sure all
  the FAQs on the list actually end up in the FAQ, and making the rest
  of the wiki the best encylopedia that it can be. There are also still
  many places where we don't use snippets hard enough, and so the
  content is out of date.

Ideally, the content should indeed be put on one place. Otoh, esp. for
the user guide, I do not expect it to change that much (or much at
all). We aren't suddently going to drop Results, we aren't tossing
away actions, ... etc. More advanced things belong in the Developers
Guide or Reference Guide. Maybe it's a good idea to take a look at the
Architecture Image [1], and decide what should be explained in what
part ? eg. We can briefly explain what interceptors are, and what they
do, but refer to the Reference Guide (which then contains the
snippets) for specific information, and the Developers Guide for
writing your own Interceptor.

 Good point. We could definitely consider that, because I think it would
 be good enough, to get the bootstrap edited and beefed up. The other
 problem would be duplicated documentation which would be hard to
 maintain. Besides, there's got to be a couple of S2 books on the make. Phil?

Yes; afaik, Ian is working on both a book for the 3th quarter of the
year, and a minibook (about 60 pages) is supposed to hit InfoQ nex
month.

  But, we all have to scratch our own itches, and if a book-style user
  guide is your itch, more power to you :)

 Well, I don't like writing at all, but I worry about the newbies :) .

Same here, a good user guide was something that was always postponed
at WW, and something that can definitely make the difference between a
good and a great framework (in terms of success).

I don't mind writing at all, but like I pointed out before: I'm 

Re: [s2] Pluggable URL building proposal

2007-02-11 Thread Tom Schneider
Ok, I've decided to prototype the urlbuilder in tabletags.  (Getting s2 
all converted over would've taken too much time)  So I've checked in the 
basic servlet/portlet url builders here:

http://tabletags.googlecode.com/svn/trunk/tags/src/main/java/com/googlecode/tabletags/urlbuilder/

I'd appreciate any feedback.  Once we've worked out all the kinks, we 
can look at integrating into the full struts2 codebase.

Tom

Tom Schneider wrote:
I am very ashamed to report that I didn't get very far.  (too much 
snow to shovel last weekend)  I was able to analyze what each type of 
url would need, i.e. portlet vs. normal url.  I think our best best is 
to have a data bean that encapsulates non-stardard stuff for each url 
type along with a seperate bean that captures the standard stuff.


Generic stuff:
action
namespace
method
scheme
anchor
includeParams

Portlet specific data:
portletMode
portletUrlType

This is just a start, but it gives you an idea of what I'm thinking.  
I also noticed how asymmetric the PortalURLHelper and the URLHelper 
are.   Most of the refactoring would probably happen in these classes, 
so the final API would probably be something of a mix between the 2.  
Just some random thoughts for you to chew on.  I'll post more if I 
find some time to look into this some more.  I'd like to come up with 
a proposed API for everyone (mostly me and you Don) to review.  Once 
we agree on that, the implementation should be pretty straightforward.

Tom

Don Brown wrote:
I _love_ this idea as it is been something I've wanted to tackle 
myself for a while now.  I'm very interested in your progress, so let 
us know what you find.


Don

Tom Schneider wrote:
Based on the portlet plugin proposal and some work I've been doing 
with the table tags, I thought I would propose a refactor of the URL 
building for struts2.  Right now, struts2 has great support for 
taking on incoming request and mapping it to the core elements of 
the framework (i.e. namespace, action, method, etc.) in the 
ActionMapper interface.  It seems like we should be doing the same 
for building URL's.  This would allow the url tag to be completely 
dumb about how url's are built up.  Right now, the url tag has 
specific logic to determine if the request is a portlet request or 
not and uses PortletUrlHelper or UrlHelper respectively.  If the url 
building was pluggable, we would have a default url builder that 
would be configured to build either portlet url's or regular url's.  
This would allow us to easily extract the portlet support out into a 
separate plugin.  It would also allow 3rd part tags (like table 
tags) transparent, built-in portlet support with almost no effort.  
We could also support other types of url's like Restful urls.  
(Right now, I'm not sure how the url tag supports restful url's)


I'll take a preliminary look at this later today, but I was curious 
if anyone thoughts, pro or con regarding this.

Tom

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]








-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [VOTE] Struts 2.0.5 Quality

2007-02-10 Thread Tom Schneider
Umm, it looks like the spring plugin jar isn't included.  Someone on 
#struts mentioned this and I confirmed it by downloading 
struts-2.0.5-all.zip from the website and it's not in the lib 
directory.  (All the other plugins are there)  Am I crazy or is it 
really missing?

Tom

Ted Husted wrote:

The Struts 2.0.5 test build is now available.

Release notes:
* http://struts.apache.org/2.x/docs/release-notes-205.html

Distribution:
* http://people.apache.org/builds/struts/2.0.5/

Maven 2 staging repository:
* http://people.apache.org/builds/struts/2.0.5/m2-staging-repository/

If you have had a chance to review the test build, please respond with
a vote on its quality:

[  ] Leave at test build
[  ] Alpha
[  ] Beta
[  ] General Availability (GA)

Everyone who has tested the build is invited to vote. Votes by PMC
members are considered binding. A vote passes if there are at least
three binding +1s and more +1s than -1s.

Please remember that a *binding* +1 for GA implies that you intend to
support the release by applying patches and responding to posts to the
user and dev lists.

The vote will remain open for at least 72 hours, longer upon request.

-Ted.

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: {VOTE] Struts Annotations 1.0.1 Quality

2007-02-09 Thread Tom Schneider

Ted Husted wrote:

[  ] Leave at test build
[  ] Alpha
[  ] Beta
[ X ] General Availability (GA)



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Branch 2.0.x and label head 2.1.0(was Re: Struts Release Process (again))

2007-02-07 Thread Tom Schneider

I would argue also that a lot of fixes going into struts 2.0.x haven't made
it back into webwork.  Several issues I resolved in Webwork this weekend
were already fixed in Struts 2.0.x.
Tom

On 2/7/07, Don Brown [EMAIL PROTECTED] wrote:


I'm fine with branching now, but it means that we need to be extra
careful to port fixes to all applicable branches: WebWork 2.2.x (where
applicable), Struts 2.0.x, and Struts 2.1.x.  A lot of fixes have been
going into WebWork 2.2.x that haven't been making it to Struts 2.0.x,
so we need to be doubly careful with a new codebase in the mix.

Don

On 2/7/07, Musachy Barroso [EMAIL PROTECTED] wrote:
 There are a few ajax issues with their patches already on jira. They are
 all simple fixes and could be addressed on 2.0.6 instead of 2.1.

 regards
 musachy

 Ted Husted wrote:
  OK, I created a 2.0.x branch and I'm about to update the POMs. This
  stuff is trivial to do, so if anyone is deadset against a branch now,
  we can redo it easy enough later. Though, I'd be happy to ensure that
  we backport relevant 2.1.x changes to 2.0.x, until we hit a 2.1.x GA.
 
  I've silently bulk edited some 2.0.6 and 2.1.x issues into a lazy list
  for 2.1.0. I don't have my heart set on any of these, so if anyone
  wants to do some early or later, that's fine with me. I just wanted to
  have some type of starting point.
 
  * 2.0.6 TODO
  **
 
https://issues.apache.org/struts/secure/IssueNavigator.jspa?mode=hiderequestId=10763
 
 
  * 2.1.0 TODO
  **
 
https://issues.apache.org/struts/secure/IssueNavigator.jspa?mode=hiderequestId=10766
 
 
  As to 2.1.0 almost all of these deal with three key issues
 
  * Dojo/Ajax plugin
  * Portlet plugin
  * Performance tweaks
 
  Meanwhile, I would like to see an early 2.1.0 release, and a steady
  march to GA there too. Now that we have a stable XWork 2 release
  series, we should be rolling Struts GA releases too.
 
  From another thread, it sounds like XWork is about to roll another
  release. That being the case, I'd like to suggest 15 February for a
  Struts 2.0.6 build. We've had a few changes already, and a XWork
  release is cause enough unto itself.
 
  -Ted.
 
  -
  To unsubscribe, e-mail: [EMAIL PROTECTED]
  For additional commands, e-mail: [EMAIL PROTECTED]
 
 


 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: Branch 2.0.x and label head 2.1.0(was Re: Struts Release Process (again))

2007-02-07 Thread Tom Schneider

On 2/7/07, Ted Husted [EMAIL PROTECTED] wrote:


Phillip filed a number of tickets regarding WebWork fixes, so what we
haven't applied may just be pending. I know there are a couple of WW
patches slated for 2.0.6 (thanks Tom!).



And as soon as my apache account is created, I'll be committing them to
struts2. :-)


Re: [s2] Pluggable URL building proposal

2007-02-05 Thread Tom Schneider
Yes, I've already implemented that piece of it.  The UrlBuilder 
implementation can automatically be injected via the @Inject annotation, 
just like the actionmapper.  Right now my ServletUrlBuilder and 
PortletUrlBuilder use the static UrlHelper and PortletUrlHelper under 
the hood, but eventually we could move that logic into the builders 
themselves.

Tom

Don Brown wrote:
Cool, but please, please, please find some way to avoid a static 
helper class :)  BTW, it would be cool if the urlbuilder would be able 
to automatically discover any other objects that want a shot at the 
URL building process.  See how the TagLibrary or TemplateEngine 
classes are discovered for examples.


Don

Tom Schneider wrote:
Ok, I had a little time tonight to put together a preliminary design 
for the URLBuilder.  Here's what I have so far for the interface:


URLBuilder
+buildURL(CustomAttributes, ActionMapping)  // this method is for 
when an action, namespace, method, etc. is supplied
+buildURL(CustomAttributes, String)  // this method is for when the 
url value itself is provided


My expectation is each builder would use the default ActionMapper 
under the hood.  From an infrastructure standpoint, it would be 
configured and injected the same as the ActionMapper is.


The custom attributes that I've come up with so far are:
CustomPortletAttributes:
RenderRequest, RenderResponse
windowState
portletUrlType
portletMode

CustomServletAttributes:
HttpServletRequest, HttpServletResponse
encodeParams
includeContext
scheme

I'm not exactly sure how we'll build these up.  Either the client 
code of the builder will have to know how to build each type or we'll 
need a static helper class that does most of the work.  I'll probably 
be taking a stab at implementation this weekend.

Tom


Patrick Lightbody wrote:

Tom,
How is this coming along? I imagine that some of this work would 
also relate to the ActionMapper interface, since it does have some 
responsibilities for rendering out URLs. Keep us posted.

-
Posted via Jive Forums
http://forums.opensymphony.com/thread.jspa?threadID=59916messageID=119811#119811 




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [s2] Pluggable URL building proposal

2007-02-01 Thread Tom Schneider
Ok, I had a little time tonight to put together a preliminary design for 
the URLBuilder.  Here's what I have so far for the interface:


URLBuilder
+buildURL(CustomAttributes, ActionMapping)  // this method is for when 
an action, namespace, method, etc. is supplied
+buildURL(CustomAttributes, String)  // this method is for when the url 
value itself is provided


My expectation is each builder would use the default ActionMapper under 
the hood.  From an infrastructure standpoint, it would be configured and 
injected the same as the ActionMapper is.


The custom attributes that I've come up with so far are:
CustomPortletAttributes:
RenderRequest, RenderResponse
windowState
portletUrlType
portletMode

CustomServletAttributes:
HttpServletRequest, HttpServletResponse
encodeParams
includeContext
scheme

I'm not exactly sure how we'll build these up.  Either the client code 
of the builder will have to know how to build each type or we'll need a 
static helper class that does most of the work.  I'll probably be taking 
a stab at implementation this weekend.

Tom


Patrick Lightbody wrote:

Tom,
How is this coming along? I imagine that some of this work would also relate to 
the ActionMapper interface, since it does have some responsibilities for 
rendering out URLs. Keep us posted.
-
Posted via Jive Forums
http://forums.opensymphony.com/thread.jspa?threadID=59916messageID=119811#119811


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [s2] Pluggable URL building proposal

2007-01-31 Thread Tom Schneider

Hey Patrick,
Haven't had time to look at this any further.  Yes, I definitely would build
on top of the ActionMapper stuff--that's already abstracted out so nicely I
didn't even mention it. :)  I might have some time this weekend to dig into
this further.  (I was too busy releasing the first version of table tags
this weekend to look at this)
Tom

On 1/31/07, Patrick Lightbody [EMAIL PROTECTED] wrote:


Tom,
How is this coming along? I imagine that some of this work would also
relate to the ActionMapper interface, since it does have some
responsibilities for rendering out URLs. Keep us posted.
-
Posted via Jive Forums

http://forums.opensymphony.com/thread.jspa?threadID=59916messageID=119811#119811


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: [VOTE] Struts 2.0.4 Quality

2007-01-30 Thread Tom Schneider
I agree with Phil--we need an updated version of OGNL.  Last week I was 
able to reproduce the OGNL race condition under JBoss on windows with 
JDK 1.5.  If it was strictly limited to Websphere 5.1 under 
Linux/Windows, I wouldn't be pushing so hard.  However, it looks like 
it's more widespread than that.  (Phil's patched version of OGNL 
resolved the issue)

Tom

Philip Luppens wrote:

Can a problem in a dependency hold back a GA ? I'm talking about
WW-1615 [1] (OGNL race condition). The bugfix is trivial, but we need
a new release for that. Patrick should have set up Jesse by now (its
new maintainer), so we can expect an official bugfix release rather
soon.

I guess I have some troubles with pushing a GA if such an important
dependency is having a known bug. We're already aware of S2 being
slower than S1, let's not kill whatever performance we have left with
a race condition, even if it's caused by a dependency rather than the
actual framework.

Of course, if this has nothing to do with it, then just disregard this 
message.


Cheers,

Phil

[1] https://issues.apache.org/struts/browse/WW-1615

On 1/30/07, Don Brown [EMAIL PROTECTED] wrote:

+1 for GA.  I've been pretty happy with this build and while there are
certainly things to improve (aren't there always?), I don't see anything
major that should prevent production applications from being built 
upon it.


Even if the final result is beta, will this release finally be put into
the public maven repository?

Don

Ted Husted wrote:
 Since the Struts 2.0.4 build is essentially the 2.0.3 build with Maven
 fixes, I thought we might as well start the vote. If after three days
 anyone needs more time, or we don't have a quorum, then we can just
 leave the vote open for as long as it takes.

 Release notes:
* http://struts.apache.org/2.x/docs/release-notes-204.html
* http://struts.apache.org/2.x/docs/release-notes-203.html

 Distribution:
 * http://people.apache.org/builds/struts/2.0.4/

 Maven 2 staging repository:
* 
http://people.apache.org/builds/struts/2.0.4/m2-staging-repository/


 Once you have had a chance to review the test build, please respond
 with a vote as to its quality:

[ ] Leave at test build
[ ] Alpha
[ ] Beta
[ ] General Availability (GA)

 Everyone who has tested the build is invited to vote. Votes by PMC
 members are considered binding. A vote passes if there are at least
 three binding +1s and more +1s than -1s.

 Please remember that a binding +1 for GA implies that you intend to
 support the release by applying patches and responding to posts to the
 user and dev lists.

 Unless we decide otherwise, a beta vote implies that we will announce
 the build to the user list, to encourage wider testing.

 -Ted.

 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]








-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Fast ValueStack

2007-01-27 Thread Tom Schneider
Oops, the numbers aren't quite as bad as I thought.  The original 
numbers included the cost of compiling the OGNL expression.  If you 
exclude the OGNL compilation the numbers are:


Using OGNL expression: 15 ms
Explicitly calling getText: 0 ms

I knew that compiling the OGNL expression took a long time, but I didn't 
realize it was that long.  I still think there is a benefit to updating 
the way the UIBean does key lookup.  At a minimum it will make the Text 
and other UIBeans more consistent and there is a slight performance benefit.


I'm glad you resolved your issue.  I knew about the other property, but 
I normally don't set that one explicitly--so I didn't think to mention 
it.  :)  That definitely explains the huge numbers.

Tom


David H. DeWolf wrote:
Nice, that seems in line with what I'm seeing as well now.  I still 
think this is worth improving, as those 5ms can add up on larger forms.


Tom Schneider wrote:

Well, I guess I was feeling more ambitious than I thought.

I wrote a simple junit test (below) that tests the 2 techniques for 
retrieving I18N text.  My numbers for 100 iterations were:

Using OGNL expression: 476 ms
Explicitly calling getText: 0 ms

Yikes!!! There is quite a difference between the two.  The OGNL 
version takes 5 ms/request compared to almost nothing for the 
explicit call.  It looks like it would be very beneficial to 
reimplement the UIBean key lookup code based on the Text 
component-style of text lookup. 


Agreed.  I've created:

https://issues.apache.org/struts/browse/WW-1681


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Fast ValueStack

2007-01-26 Thread Tom Schneider

David,
See https://issues.apache.org/struts/browse/WW-1661
and
http://wiki.opensymphony.com/display/WW/Performance+Tuning (particularly the
freemarker entries)

By just adding the freemarker.properties and copying all the templates to
the webapp directory we were able to resolve all of our freemarker
performance issues.  (or at least get the page render times down to a point
where they weren't an issue for us)

We were using the simple theme, so most of our text output uses the ww:text
tag--we did not have to use %{getText(...)} at all in our JSP's.  I'm not
sure if it's doing the same thing under the hood, but you might want to
experiment with that.  I would say, make the freemarker changes, then see
what kind of times you are getting.  We were able to get all our pages to
render in about 50-150 ms.  (about 100-200 ms total page load time)
Originally we were seeing about 150-300+ ms render time for the pages.
(without the caching, the numbers were much more sporadic)
Tom

On 1/26/07, David H. DeWolf [EMAIL PROTECTED] wrote:


Well, I hope I'm wrong, and have only done some initial tests so far,
but it seems to me that there are two major issues causing our
slugishness.   The first seems to be OGNL and the second seems to be
freemarker templates.

By simply replacing the default value stack with the version Bob posted,
I realized a gain of about 100-200ms per request on some fairly simple
pages.   The real kicker is when I remove the method invocations
(%{getText('')})  - this results in a 1100-1200ms/request gain (an
average of about 100ms per method invocation) and drops my total request
time to well under a second.

That's why I'm thinking about looking at method processing.

What did you find to be your culprit?  Anything ww/struts related?

David


Tom Schneider wrote:
 Hey David,
 Are you finding the existing ValueStack to be impacting performance?  I
 recently wrapped up a week of tweaking our webwork app and I did some
 testing of the OGNL expressions and that was definitely not where our
 performance issues were.  If OGNL is an issue for you, I'd be curious to
 know how you are using OGNL and maybe try and figure why it's not
 performing
 well for you.  (Based on a conversation with Phil, I confirmed that OGNL
 expressions where being cached at a JVM level in xwork--so most of the
 expressions should be running as compiled expressions)  For example, if
you
 could come up with some example code that you can share with us that
 performs poorly with the existing OGNL implementation.

 As far as other options, Jesse (from Tapestry) has created some patches
for
 OGNL that should definitely improve the performance.  Checkout
 http://forums.opensymphony.com/thread.jspa?threadID=59785tstart=-1 for
 details.  We're working on getting the OGNL project up and running again
so
 at some point these should make it into a future release.
 Tom

 On 1/26/07, David H. DeWolf [EMAIL PROTECTED] wrote:

 I'm going to be looking into optimizing the performance of the
 ValueStack and because of the recent conversations regarding OGNL and
 other options, I anticipate that others may have some ideas.

 I've ripped off the custom stack that Bob posted to the list a couple
of
 a weeks ago, and have realized significant gains using it, however,
 because it only optimizes simple properties, I still think there's a
lot
 of room for improvement. Specifically, method invocations are very
 expensive and happen to be used often in processing the components -
 especially if you use i18n features (getText()), etc...

 I think I'm going to start by looking at MVEL, what other ideas do
 people have?


 David


 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: Fast ValueStack

2007-01-26 Thread Tom Schneider

David H. DeWolf wrote:



Tom Schneider wrote:

David,
See https://issues.apache.org/struts/browse/WW-1661
and
http://wiki.opensymphony.com/display/WW/Performance+Tuning 
(particularly the

freemarker entries)

By just adding the freemarker.properties and copying all the 
templates to

the webapp directory we were able to resolve all of our freemarker
performance issues.  (or at least get the page render times down to a 
point

where they weren't an issue for us)


Unfortunately, I've tried both the props and copying the templates and 
am still having the issues.  I assume the big prop you're talking 
about is template_update_delay.  Any others you found useful for 
performance?
The big thing for us was moving the freemarker templates to the war, 
rather than letting them get loaded via the classpath.  It seems that if 
you let the templates get loaded via the classpath rather than the 
filesystem, then freemarker has no last modified time to check to see if 
it needs to reload it, so it reloads and reparses the template every 
time.  If the template is available via the filesystem, it has a last 
modified time to check and then the caching can work as expected.  The 
template_update_delay is just a setting that controls how long 
freemarker will go before it will explicitly reload the template 
regardless of the last modified time.  Setting this property helped, but 
is was only an incremental increase to performance.  You must do both to 
realize the greatest benefits.  (In fact the template_update_delay is 
useless if the templates are being loaded from the classpath)  Those are 
the only 2 tweaks I made to the freemarker stuff to get it to perform well.




We were using the simple theme, so most of our text output uses the 
ww:text
tag--we did not have to use %{getText(...)} at all in our JSP's.  I'm 
not

sure if it's doing the same thing under the hood, but you might want to
experiment with that.  I would say, make the freemarker changes, then 
see
what kind of times you are getting.  We were able to get all our 
pages to

render in about 50-150 ms.  (about 100-200 ms total page load time)
Originally we were seeing about 150-300+ ms render time for the pages.
(without the caching, the numbers were much more sporadic)


Thanks for the tip. I'm using the xhtml theme and will do some 
benchmarking between the two.  I've looked further into the method 
invocation/getText issue and I think it's real, though I'm wondering 
why it hasn't been reported before considering how significant it is.


The 50-150/100-200 ms times are exactly what I'm looking for.  I'm 
currently seeing 1200-2400 when I have 15-20 form fields using 
getText.  As soon as I take out the method invocations and use the 
optomized OGNL stack, I drop down to 300.
 Yikes, that doesn't seem right at all. :)  Unless you're rendering 
a lot of UI tags, even the 300 seems high.  If OGNL was truly the issue, 
it should be relatively easy to generate a junit test that simulates 
what is going on in OGNL when you make those getText calls.  Once you 
have that I don't think it would be too difficult to either use a 
profiler or instrutment the code to figure out exactly where in OGNL all 
that time is being spent.  There might be a simple fix for this issue.  
(Or at least we could try some of the performance patched code)


The other thing to check is to make sure devmode is off.  With devmode 
on, the resource bundles will be reloaded quite offend vs. not being 
reload at all with devmode off.  That could definitely be a culprit if 
the getText calls are taking so long.


That's all I can think of at the moment.  Let us know if you make any 
progress--I've been in OGNL enough over the last month to be pretty 
familiar with it.  (There was a race condition that I discovered that 
was a pain to track down--we finally reproduced this under JBoss so I 
hope we get an official OGNL release with this patched soon)

Tom

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Fast ValueStack

2007-01-26 Thread Tom Schneider

From UIBean.java:

   if (this.key != null) {

  if(this.name == null) {
   this.name = key;
   }

   if(this.label == null) {
   this.label = %{getText('+ key +')};
   }

   }

Looks like it's doing exactly the same thing. :(

Even more interesting, look what's going on in the Text.java UI component:

   for (Iterator iterator = getStack().getRoot().iterator();
iterator.hasNext();) {
   Object o = iterator.next();

   if (o instanceof TextProvider) {
   TextProvider tp = (TextProvider) o;
   msg = tp.getText(actualName, defaultMessage, values, stack);

   break;
   }
   }

No wonder I didn't see any performance issues here and David did--this 
definitely looks like it would be faster. :)  We should probably adopt 
this model of looking up text in the UIBean class when a key is provided 
as it might speed things up.  I'd love to see some before/after 
numbers.  This might be a tweak you want to apply locally and see if 
there's a performance gain.  (I'll post some if I find some time this 
weekend)

Tom


Ted Husted wrote:

On 1/26/07, David H. DeWolf [EMAIL PROTECTED] wrote:

pages.   The real kicker is when I remove the method invocations
(%{getText('')})  - this results in a 1100-1200ms/request gain (an
average of about 100ms per method invocation) and drops my total request
time to well under a second.


The tags now have a key attribute that can be used in place of the
getText OGNL expression.

I'd be curious to know if

s:textfield key=lastName /

runs faster than

s:textfield label=%getText('lastName') name=lastName /

If so, I wonder if there other places where we could eliminate common
OGNL statements by adding functionality to the tags.

-Ted.

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Fast ValueStack

2007-01-26 Thread Tom Schneider

Well, I guess I was feeling more ambitious than I thought.

I wrote a simple junit test (below) that tests the 2 techniques for 
retrieving I18N text.  My numbers for 100 iterations were:

Using OGNL expression: 476 ms
Explicitly calling getText: 0 ms

Yikes!!! There is quite a difference between the two.  The OGNL version 
takes 5 ms/request compared to almost nothing for the explicit call.  It 
looks like it would be very beneficial to reimplement the UIBean key 
lookup code based on the Text component-style of text lookup.  I think 
the key attribute is a much cleaner way of specifying label text anyway 
so it's good to give users an incentive to use it. :)


Tom

/ start source code **/
package example;

import java.util.Iterator;

import junit.framework.TestCase;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.TextProvider;
import com.opensymphony.xwork2.util.OgnlValueStack;

public class TestOgnl extends TestCase {

   public void testOgnl() {
   TestAction action = new TestAction();
   OgnlValueStack stack = new OgnlValueStack();
   stack.push(action);
   String value = null;
   long start = System.currentTimeMillis();
   for(int i = 0; i  100; i++) {
   value = stack.findString(getText('key'));
   }
   long end = System.currentTimeMillis();
   assertEquals(value, value);
   System.out.println((end - start));
   start = System.currentTimeMillis();
   for(int i = 0; i  100; i++) {
   value = findString(stack, key);
   }
   end = System.currentTimeMillis();
   System.out.println((end - start));
   assertEquals(value, value);
   }

   protected String findString(OgnlValueStack stack, String key) {
   for(Iterator iterator = stack.getRoot().iterator(); iterator
   .hasNext();) {
   Object o = iterator.next();

   if(o instanceof TextProvider) {
   TextProvider tp = (TextProvider) o;
   return tp.getText(key);
   }
   }
   return null;
   }
}

class TestAction extends ActionSupport {

   @Override
   public String getText(String arg0) {
   if(key.equals(arg0)) {
   return value;
   }
   return null;
   }

}
/ end source code **/

Ted Husted wrote:


The tags now have a key attribute that can be used in place of the
getText OGNL expression.

I'd be curious to know if

s:textfield key=lastName /

runs faster than

s:textfield label=%getText('lastName') name=lastName /

If so, I wonder if there other places where we could eliminate common
OGNL statements by adding functionality to the tags.

-Ted.

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [s2] Pluggable URL building proposal

2007-01-23 Thread Tom Schneider
I am very ashamed to report that I didn't get very far.  (too much snow 
to shovel last weekend)  I was able to analyze what each type of url 
would need, i.e. portlet vs. normal url.  I think our best best is to 
have a data bean that encapsulates non-stardard stuff for each url type 
along with a seperate bean that captures the standard stuff.


Generic stuff:
action
namespace
method
scheme
anchor
includeParams

Portlet specific data:
portletMode
portletUrlType

This is just a start, but it gives you an idea of what I'm thinking.  I 
also noticed how asymmetric the PortalURLHelper and the URLHelper are.   
Most of the refactoring would probably happen in these classes, so the 
final API would probably be something of a mix between the 2.  Just some 
random thoughts for you to chew on.  I'll post more if I find some time 
to look into this some more.  I'd like to come up with a proposed API 
for everyone (mostly me and you Don) to review.  Once we agree on that, 
the implementation should be pretty straightforward.

Tom

Don Brown wrote:
I _love_ this idea as it is been something I've wanted to tackle 
myself for a while now.  I'm very interested in your progress, so let 
us know what you find.


Don

Tom Schneider wrote:
Based on the portlet plugin proposal and some work I've been doing 
with the table tags, I thought I would propose a refactor of the URL 
building for struts2.  Right now, struts2 has great support for 
taking on incoming request and mapping it to the core elements of the 
framework (i.e. namespace, action, method, etc.) in the ActionMapper 
interface.  It seems like we should be doing the same for building 
URL's.  This would allow the url tag to be completely dumb about how 
url's are built up.  Right now, the url tag has specific logic to 
determine if the request is a portlet request or not and uses 
PortletUrlHelper or UrlHelper respectively.  If the url building was 
pluggable, we would have a default url builder that would be 
configured to build either portlet url's or regular url's.  This 
would allow us to easily extract the portlet support out into a 
separate plugin.  It would also allow 3rd part tags (like table tags) 
transparent, built-in portlet support with almost no effort.  We 
could also support other types of url's like Restful urls.  (Right 
now, I'm not sure how the url tag supports restful url's)


I'll take a preliminary look at this later today, but I was curious 
if anyone thoughts, pro or con regarding this.

Tom

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Feature to manage conversational state

2007-01-22 Thread Tom Schneider

Actually http://cwiki.apache.org/S2PLUGINS/spring-webflow-plugin.html is the
latest and greatest with regard to SWF integration.  Also, if you're looking
for session type managment, checkout the scope plugin:
http://cwiki.apache.org/S2PLUGINS/scope-plugin.html.  (This is in the
sandbox, I haven't looked at the code yet so I'm not sure how far along it
is)
Tom

On 1/22/07, Mark Menard [EMAIL PROTECTED] wrote:


On 1/22/07 10:36 AM, Chris Wash [EMAIL PROTECTED] wrote:

 Hi,

 I was wondering if any features are on the horizon to help a user
 manage conversational state, a la Seam's conversational scope, or
 Beehive's stateful pageflow, or a Page session in NetDynamics.

 I found an implementation of one out there with a quick Google,
 (http://www.vitarara.org/cms/node/84) but I feel this is something
 that has been on the back-burner with traditional MVC frameworks for
 too long.  It's too easy to get this wrong and is something that can
 be much easier to manage with some simple help at the framework level.
 Also, I find the natural caching mechanism and cleanliness of state
 that this approach provides are elegant solutions to tough
 state-management problems that are frequently the root of evil in web
 applications.

Hi Chris,

I agree that good conversation management is important. I am using the
interceptor that you found above. I have submitted it as a patch to S2,
but
my thought lately have been just to publish it as a plugin for Struts 2.
With the Struts 2 plugin system it is unnecessary to have everything be in
the mainline distribution.

Another thing you might want to look at for conversation management is
Spring Web Flow. There is an open JIRA ticket for this.
(https://issues.apache.org/struts/browse/WW-1525)

Mark

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




[s2] Pluggable URL building proposal

2007-01-21 Thread Tom Schneider
Based on the portlet plugin proposal and some work I've been doing with 
the table tags, I thought I would propose a refactor of the URL building 
for struts2.  Right now, struts2 has great support for taking on 
incoming request and mapping it to the core elements of the framework 
(i.e. namespace, action, method, etc.) in the ActionMapper interface.  
It seems like we should be doing the same for building URL's.  This 
would allow the url tag to be completely dumb about how url's are built 
up.  Right now, the url tag has specific logic to determine if the 
request is a portlet request or not and uses PortletUrlHelper or 
UrlHelper respectively.  If the url building was pluggable, we would 
have a default url builder that would be configured to build either 
portlet url's or regular url's.  This would allow us to easily extract 
the portlet support out into a separate plugin.  It would also allow 3rd 
part tags (like table tags) transparent, built-in portlet support with 
almost no effort.  We could also support other types of url's like 
Restful urls.  (Right now, I'm not sure how the url tag supports restful 
url's)


I'll take a preliminary look at this later today, but I was curious if 
anyone thoughts, pro or con regarding this.

Tom

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [S2] Freemarker Confusion

2007-01-20 Thread Tom Schneider

Joe,
${error} being null would imply that you have an item in the action 
errors Collection that is null.  (e.g. {Error1, Error2, null, 
Error4})  It seems like that would be an issue that occurs as the 
errors are being populated.  (I can't think of a valid use case where 
you would have a null error message.)


In spite of that, you could modify the template to handle this more 
gracefully using the default function:

 lispan class=errorMessage${error?default()}/span/li

In general, I think there is room for improvement in the UI tags error 
handling/reporting.  I've already submitted patches for null handling in 
the select tags--this is just another instance were nulls slip through 
the cracks.

Tom

Joe Germuska wrote:
I've ran into an odd problem of my own and while I'm troubleshooting 
it, I'm
hitting some problems or confusion with Freemarker as it is used for 
the S2

UI tags.  Can anyone help me understand this better?

I was getting a big yellow and red Freemarker trace in my rendered page
because an ${error} expression yielded null when using s:actionerror.
I'm assuming this is the result of an uncaught NullPointerException being
caught by Struts2, as the message for NPEs is often itself null.  I 
actually
haven't yet figured out where this logic is, so question 1 is which 
class

is actually catching my exception and routing to an 'error' page?

Then, it seems like our templates should be prepared for the 
possibility of
a null message, especially if they are being invoked when an 
unexpected NPE

is caught -- a not unlikely scenario.

So I found this page of Freemarker documentation explaining how to 
deal with

empty values:

http://freemarker.sourceforge.net/docs/dgui_template_exp.html#dgui_template_exp_missing 



except that it doesn't seem to apply to the version of Freemarker (2.3.4)
that we're using.  They're only up to 2.3.8 and they make a big fuss 
about

nulls -- can this be new just in those minor releases?  Or is there
something I should understand about why those rules don't apply to
Freemarker as it is used in S2?  I get an error when I try to use the 
syntax

for handling missing values
 ${error!null}
and the syntax for testing for nulls
 ${error??}

What am I missing?

After I get all that cleared up, the last question is whether or not we
ought to make a change to template/simple/actionerror.ftl so that it 
handles
this gracefully.  I guess I already think the answer is yes, and I'd 
do it

myself, except apparently I haven't found Freemarker syntax documentation
which is right for our environment.

Thanks
 Joe




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [S2] Freemarker Confusion

2007-01-20 Thread Tom Schneider
No, not overkill at all.  I like that better than my empty string.  (The 
select tag should probably be updated to output something like that for 
null keys and null values)

Tom

Joe Germuska wrote:

Tom:

Thanks for your help...  I see now that the syntax I was trying to use 
was

added in Freemarker 2.3.7

http://freemarker.sourceforge.net/docs/versions_2_3_7.html

Now... is an empty string the right result?  maybe ${error?default(!--
null error --)} ?

is that overkill?

Joe

On 1/20/07, Tom Schneider [EMAIL PROTECTED] wrote:


Joe,
${error} being null would imply that you have an item in the action
errors Collection that is null.  (e.g. {Error1, Error2, null,
Error4})  It seems like that would be an issue that occurs as the
errors are being populated.  (I can't think of a valid use case where
you would have a null error message.)

In spite of that, you could modify the template to handle this more
gracefully using the default function:
  lispan class=errorMessage${error?default()}/span/li

In general, I think there is room for improvement in the UI tags error
handling/reporting.  I've already submitted patches for null handling in
the select tags--this is just another instance were nulls slip through
the cracks.
Tom

Joe Germuska wrote:
 I've ran into an odd problem of my own and while I'm troubleshooting
 it, I'm
 hitting some problems or confusion with Freemarker as it is used for
 the S2
 UI tags.  Can anyone help me understand this better?

 I was getting a big yellow and red Freemarker trace in my rendered 
page
 because an ${error} expression yielded null when using 
s:actionerror.

 I'm assuming this is the result of an uncaught NullPointerException
being
 caught by Struts2, as the message for NPEs is often itself null.  I
 actually
 haven't yet figured out where this logic is, so question 1 is which
 class
 is actually catching my exception and routing to an 'error' page?

 Then, it seems like our templates should be prepared for the
 possibility of
 a null message, especially if they are being invoked when an
 unexpected NPE
 is caught -- a not unlikely scenario.

 So I found this page of Freemarker documentation explaining how to
 deal with
 empty values:


http://freemarker.sourceforge.net/docs/dgui_template_exp.html#dgui_template_exp_missing 




 except that it doesn't seem to apply to the version of Freemarker 
(2.3.4

)
 that we're using.  They're only up to 2.3.8 and they make a big fuss
 about
 nulls -- can this be new just in those minor releases?  Or is there
 something I should understand about why those rules don't apply to
 Freemarker as it is used in S2?  I get an error when I try to use the
 syntax
 for handling missing values
  ${error!null}
 and the syntax for testing for nulls
  ${error??}

 What am I missing?

 After I get all that cleared up, the last question is whether or 
not we

 ought to make a change to template/simple/actionerror.ftl so that it
 handles
 this gracefully.  I guess I already think the answer is yes, and I'd
 do it
 myself, except apparently I haven't found Freemarker syntax
documentation
 which is right for our environment.

 Thanks
  Joe



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]








-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Struts 2.0 Performance

2007-01-19 Thread Tom Schneider
Obviously you picked up on my probing questions on the chat. :)  Yes--we 
use JSP's with FTL templates for the tags.  It only recently occurred to 
me that the caching would need to be different for the FTL tag templates 
vs. FTL results.  I like this proposal--it would keep the user from 
having to worry about any of this.  Thats a good thing.  (And arguable 
this type of caching should have been in place already, IMO)


The other thing I wanted to mention is that I think a missing template 
cache would also be a good idea.  (Phil and I discussed this)  The idea 
is that right now there is a penalty for looking for a template, only to 
find that it doesn't exist and falling back to the parent theme 
template.  Instead, if we find that a template is missing, we'd put that 
template name into a cache of all the missing template.  Next time we 
look for that template, we'd check the missing template cache and find 
it in there and avoid the cost of looking for a template that doesn't exist.


These 2 things would completely eliminate the 3+ days I spent 
'optimizing' our WW app--so I think it would be very worthwhile 
investment.  (I'll gladly pitch in once we've wrapped up our performance 
testing)

Tom

Philip Luppens wrote:


I'd like to pick in on this one :-)

Basically, there are two sides: we have the 'internal' Freemarker
rendering for UI components, and we have the Freemarker result, which
both share the same caching/template loading/.. . Now, as Tom said,
the defaults are not so good (for the internal UI rendering). Not only
does Freemarker have a default delay of just 5 seconds, but it also
doesn't use its strong reference cache. [2]

We can choose to split up the configuration for internal (UI
components) and external (results) rendering, where we have a infinite
caching for the internal use, and freemarker.properties - adaptable
settings for external use, with better default settings when not in
development mode.

In my opinion, users should not have to worry about the internal
rendering when just using the framework, unless they set devMode on
(in which case constant reloading is allowed, and even required), so
we should set the default settings accordingly.

Thoughts ?

Phil

[1] https://issues.apache.org/struts/browse/WW-1654
[2] 
http://fmpp.sourceforge.net/freemarker/pgui_config_templateloading.html






-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Struts 2.0 Performance

2007-01-19 Thread Tom Schneider

Well, I went ahead and implemented this tonight:
http://issues.apache.org/struts/browse/WW-1661
http://jira.opensymphony.com/browse/WW-1417

It turns out that FreemarkerTemplateEngine.java is only used by the UI 
tags.  The freemarker result hooks into freemarker via the 
FreemarkerManager.  I thought about implementing the redirect cache for 
the UI tags, but the missing template cache was so simple that trying to 
implement the redirect cache would have complicated the code.  (I don't 
think there's much of a performance difference one way or the other)  I 
will be testing this code more fully on Monday.


Even though we only wanted to implement this caching on the UI tags side 
of things, it may be beneficial to implement a similar cache for the 
freemarker results.  Especially if the freemarker templates are being 
loaded from the classpath--freemarker will reread and parse the 
templates for every request!  (assuming it works the same as the UI tags)


Tom


Philip Luppens wrote:

On 1/19/07, Tom Schneider [EMAIL PROTECTED] wrote:

Obviously you picked up on my probing questions on the chat. :)  Yes--we
use JSP's with FTL templates for the tags.  It only recently occurred to
me that the caching would need to be different for the FTL tag templates
vs. FTL results.  I like this proposal--it would keep the user from
having to worry about any of this.  Thats a good thing.  (And arguable
this type of caching should have been in place already, IMO)

The other thing I wanted to mention is that I think a missing template
cache would also be a good idea.  (Phil and I discussed this)  The idea
is that right now there is a penalty for looking for a template, only to
find that it doesn't exist and falling back to the parent theme
template.  Instead, if we find that a template is missing, we'd put that
template name into a cache of all the missing template.  Next time we
look for that template, we'd check the missing template cache and find
it in there and avoid the cost of looking for a template that doesn't 
exist.


Discuss ? You said it, I nodded and punched myself in the head for not
thinking about it :-) However, allow me to ramble on a bit more - feel
free to stop me at any time:

About the cache-none cache: is there an obvious reason (I'm sure there
is) why we cannot use some sort of 'redirect cache' - where an invalid
template request would result in the correct template getting returned
(eg. /template/custom-theme-which-overrides-parent/textfield.ftl would
return the template for /template/parent-theme/textfield.ftl or even
/template/base-theme/textfield.ftl) - multiple keys for the same cache
value. It would reduce 3 cache requests to 1, but it might result in
more work, or unnecessarely complicate things.



These 2 things would completely eliminate the 3+ days I spent
'optimizing' our WW app--so I think it would be very worthwhile
investment.  (I'll gladly pitch in once we've wrapped up our performance
testing)
Tom


Cheers,

Phil




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Struts 2.0 Performance

2007-01-18 Thread Tom Schneider
One of the possibilities I was discussing with Phil yesterday was to 
implement freemarker caching on the WW side of things--just like we do 
with OGNL.  In WW if we're not in devMode, then I think its safe to say 
that we can read the template once and never reread it.  This would 
eliminate the need to move the ftl files out of the jars and also 
eliminate the penalty of not having an ftl files in your own custom 
theme.  This could (should) also be moved in struts2 as well.  That 
way,  in non-devMode we would get the best performance we can, out 
-of-the-box.  (It certainly would have saved me a lot of effort--that 
was where all of our performance woos came from)

Tom

Ted Husted wrote:

Even though this is for WW, almost all of it is applicable to Struts 2.


This is a key phrase. There are a lot of very successful WW
deployments out there, with the same performance levels.

We really need to setup our own benchmarks, so that we can run them
with the templates deployed. I'd love to do this myself, but I'm
totally time-deprived right now.


Eventually we'll move this to S2 and update it, but so few people are
using Struts 2 right now, I think this is adequate.


That's going to change quite quickly. Even though we're still in beta,
people are already posting jobs for S2. Even though the benchmarks
might not tell the whole story, narrowing the cycles would make it
easier for more people to adopt S2 (And hopefully some of those will
lend us a hand. Even with the merge, we still don't have more active
committers than we had a year ago.)

-Ted.




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Struts 2.0.3 status

2007-01-17 Thread Tom Schneider

Someone wasn't paying attention.  :)

If we need to do bug fixes on 2.0.3, we'll branch off the tag--otherwise 
we won't create the branch.  Trunk became 2.1.x after the 2.0.3 tag.

Tom

Don Brown wrote:
I didn't see a branch for 2.0.x  Are we going to create it right 
before we commit big 2.1.x features?  I like not having the branch for 
now, as I'm mostly working on bug fixes that should go into 2.0.4


Don

Ted Husted wrote:

I'm still not setup to sign the Maven artifiacts. I'm preparing for a
trip, and I can't be sure that I'll have time to look at it before I
leave. If someone else could take care of it, that would be great.
Otherwise I'll figure it out when I get back on the 28th.

The major problem is that my SSL key is still broken, so I have to put
in my password forty times during the upload, which makes posting the
Maven stuff non-trivial for me.

-Ted.

On 1/17/07, Wendy Smoak [EMAIL PROTECTED] wrote:

On 1/17/07, Ted Husted [EMAIL PROTECTED] wrote:

 Thanks, Wendy. Seems to have worked like a charm.

Great!

Then it looks like the only thing missing is signatures for all the
jars and poms in the repository.  Let me know if you need help
scripting that... or, I posted about gpg plugin config and personally
wouldn't be opposed to a bit of revisionist history on the tag. :)


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Struts 2.0 Performance

2007-01-17 Thread Tom Schneider
The performance of OGNL is not nearly as bad as we had originally 
thought.  I've been doing some performance testing in Webwork (which S2 
is based on) this week and most of the OGNL calls are not measurable. 
(1ms)   The biggest issue I've had is making sure freemarker templates 
are getting cached properly.  See 
http://wiki.opensymphony.com/display/WW/Performance+Tuning for details.  
(I'll be adding some explanations to what phil wrote later this week)  
Even though this is for WW, almost all of it is applicable to Struts 2.  
Eventually we'll move this to S2 and update it, but so few people are 
using Struts 2 right now, I think this is adequate.

Tom


Shekhar Yadav wrote:

Is there a plan on when the performance issues with Struts 2.0 will be
resolved? In some thread I saw that struts community is trying to either
create a replaceable EL engine or improve OGNL performance. But nowhere,
I see a committed timeline on when this will be done or whether this is
being done. If there is some work being done on it, I would be more then
willing to do beta testing and give early feedbacks.

 


I am sounding so stressed out because we have an application timed to go
live in April and with the current performance we can not go live. So
please give me concrete information on what is the status on this so
that we can plan accordingly.

 


Regards,

Shekhar


  



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: JSTL functions in *struts* JSP tags

2007-01-14 Thread Tom Schneider
+1 for having a seperate key attribute that automatically does a 
getText() lookup for the label.


This was one thing that is annoying in WW since we tried to I18Nize our 
whole app.  The url thing didn't bother me as much, but I'm all for a 
shorthand notation if it makes sense.  (Url/Button links tend to be 
rather verbose no matter what)


On a slightly related note, the other thing we did was change the 
default button-style submit to render as:


input type=button...

rather than

button ...

Since button doesn't work the same on all browsers.  (type=button was 
what we used before switching to WW)  I'm not sure if this is something 
that should be changed in the core tags, but I thought I'd throw it out 
there.

Tom

Ted Husted wrote:

On 1/12/07, Joe Germuska [EMAIL PROTECTED] wrote:

Anyway, am I the only one who finds this syntax tedious?


No, you are not.

* https://issues.apache.org/struts/browse/WW-1517

Just looking for a patch ...

I don't see a problem with having one tag for the simplest (and most
common case) of a single parameter, and then switching to the
url/param idiom when there are multiple.

-Ted.

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [S2] Experimental Features

2007-01-14 Thread Tom Schneider

Ted Husted wrote:

It would be great if there were a portlet plugin. I have no idea how
the support is implemented, but I expect it would not be that easy. :)
Well, the PortletDispatcher (Jsr168Dispatcher.java) and related portlet 
request support classes would probably be easy to separate out.  The 
trick would be the form and url tags which right now have specific 
portlet behavior for building portlet url's.  The real question is do we 
want separate tags for portlet urls?  If so it might be possible to have 
a subclass of the url and form tag for portlet environments.  If not, 
then we'd either have to leave the portlet support in core and only use 
it with the portlet plugin--or find some way to override how urls are 
build in core via the plugin.  These are the issues that I see based on 
my limited knowledge of the portlet code.

Tom

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



  1   2   >