You have been very helpful. Your information is very much along the same lines I was headed.
Best Regards Zahid On Sat, 14 Dec 2019 at 12:19, Martin Gainty <mgai...@hotmail.com> wrote: > MG>maybe.. see below > > ________________________________ > From: Zahid Rahman <zahidr1...@gmail.com> > Sent: Friday, December 13, 2019 5:09 PM > To: Struts Users Mailing List <user@struts.apache.org> > Subject: Re: Java Singleton , Framework Design Patterns > > Hi, > > >?am interested to know which topic prompts your question ? > As you can see from the log file (below) the spring framework creates and > destroys a singleton of a bean. > So the singleton pattern is used by the container. > I was also informed that the singleton is used to create a login screen. > That also appears to be the case from the page > http://www.blackwasp.co.uk/Singleton.aspx. > > The login screen I will be using is the login.java and login.jsp in the > struts2 "blank app" in "struts-examples-master". > The struts framework also helps me with duplicate form submission. > So do I need to use the singleton pattern ? > > MG>here is ted husted struts-blank login.java (un-edited) > /* > * $Id: Login.java 471756 2006-11-06 15:01:43Z husted $ > * > * Licensed to the Apache Software Foundation (ASF) under one > * or more contributor license agreements. See the NOTICE file > * distributed with this work for additional information > * regarding copyright ownership. The ASF licenses this file > * to you under the Apache License, Version 2.0 (the > * "License"); you may not use this file except in compliance > * with the License. You may obtain a copy of the License at > * > * http://www.apache.org/licenses/LICENSE-2.0 > * > * Unless required by applicable law or agreed to in writing, > * software distributed under the License is distributed on an > * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > * KIND, either express or implied. See the License for the > * specific language governing permissions and limitations > * under the License. > */ > package example; > public class Login extends ExampleSupport { > public String execute() throws Exception { > if (isInvalid(getUsername())) return INPUT; > if (isInvalid(getPassword())) return INPUT; > return SUCCESS; > } > private boolean isInvalid(String value) { > return (value == null || value.length() == 0); > } > private String username; > public String getUsername() { > return username; > } > public void setUsername(String username) { > this.username = username; > } > private String password; > public String getPassword() { > return password; > } > public void setPassword(String password) { > this.password = password; > } > } > > //no singleton yet as there is no public static ClassName getInstance() > //with private constructor pointing to getInstance() > > //BUT singleton is used to instantate and set default ObjectFactory for > XmlConfigurationProvider > //as seen here in ConfigurationTestBase.java > package com.opensymphony.xwork2.config.providers; > public abstract class ConfigurationTestBase extends > com.opensymphone.xwork2.XWorkTestCase { > protected com.opensymphony.xwork2.config.ConfigurationProvider > buildConfigurationProvider(final String filename) { > configuration = new > com.opensymphony.xwork2.config.providers.MockConfiguration(); > > ((com.opensymphony.xwork2.config.providers.MockConfiguration)configuration).selfRegister(); > container = configuration.getContainer(); > XmlConfigurationProvider prov = new > XmlConfigurationProvider(filename, true); > > prov.setObjectFactory(container.getInstance(com.opensymphony.xwork2.ObjectFactory.class)); > > //but the provider does not use Spring Object Factory which we can remedy > here > > prov.setObjectFactory(container.getInstance(com.opensymphony.xwork2.spring.SpringObjectFactory.class)); > > //as you mention we must follow springs example of declaring singleton > bean in ./WEB-INF/<application>context.xml > <?xml version="1.0" encoding="UTF-8"?> > <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " > http://www.springframework.org/dtd/spring-beans.dtd"> > <beans default-autowire="byName"> > <bean id="default" > class="com.opensymphony.xwork2.spring.SpringObjectFactory" singleton="true" > /> > > //where struts specifies default <Spring>ObjectFactory thru > ./classes/org/apache/struts2/default.properties > ### if specified, the default object factory can be overridden here > ### Note: short-hand notation is supported in some cases, such as "spring" > ### Alternatively, you can provide a > com.opensymphony.xwork2.ObjectFactory subclass name here > > struts.objectFactory=com.opensymphony.xwork2.spring.SpringObjectFactory.class > > //the line > struts.objectFactory=com.opensymphony.xwork2.spring.SpringObjectFactory.class > in default.properties should be sufficient > //to route all instances of ObjectFactory to SpringObjectFactory > > does this help? > > 2019-12-13 21:01:06,882 [main] [DEBUG] > o.s.b.f.s.DefaultListableBeanFactory - Pre-instantiating singletons in > > org.springframework.beans.factory.support.DefaultListableBeanFactory@6f1d30d > : > defining beans [numberGenerator]; root of factory hierarchy > 2019-12-13 21:01:06,882 [main] [DEBUG] o.s.b.f.s.DefaultListableBeanFactory > - Creating shared instance of singleton bean 'numberGenerator' > 2019-12-13 21:01:06,882 [main] [DEBUG] o.s.b.f.s.DefaultListableBeanFactory > - Creating instance of bean 'numberGenerator' > 2019-12-13 21:01:06,895 [main] [DEBUG] o.s.b.f.s.DefaultListableBeanFactory > - Eagerly caching bean 'numberGenerator' to allow for resolving potential > circular references > 2019-12-13 21:01:06,896 [main] [DEBUG] o.s.b.f.s.DefaultListableBeanFactory > - Finished creating instance of bean 'numberGenerator' > 2019-12-13 21:01:06,897 [main] [DEBUG] > o.s.c.s.ClassPathXmlApplicationContext - Unable to locate > LifecycleProcessor with name 'lifecycleProcessor': using default > [org.springframework.context.support.DefaultLifecycleProcessor@d967f908] > 2019-12-13 21:01:06,897 [main] [DEBUG] o.s.b.f.s.DefaultListableBeanFactory > - Returning cached instance of singleton bean 'lifecycleProcessor' > 2019-12-13 21:01:06,900 [main] [DEBUG] > o.s.c.e.PropertySourcesPropertyResolver - Could not find key > 'spring.liveBeansView.mbeanDomain' in any property source > 2019-12-13 21:01:06,910 [main] [DEBUG] o.s.b.f.s.DefaultListableBeanFactory > - Returning cached instance of singleton bean 'numberGenerator' > 2019-12-13 21:01:06,910 [main] [INFO ] academy.learnprogramming.Main - > number = 0 > 2019-12-13 21:01:06,912 [main] [INFO ] > o.s.c.s.ClassPathXmlApplicationContext - Closing > org.springframework.context.support.ClassPathXmlApplicationContext@3e92e10 > : > startup date [Fri Dec 13 21:01:06 GMT 2019]; root of context hierarchy > 2019-12-13 21:01:06,912 [main] [DEBUG] o.s.b.f.s.DefaultListableBeanFactory > - Returning cached instance of singleton bean 'lifecycleProcessor' > 2019-12-13 21:01:06,912 [main] [DEBUG] o.s.b.f.s.DefaultListableBeanFactory > - Destroying singletons in > > org.springframework.beans.factory.support.DefaultListableBeanFactory@6f1d30d > : > defining beans [numberGenerator]; root of factory hierarchy > > On Fri, 13 Dec 2019 at 01:33, Martin Gainty <mgai...@hotmail.com> wrote: > > > Singleton: > > i prefer thread-safe implementations and generally eschew singletons > > (unless extreme political pressure dictates otherwise) > > https://www.geeksforgeeks.org/singleton-design-pattern/ > > [https://www.geeksforgeeks.org/wp-content/uploads/gfg_200X200.png]< > > https://www.geeksforgeeks.org/singleton-design-pattern/> > > Singleton Design Pattern | Implementation - GeeksforGeeks< > > https://www.geeksforgeeks.org/singleton-design-pattern/> > > The singleton pattern is one of the simplest design patterns. Sometimes > we > > need to have only one instance of our class for example a single DB > > connection shared by multiple objects as creating a separate DB > connection > > for every object may be costly. Similarly, there can be a single > > configuration ... > > www.geeksforgeeks.org<http://www.geeksforgeeks.org> > > > > Design Patterns: > > have a look at this discussion from stackoverflow on Visitor Pattern vs > > Command Pattern for lambda expresssions > > > https://stackoverflow.com/questions/2186931/java-pass-method-as-parameter > > [ > > > https://cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-i...@2.png?v=73d79a89bded > > ]< > > > https://stackoverflow.com/questions/2186931/java-pass-method-as-parameter> > > interface - Java Pass Method as Parameter - Stack Overflow< > > > https://stackoverflow.com/questions/2186931/java-pass-method-as-parameter> > > In Java 8, you can now pass a method more easily using Lambda Expressions > > and Method References. First, some background: a functional interface is > an > > interface that has one and only one abstract method, although it can > > contain any number of default methods (new in Java 8) and static > methods. A > > lambda expression can quickly implement the abstract method, without all > > the unnecessary syntax ... > > stackoverflow.com > > although this discussion is more specific on when to implement Visitor > > Pattern vs when to use Command Pattern > > > > > https://stackoverflow.com/questions/2857880/command-pattern-vs-visitor-pattern > > [ > > > https://cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-i...@2.png?v=73d79a89bded > > ]< > > > https://stackoverflow.com/questions/2857880/command-pattern-vs-visitor-pattern > > > > > Command Pattern vs. Visitor Pattern - Stack Overflow< > > > https://stackoverflow.com/questions/2857880/command-pattern-vs-visitor-pattern > > > > > Each pattern has it's own pros, cons and use cases. You can use Command > > pattern to . Decouple the invoker & receiver of command . Implement > > callback mechanism. Implement undo and redo functionality. Maintain a > > history of commands. Use Visitor pattern in below scenarios:. Similar > > operations have to be performed on objects of different types grouped in > a > > structure ; You need to execute many ... > > stackoverflow.com > > > > ?am interested to know which topic prompts your question? > > > > /br/ > > Martin > > ________________________________ > > From: Lukasz Lenart <lukaszlen...@apache.org> > > Sent: Thursday, December 12, 2019 1:56 AM > > To: Struts Users Mailing List <user@struts.apache.org> > > Subject: Re: Java Singleton , Framework Design Patterns > > > > czw., 12 gru 2019 o 06:13 Zahid Rahman <zahidr1...@gmail.com> > napisał(a): > > > So my point is I have not been able to find accurate information , if > > some > > > one could furnish me a Java language specification or recommend a book > > > which accurately describes these I would be grateful. > > > > Start with Gang of Four > > http://www.blackwasp.co.uk/gofpatterns.aspx > > > > > > Regards > > -- > > Łukasz > > + 48 606 323 122 http://www.lenart.org.pl/ > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > > For additional commands, e-mail: user-h...@struts.apache.org > > > > >