I am not even aware that J2EE/JEE dominates. The environments I have always 
worked in use Spring.

Ralph

> On Jul 14, 2016, at 5:06 PM, Remko Popma <remko.po...@gmail.com> wrote:
> 
> The purpose of the J2EE thread model is to prevent prevent custom threads 
> from interacting with container threads. I believe that it is the intention 
> to protect against data corruption issues, data visibility issues etc. 
> If it was allowed for custom threads to call servlet or EJB methods 
> concurrently with calls from container threads, it would be impossible to 
> make thread-safe J2EE apps. 
> 
> What Log4j and various other libraries do is create helper threads to offload 
> processing from the container threads. As long as our threads don't call back 
> into the application the thread-safety risks are manageable. We essentially 
> rely on people to not do crazy stuff in their toString() methods. 
> 
> As far as I am aware, any "worker thread" frameworks provided by J2EE 
> containers are not designed for performance requirements like ours. They also 
> don't solve any issues with objects doing crazy stuff in their toString() 
> method.
> 
> So practically speaking there's only drawbacks and no benefits for Log4j to 
> adhere to the letter of the specification. We do adhere to the spirit of it 
> though. 
> 
> Frankly speaking I think this part of the J2EE spec was not very well thought 
> out. I think this is one of the reasons we will see reactive frameworks like 
> Akka and ReactiveX take market share in spaces where J2EE now dominates.  
> 
> 
> Sent from my iPhone
> 
> On 2016/07/15, at 6:36, Paul Benedict <pbened...@apache.org 
> <mailto:pbened...@apache.org>> wrote:
> 
>> Ralph, I am sure it does require some refactoring. Sounds like a good 3.0 
>> thing :-) but it would be really awesome if Log4J could advertise itself as 
>> EE compatible with threading. Just my 2 cents. When it comes to the 
>> refactoring, you'll just want to have a good abstraction built so you can 
>> plug in the right implementation at runtime (non-container vs container).
>> 
>> Cheers,
>> Paul
>> 
>> On Thu, Jul 14, 2016 at 4:34 PM, Ralph Goers <ralph.go...@dslextreme.com 
>> <mailto:ralph.go...@dslextreme.com>> wrote:
>> I’m not aware that frameworks like Log4j actually adhere to those 
>> guidelines. It is too difficult to write code that works in both the JEE and 
>> non-JEE environments.
>> 
>> Ralph
>> 
>>> On Jul 14, 2016, at 1:07 PM, Paul Benedict <pbened...@apache.org 
>>> <mailto:pbened...@apache.org>> wrote:
>>> 
>>> In an EE environment, don't create your own threads. If you do create your 
>>> own threads, the EE server has no way to shut them down when an application 
>>> gets undeployed. You'd want to have the EE server manage the thread 
>>> creations.
>>> 
>>> Cheers,
>>> Paul
>>> 
>>> On Thu, Jul 14, 2016 at 2:41 PM, Gary Gregory <garydgreg...@gmail.com 
>>> <mailto:garydgreg...@gmail.com>> wrote:
>>> I'll get around to it ;-)
>>> 
>>> Gary
>>> 
>>> On Thu, Jul 14, 2016 at 11:35 AM, Matt Sicker <boa...@gmail.com 
>>> <mailto:boa...@gmail.com>> wrote:
>>> Anyone wanna make a jira ticket for this? I'm not sure on how best to 
>>> describe this.
>>> 
>>> On 5 July 2016 at 09:00, Matt Sicker <boa...@gmail.com 
>>> <mailto:boa...@gmail.com>> wrote:
>>> I'm not sure how many threads we spawn are actually reusable, but gathering 
>>> them into a single pool would definitely help figure out which ones can be 
>>> used.
>>> 
>>> Also, would this be vaguely related to the custom Log4j ThreadLocal object 
>>> we were thinking about a little while ago?
>>> 
>>> On 5 July 2016 at 04:52, Mikael Ståldal <mikael.stal...@magine.com 
>>> <mailto:mikael.stal...@magine.com>> wrote:
>>> Sounds like a good idea. I think it's also good to reuse threads for 
>>> performance.
>>> 
>>> On Mon, Jul 4, 2016 at 10:00 PM, Matt Sicker <boa...@gmail.com 
>>> <mailto:boa...@gmail.com>> wrote:
>>> This sounds like an interesting idea worth pursuing.
>>> 
>>> On 4 July 2016 at 14:56, Gary Gregory <garydgreg...@gmail.com 
>>> <mailto:garydgreg...@gmail.com>> wrote:
>>> When I see code like:
>>> 
>>>                     LOGGER.debug("RollingFileManager executing async {}", 
>>> descriptor.getAsynchronous());
>>>                     thread = new Log4jThread(new 
>>> AsyncAction(descriptor.getAsynchronous(), this));
>>>                     thread.start();
>>> 
>>> and:
>>> 
>>>             final Thread thread = new Log4jThread(new 
>>> ReconfigurationWorker(listener, reconfigurable));
>>>             thread.setDaemon(true);
>>>             thread.start();
>>> 
>>> and other places, I think: "and poof, I've lost track of that thread".
>>> 
>>> What if we used a thread pool (ExecutorService) to track all of our 
>>> threads? This would allow for at least trying for an orderly shutdown. This 
>>> would avoid problems like one part of an app thinking that rollovers should 
>>> be done when they are not because a log4j context has been stopped (like in 
>>> our test probably) but the rollover thread is still going about doing its 
>>> work.
>>> 
>>> This would be for 2.7 I think.
>>> 
>>> We could then have a different context stop API, maybe with a timeout or 
>>> not, something like ExecutorService's shutdown() vs. shutdownNow().
>>> 
>>> Thoughts?
>>> 
>>> Happy 4th!
>>> 
>>> Gary
>>> 
>>> -- 
>>> E-Mail: garydgreg...@gmail.com <mailto:garydgreg...@gmail.com> | 
>>> ggreg...@apache.org  <mailto:ggreg...@apache.org>
>>> 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 <http://garygregory.wordpress.com/> 
>>> Home: http://garygregory.com/ <http://garygregory.com/>
>>> Tweet! http://twitter.com/GaryGregory <http://twitter.com/GaryGregory>
>>> 
>>> 
>>> -- 
>>> Matt Sicker <boa...@gmail.com <mailto:boa...@gmail.com>>
>>> 
>>> 
>>> 
>>> -- 
>>>  
>>> 
>>> Mikael Ståldal
>>> Senior software developer 
>>> 
>>> Magine TV
>>> mikael.stal...@magine.com <mailto:mikael.stal...@magine.com>    
>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com  
>>> <http://www.magine.com/>
>>> 
>>> Privileged and/or Confidential Information may be contained in this 
>>> message. If you are not the addressee indicated in this message
>>> (or responsible for delivery of the message to such a person), you may not 
>>> copy or deliver this message to anyone. In such case, 
>>> you should destroy this message and kindly notify the sender by reply 
>>> email.   
>>> 
>>> 
>>> 
>>> -- 
>>> Matt Sicker <boa...@gmail.com <mailto:boa...@gmail.com>>
>>> 
>>> 
>>> 
>>> -- 
>>> Matt Sicker <boa...@gmail.com <mailto:boa...@gmail.com>>
>>> 
>>> 
>>> 
>>> -- 
>>> E-Mail: garydgreg...@gmail.com <mailto:garydgreg...@gmail.com> | 
>>> ggreg...@apache.org  <mailto:ggreg...@apache.org>
>>> 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 <http://garygregory.wordpress.com/> 
>>> Home: http://garygregory.com/ <http://garygregory.com/>
>>> Tweet! http://twitter.com/GaryGregory <http://twitter.com/GaryGregory>
>> 
>> 

Reply via email to