Henning,

I reviewed your patch and did not see any additional type casts.
I think this is a misunderstanding that happened when two separate things
were discussed together.

1. Does the Layout interface need to be generic to avoid type casts?
2. Does the Appender interface need to be generic to support a generic
Layout interface (without introducing type casts)?

The discussion on (1) is still ongoing, but regardless of the conclusion,
your patch proves that the answer to (2) is no: there is no need for the
Appender interface to be generic.
Appender can return a generic Layout<? extends Serializable> without
needing to be generic itself.

And that is great because Appender is used *everywhere*.

Remko



On Thu, Aug 15, 2013 at 10:43 AM, Henning Schmiedehausen <
[email protected]> wrote:

> Gary, I do not see your point here.
>
> In your example, SerializedLayout would have a concrete type for the
> toSerializable(LogEvent) method and XMLLayout would have another.
>
> So
>
> new SerializedLayout().toSerializable(logEvent) returns a LogEvent
> XMLLayout.createLayout().toSerializable(logEvent) returns a String
>
> You only lose the concrete type when you to not have the actual Layout
> instance but e.g. what appender.getLayout() returns (a Layout<? extends
> Serializable> in which case all you can assume is that
> toSerializable(LogEvent) returns something serializable.
>
> I honestly do not see where you need your type cast.
>
> Thanks,
>     Henning
>
>
> On Wed, Aug 14, 2013 at 7:37 AM, Gary Gregory <[email protected]>wrote:
>
>> On Wed, Aug 14, 2013 at 9:52 AM, Remko Popma <[email protected]>wrote:
>>
>>> Gary,
>>>
>>> The change only affects Appender, Layout is still generic.
>>> Appender does not need to be generic (it can just return a Layout<?
>>> extends Serializable> from its getLayout() method).
>>>
>>> This change does not introduce any type casts (afaics).
>>>
>>
>> This might be academic, but it would have to introduce type casts since
>> we have two kinds of layouts: String and LogEvent.
>>
>> For example:
>>
>>         LogEvent logEvent = null;
>>         logEvent = new SerializedLayout().toSerializable(logEvent);
>>         String xmlFragment = XMLLayout.createLayout(null, null, null,
>> null, null, null).toSerializable(logEvent);
>>
>> Gary
>>
>>
>>
>>> Remko
>>>
>>>
>>>
>>> On Wed, Aug 14, 2013 at 10:11 PM, Gary Gregory 
>>> <[email protected]>wrote:
>>>
>>>> On Wed, Aug 14, 2013 at 4:32 AM, Remko Popma <[email protected]>wrote:
>>>>
>>>>> Patch looks nice. Much fewer "raw type" compiler warnings. Seems like
>>>>> a big improvement to me.
>>>>>
>>>>> A small improvement on the patch would be to remove the (now
>>>>> unnecessary) @param <T> javadoc comments. I have that additional change
>>>>> done in my local workspace.
>>>>>
>>>>> I wouldn't mind committing this but I don't want to disrupt anyone's
>>>>> work-in-progress: the patch modifies about 125 files.
>>>>>
>>>>> Is everyone ok with me committing this? I'll hold off for a day or two
>>>>> (or less if we're all ok with this).
>>>>>
>>>>
>>>> Hi All:
>>>>
>>>> Please also consider these thought paths:
>>>>
>>>> - The raw compiler warnings can also be considered as a 'task not
>>>> finished' warning. That is, I did not go all the way in pushing generics
>>>> through the whole code base.
>>>>
>>>> - Consider the Appender/Layout generics separately from the other
>>>> generics in the code. I think this is already the case based on other
>>>> messages I've read, but I wanted to make sure 'the baby does not get thrown
>>>> out with the bath water' (a goofy saying here in the US).
>>>>
>>>> - Weigh was is 'correct' vs. what is 'convenient' vs. compiler
>>>> warnings.
>>>>
>>>> - What is the goal? For me, the goal of the generics here are multiple:
>>>>   -- Have the ability to write code that, for example, can configure
>>>> and start Log4j and then manipulate it without type casts.
>>>>   -- Avoid type casts in general.
>>>>   -- Cause compile time errors instead of a runtime errors when
>>>> extending Log4j.
>>>>
>>>> Gary
>>>>
>>>>
>>>>>
>>>>> Remko
>>>>>
>>>>>
>>>>> On Monday, August 12, 2013, Ralph Goers wrote:
>>>>>
>>>>>> I've briefly glanced at your patch and it looks reasonable to me.  It
>>>>>> leaves the Layout to continue to use generics but removes the generics 
>>>>>> from
>>>>>> the Appenders.  That seems like a reasonable thing to do.
>>>>>>
>>>>>> Ralph
>>>>>>
>>>>>> On Aug 11, 2013, at 6:34 PM, Henning Schmiedehausen wrote:
>>>>>>
>>>>>> Ok, that makes a lot of sense. I have reworked the patch to leave
>>>>>> these alone and put it on a different git branch. I also opened a ticket:
>>>>>> https://issues.apache.org/jira/browse/LOG4J2-343 and attached it as
>>>>>> a patch so that if you do not want to deal with git, you can get it from
>>>>>> there.
>>>>>>
>>>>>> I added instructions on how to get the patch from git to the ticket.
>>>>>>
>>>>>>
>>>>>> On Sat, Aug 10, 2013 at 4:40 PM, Nick Williams <
>>>>>> [email protected]> wrote:
>>>>>>
>>>>>>>
>>>>>>> On Aug 10, 2013, at 6:31 PM, Henning Schmiedehausen wrote:
>>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I was toying with the log4j 2 API for a new project and I stumbled
>>>>>>> over the fact that it uses a generic for Appender<T> without actually 
>>>>>>> being
>>>>>>> generic. The only generic part is the Layout. So as a result there is 
>>>>>>> this
>>>>>>> weird construct of Appender<SomeSerializableType> which is actually
>>>>>>> dictated by the layout in use.
>>>>>>>
>>>>>>>
>>>>>>> I'm relatively new to the team, so I don't know much about the
>>>>>>> reasoning behind making Appender generic, so I can't speak to that. I'm 
>>>>>>> not
>>>>>>> personally opposed to removing these generics, but that is a HUGE 
>>>>>>> change.
>>>>>>>
>>>>>>> This leads to really interesting constructs such as
>>>>>>>
>>>>>>> public abstract class AbstractDatabaseAppender<T extends
>>>>>>> AbstractDatabaseManager> extends AbstractAppender<LogEvent>
>>>>>>>
>>>>>>>
>>>>>>> Well this is a very different case. The <LogEvent> here is about
>>>>>>> Layout, just as you said. The <T extends AbstractDatabaseManager> is
>>>>>>> completely unrelated to Layout and I am _not_ in favor of removing these
>>>>>>> generics.
>>>>>>>
>>>>>>> I was wondering whether this is necessary as it makes the API very
>>>>>>> cumbersome to use and read so I removed the generic from Appender and
>>>>>>> subsequently went through the log4j 2 code base and mostly removed stuff
>>>>>>> that was no longer needed once that was gone. The result is at
>>>>>>>
>>>>>>> https://github.com/apache/logging-log4j2/pull/1
>>>>>>>
>>>>>>>
>>>>>>> The Apache GitHub repository is just a mirror of our SVN repository.
>>>>>>> We can't accept or use any pull requests there. You need to generate an 
>>>>>>> SVN
>>>>>>> patch and attach it to whatever JIRA you create. (As such, you should 
>>>>>>> close
>>>>>>> this pull request.)
>>>>>>>
>>>>>>> I will also file a JIRA for this.
>>>>>>>
>>>>>>> I know that the 2.0 release should be coming soon (being at beta8),
>>>>>>> but I feel that making that change in the API before it is set in stone
>>>>>>> with 2.0 woulc be really beneficial for anyone who wants to port code to
>>>>>>> 2.0 / write new code.
>>>>>>>
>>>>>>>
>>>>>>> I'm sure there will be plenty of discussion about this over the next
>>>>>>> few days.
>>>>>>>
>>>>>>> Thanks for considering,
>>>>>>>     Henning
>>>>>>>
>>>>>>>
>>>>>>> Nick
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>
>>>>
>>>> --
>>>> E-Mail: [email protected] | [email protected]
>>>> Java Persistence with Hibernate, Second 
>>>> Edition<http://www.manning.com/bauer3/>
>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>> Blog: http://garygregory.wordpress.com
>>>> Home: http://garygregory.com/
>>>> Tweet! http://twitter.com/GaryGregory
>>>>
>>>
>>>
>>
>>
>> --
>> E-Mail: [email protected] | [email protected]
>> Java Persistence with Hibernate, Second 
>> Edition<http://www.manning.com/bauer3/>
>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>> Spring Batch in Action <http://www.manning.com/templier/>
>> Blog: http://garygregory.wordpress.com
>> Home: http://garygregory.com/
>> Tweet! http://twitter.com/GaryGregory
>>
>
>

Reply via email to