About singleton

Hello everyone:
I'm not sure if my class is Thread safe. Can you state me if it is right?
This class is to share outputstream used by socket tcp/ip.
The HashMap object: is itself thread safe?
Regards, Ulises.
class SingletonOutStream{
     private static SingletonOutStream instance;
     HashMap outsToModems;
     public synchronized static SingletonOutStream getInstance(){
          if ( instance == null) {
               instance = new SingletonOutStream();
          return instance;
     private SingletonOutStream(){
     void addOutToModem(String key, OutputStream value){
       if(outsToModems==null){
          outsToModems = new HashMap();
       if ((OutputStream) outsToModems.get(key)==null) {
                        outsToModems.put(key, value);
     OutputStream getOutToModem(String key){
       return (OutputStream) outsToModems.get(key);
     void removeOutToModem(String key){
       outsToModems.remove(key);
}

Add the synchronized keyword to all methods using the
HashMap. Also note that if the get and remove methods
are called before the add method you'll get a
null-pointer exception.Great advice idiot.
Just get rid of the lazy initialization and call
synchronizedMap on the HashMap.Even an "idiot" can see that synchronizing the HashMap won't make addOutToModem threadsafe. For that to happen the second if-statement must be "atomic". The easiest way is to synchronize the whole method.
An advice. If you want to show attitude make sure you're correct. Right now you're just a lousy programmer with your pants at the ankles.

Similar Messages

  • To ragnic and other about Singleton class

    Hi ragnic. Thanks for your reply. I posted the code wrong. Heres' my correct one.
    I have a GUI first loaded information and the information is stored in a databse, I have some EJB classes..and my singleton class ABC has some method to access to the EJB..
    so my first GUI will gather info using singleton class and later if I click on
    a button in my first GUI class, will pop up another frame of another class , this class also need to class setPassword in my Singleton..
    are my followign codes correctly??
    iS my Class ABC a SINgleton class? thanks
    Is my class ABC use as single correctly. And It is called from other classes is also correct?
    I'm new to java and like to learn about Singleton class.
    But I really dont' understand it clearly after reading many examples of it.
    I have a project to convert my class abc to a singleton.
    But I dont know how to do it.
    In my class(soon will become a singleton) will have few methods that later I need to use it from another class A and class B.
    I have a GUI application that first load my class A..and my class will call
    class abc(singleton) to get some information from it.
    and then in class A has a button, if I click on that button I will call SIngleton class again to update my password, in the singleton class has method calls updatePassword. But I dont know how to call a singleton from other class.
    I have my code for them below:
    1)public class ABC //attempt using a singleton
    private static ABC theABC = null;
    private ABC(){}
    public synchronized static ABC getABC()
    if(theABC == null)
    theABC= new ABC();
    return the ABC;
    public void updateUserInfo(SimpleUser user)
    throws UserNotFoundException, DelegateException
    try
    UserCollectionHome userCollectionHome = (UserCollectionHome)
    EJBHomeFactory.getFactory().lookupHome("vista/UserCollection",
    UserCollectionHome.class);
    UserHome userHome = (UserHome)
    EJBHomeFactory.getFactory().lookupHome("vista/User",UserHome.class);
    UserCollection uc = userCollectionHome.create();
    uc.updateUserInfo(user, userHome);
    } catch(HomeFactoryException hfe) {
    hfe.printStackTrace();
    throw new DelegateException(hfe);
    } catch(RemoteException re) {
    re.printStackTrace();
    throw new DelegateException(re);
    } catch(CreateException ce) {
    ce.printStackTrace();
    throw new DelegateException(ce);
    } catch(FinderException fe) {
    fe.printStackTrace();
    throw new UserNotFoundException();
    public SimpleUser getID(String id)
    throws UserNotFoundException, DelegateException
    try
    UserCollectionHome userCollectionHome = (UserCollectionHome)
    EJBHomeFactory.getFactory().lookupHome("vista/UserCollection",
    UserCollectionHome.class);
    UserHome userHome = (UserHome)
    EJBHomeFactory.getFactory().lookupHome("vista/User",UserHome.class);
    UserCollection uc = userCollectionHome.create();
    SimpleUser su = uc.getID(id, userHome);
    return su;
    } catch(HomeFactoryException hfe) {
    throw new DelegateException(hfe);
    } catch(RemoteException re) {
    throw new DelegateException(re);
    } catch(CreateException ce) {
    throw new DelegateException(ce);
    } catch(FinderException fe) {
    throw new UserNotFoundException();
    public void setPassword(String lname,String pw)
    throws UserNotFoundException, DelegateException
    try
    UserCollectionHome userCollectionHome = (UserCollectionHome)
    EJBHomeFactory.getFactory().lookupHome("vista/UserCollection",
    UserCollectionHome.class);
    UserHome userHome = (UserHome)
    EJBHomeFactory.getFactory().lookupHome("vista/User",UserHome.class);
    UserCollection uc = userCollectionHome.create();
    uc.setPassword(lname,pw, userHome);//assume that all lname are differents.
    } catch(HomeFactoryException hfe) {
    hfe.printStackTrace();
    throw new DelegateException(hfe);
    } catch(RemoteException re) {
    re.printStackTrace();
    throw new DelegateException(re);
    } catch(CreateException ce) {
    ce.printStackTrace();
    throw new DelegateException(ce);
    } catch(FinderException fe) {
    fe.printStackTrace();
    throw new UserNotFoundException();
    }//Do I have my class as a Singleton correctly???
    2)//Here is my First Frame that will call a Singleton to gather user information
    public A(Frame owner)
    super(owner, "User Personal Information",true);
    initScreen();
    loadPersonalInfo();
    * This method instantiates all the GUI widgets and places them into panels and
    * onto the frame.
    private void initScreen()
    txtFname = new JTextField(20);
    txtLname=new JTextField(20);
    btnsave =new JButton("Save");
    btnChange= new JButton("Click here to change PW");//when you click this button there will be a frame pop up for you to enter informaton..this iwll call class B
    JPanel pnlMain=new JPanel();
    JPanel pnlFname= new JPanel();
    pnlFname.setLayout(new BoxLayout(pnlFname, BoxLayout.X_AXIS));
    pnlFname.setBorder(BorderFactory.createEmptyBorder(0,87,0,90));
    pnlFname.add(new JLabel("First Name:"));
    pnlFname.add(Box.createRigidArea(new Dimension(5,0)));
    pnlFname.add(txtFname);
    JPanel pnlLname= new JPanel();
    pnlLname.setLayout(new BoxLayout(pnlLname, BoxLayout.X_AXIS));
    pnlLname.setBorder(BorderFactory.createEmptyBorder(0,87,0,90));
    pnlLname.add(new JLabel("Last Name:"));
    pnlLname.add(Box.createRigidArea(new Dimension(5,0)));
    pnlLname.add(txtLname);
    pnlMain.add(pnlFname);
    pnlMain.add(pnlLname);
    pnlMain.add(btnsave);
    pnlMain.add(btnChange");
    btnSave = new JButton("Save");
    btnSave.setActionCommand("SAVE");
    btnSave.addActionListener(this);
    btnCancel = new JButton("Cancel");
    btnCancel.setActionCommand("CANCEL");
    btnCancel.addActionListener(this);
    JPanel pnlBottom = new JPanel();
    pnlBottom.setLayout(new BoxLayout(pnlBottom, BoxLayout.X_AXIS));
    pnlBottom.setBorder(BorderFactory.createEmptyBorder(25,55,0,0));
    pnlBottom.add(btnSave);
    pnlBottom.add(Box.createRigidArea(new Dimension(25,0)));
    pnlBottom.add(btnCancel);
    pnlMain.add(pnlBottom);
    this.setContentPane( pnlMain);
    setSize(500,500);
    GraphicUtilities.center(this);
    theABC=ABC.getABC();
    //Do I call my ABC singleton class correctly??
    private void loadPersonalInfo()
    String ID= System.getProperty("user.name");
    SimpleUser user = null;
    try {
    user = ABC.getID(ID);
    //I tried to use method in ABC singleton class. IS this correctly call?
    } catch(UserNotFoundException nfe)
    JOptionPane.showMessageDialog(new JDialog(),"You have not yet registered.",
    "User Not Found",JOptionPane.WARNING_MESSAGE);
    System.exit(0);
    } catch(DelegateException de) {
    JOptionPane.showMessageDialog(new JDialog(),"You have not yet registered",JOptionPane.ERROR_MESSAGE);
    System.exit(0);
    currentUser = user;
    txtFname.setText(currentUser.getFirstName());
    txtLname.setText(currentUser.getLastName());
    //This information will be display in my textfields Fname and Lname
    //I can change my first and last name and hit button SAVE to save
    public void actionPerformed(ActionEvent e)
    if(e.getActionCommand().equals("SAVE")) submitChanges();
    if(e.getActionCommand().equals("CHANGE_PASSWORD")) {
    changepassword=new ChangePassword(new Frame(),name,badgeid);
    public void submitChanges(){
    String currentNTUsername = System.getProperty("user.name");
    SimpleUser user =null;
    try {
    user = theABC.getID(ID);
    user.setFirstName(txtFname.getText().trim());
    user.setLastName(txtLname.getText().trim());
    currentUser = user;
    theABC.updateUserInfo(currentUser);
    //IS this correctly if I want to use this method in singleton class ABC??
    } catch(UserNotFoundException nfe)
    JOptionPane.showMessageDialog(new JDialog(),"You have not yet registered",
    "User Not Found",JOptionPane.WARNING_MESSAGE);
    } catch(DelegateException de) {
    JOptionPane.showMessageDialog(new JDialog(),"You have not yet registered",JOptionPane.ERROR_MESSAGE);
    System.exit(0);
    this.setVisible(false);
    3) click on ChangePassword in my above GUI class A..will call this class B..and in this class B
    I need to access method in a Singleton class- ABC class,,DO i need to inititates it agian, if not what should I do? thanks
    package com.lockheed.vista.userinfo;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.border.*;
    import javax.swing.table.*;
    import javax.swing.tree.*;
    import java.util.StringTokenizer;
    import java.util.Vector;
    import java.io.*;
    import javax.swing.text.*;
    import javax.swing.text.html.*;
    import javax.swing.colorchooser.*;
    import javax.swing.filechooser.*;
    import javax.accessibility.*;
    import java.beans.*;
    import java.applet.*;
    import java.net.*;
    import org.apache.log4j.*;
    import com.lockheed.common.gui.GraphicUtilities;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.border.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import vista.user.UserServicesDelegate;
    import vista.user.SimpleUser;
    import vista.user.UserNotFoundException;
    import vista.user.*;
    import com.lockheed.common.ejb.*;
    import com.lockheed.common.gui.*;
    import com.lockheed.vista.publish.*;
    * This program allow users to change their Vista Web Center's password
    public class ChangePassword extends JDialog
    implements ActionListener{
    protected final Logger log = Logger.getLogger(getClass().getName());
    private UserServicesDelegate userServicesDelegate;
    private User currentUser = null;
    private JPasswordField txtPasswd, txtVerifyPW;
    private JButton btnSubmit,btnCancel;
    private JLabel lblName,lblBadgeID;
    private String strBadgeID="";
    * This is the constructor. It creates an instance of the ChangePassword
    * and calls the method to create and build the GUI.
    public ChangePassword(Frame owner,String name,String badgeid)
    super(owner, "Change Password",true);
    initScreen(name,badgeid);//build the GUI
    * This method instantiates all the GUI widgets and places them into panels and
    * onto the frame.
    private void initScreen(String strname,String strBadgeid)
    txtPasswd = new JPasswordField(20);
    txtVerifyPW=new JPasswordField(20);
    txtPasswd.setEchoChar('*');
    txtVerifyPW.setEchoChar('*');
    JPanel pnlMain=new JPanel();
    pnlMain.setLayout(new BoxLayout(pnlMain, BoxLayout.Y_AXIS));
    pnlMain.setBorder(BorderFactory.createEmptyBorder(20,0,20,0));
    JPanel pnlPW=new JPanel();
    pnlPW.setLayout(new BoxLayout(pnlPW, BoxLayout.X_AXIS));
    pnlPW.setBorder(BorderFactory.createEmptyBorder(0,96,0,30));
    pnlPW.add(new JLabel("Password:"));
    pnlPW.add(Box.createRigidArea(new Dimension(5,0)));
    pnlPW.add(txtPasswd);
    JPanel pnlVerifyPW=new JPanel();
    pnlVerifyPW.setLayout(new BoxLayout(pnlVerifyPW, BoxLayout.X_AXIS));
    pnlVerifyPW.setBorder(BorderFactory.createEmptyBorder(0,63,0,30));
    pnlVerifyPW.add(new JLabel("Verify Password:"));
    pnlVerifyPW.add(Box.createRigidArea(new Dimension(5,0)));
    pnlVerifyPW.add(txtVerifyPW);
    JPanel pnlTop= new JPanel();
    pnlTop.add(pnlPW);
    pnlTop.add(Box.createRigidArea(new Dimension(0,10)));
    pnlTop.add(pnlVerifyPW);
    pnlMain.add(pnlTop);
    btnSubmit = new JButton("Submit");
    btnSubmit.setActionCommand("SUBMIT");
    btnSubmit.addActionListener(this);
    btnCancel = new JButton("Cancel");
    btnCancel.setActionCommand("CANCEL");
    btnCancel.addActionListener(this);
    JPanel pnlBottom = new JPanel();
    pnlBottom.setLayout(new BoxLayout(pnlBottom, BoxLayout.X_AXIS));
    pnlBottom.setBorder(BorderFactory.createEmptyBorder(25,55,20,30));
    pnlBottom.add(btnSubmit);
    pnlBottom.add(Box.createRigidArea(new Dimension(25,0)));
    pnlBottom.add(btnCancel);
    pnlMain.add(pnlBottom);
    this.setContentPane( pnlMain);
    setSize(350,230);
    setVisible(true);
    public void actionPerformed(ActionEvent e)
    if(e.getActionCommand().equals("CANCEL")) this.setVisible(false);
    if(e.getActionCommand().equals("SUBMIT")) submitPW();
    * This method is called when the submit button is clicked. It allows user to change
    * their password.
    public void submitPW(){
    myABC= ABC.getABC();//Is this correct?
    char[] pw =txtPasswd.getPassword();
    String strPasswd="";
    for(int i=0;i<pw.length;i++){
    strPasswd=strPasswd+pw;
    char[] vpw =txtVerifyPW.getPassword();
    String strVerifyPW="";
    for(int i=0;i<vpw.length;i++){
    strVerifyPW=strVerifyPW+pw;
    if((strPasswd==null)||(strPasswd.length()==0)) {
    JOptionPane.showMessageDialog(new JDialog(),"You have not enter a password. Please try again.",
    "Invalid Password",JOptionPane.ERROR_MESSAGE);
    if((!strPasswd.equals(strVerifyPW)))
    //password and verify password do not match.
    JOptionPane.showMessageDialog(new JDialog(),"Your passwords do not match. Reenter and try again.",
    "Invalid Password",JOptionPane.ERROR_MESSAGE);
    try
    myABC.setUserPassword(strPasswd);//try to use a method in Singleton class
    txtPasswd.setText("");
    txtVerifyPW.setText("");
    this.setVisible(false);
    } catch(DelegateException e) {
    JOptionPane.showMessageDialog(new Frame(),
    "Error.",
    "Unable to change password information.",JOptionPane.WARNING_MESSAGE);
    } catch(UserNotFoundException e) {
    JOptionPane.showMessageDialog(new Frame(),
    "Error.",
    "Unable to change password information.",JOptionPane.WARNING_MESSAGE);
    And ofcourse I have other EJB classes to work with these classes.
    ***It compiles okey but when I ran, it say "NullPointerException"
    I think I call my Singleton wrong.
    Please help me.thanks

    1. When replying, use <reply>, don't post a new topic.
    2. Implementing a singleton is a frequently asked question. Search before you post.
    3. This is not a question about Swing. A more appropriate forum would be "New To Java Technology" or perhaps "Java Programming", but see point 1.
    4. When posting code, keep it short. It increases the chance of readers looking at it. And in composing your shorter version for the forum, you just may solve your problem.

  • Question about singleton design

    Hi all
    i have a question about singleton design. as i understood it correctly, this pattern garantees us a single instance of a class at any time. in a environment of concurrent access(multiple user access at the same time) , does this single instance put a constraint on concurrency(singleton == synchronization)? i have developed a service object that reads in properties and constructs some other objects. the reason i made it singleton is that i only want this service object to load the properties once. and when it is called to create other objects, it always has one copy of the propertis. making this service singleton, will it limit the threads to access it and construct other objects? thanks for your help.

    If there's no write access to the HashMap, then
    you're thread safe.You were probably typing at the same time as the previous post, which explicitly says there IS write access to the HashMap.
    I don't know what it is, but people seem to have this magical view of concepts. Singleton is just what it is. It doesn't have a magical aura that causes other things to behave differently. A singleton is just Java code that can have thread safety problems just like any other Java code. So to the OP: forget about the fact that this is a singleton. That's irrelevant. Ask if a method needs to be synchronized.
    (And yes, a method that tests if a variable is null and assigns an object to it if it isn't null does need to be synchronized if it's going to have multiple threads accessing it.)

  • Concerns about Singleton classes in EAR archive

    Let's say I have an EAR file with the following structure:
    employee.jar<br>
    employeeSearchEJB.jar<br>
    webApp1.war<br>
    webApp2.war<br>
    META-INF<br>
    application.xml<br>
    If there is a singleton class in the employee.jar utility archive, then does there
    exist a single instance of that singleton class for each web application in
    the EAR? I hope not because that would seriously screw things up with me. I would
    be upset, to say the least.
    SAF

    I tested it out, and you're right, only 1 instance of the singleton exists at the
    EAR level.
    Thanks,
    SAF
    "mike iwaskow" <[email protected]> wrote:
    >
    If there is a singleton class in the employee.jar utility
    archive, then does there exist a single instance of that
    singleton class for each web application in
    the EAR ?
    Based on your scenario, I believe the answer is "No".
    I'm knowledgeable with WLS 5.1 and up, not 4.51.
    Your best bet is to give it a try. If a problem does occur,
    contact BEA support at [email protected]
    Developer Relations
    BEA Support

  • About singleton pattern

    if i use Class.forName(MyClass).newInstance() to init MyClass and MyClass uses singleton pattern, i wonder what is the difference between Class.forName(MyClass).newInstance() and Class.forName(MyClass).newInstance().getInstance(),i meant whether the former object is singleton or not(plz tell me why). or i should never let sth like this happen(i should not use both Class and singleton,plz tell me the reason 2) or is there any other pattern than can combine both of them.
    any discussion will be appreciated.thanx in advance
    Ciao,
    zhxt

    hi scratchback,
    are you sure that MyClass uses singleton pattern? I haven't tried Class.forName(MyClass).newInstance() in a singleton class before, but I don't think it will work if your constructor is private.
    singleton pattern is used for classes that you think should exist in the application only once.
    hope it helps..
    ronron

  • Confused about singletons in servlets

    Hello,
    A DatabaseManager object is to be created within my RegistrationServlet. I wish to implement this DatabaseManager class as a singleton. I understand how the first client that invokes the RegistrationServlet will be able to create an instance of the DatabaseManager. However, what happens when a second client invokes the RegistrationServlet while the first client is still using the DatabaseManager instance? What is the best way to deal with this? Is an exception thrown?
    Thanks.

    Depends on how you implement the Singleton, of course.
    A Singleton might be a bad idea. Sounds like a bottleneck waiting to happen.
    That's a database isolation issue. It doesn't belong in a servlet. It belongs in a persistence layer.

  • A question about singleton pattern

    Will a singleton instance be a bottleneck of an application when many client address this instacne?
    and How can I do to deal with this problem?
    help me!

    Unless the singleton has synchronized methods or blocks of code that are synchronized there should be no bottle neck, as multi threads can access it at the same time.

  • Things to consider while making a class singleton?

    sometimes i need to share the state of object across application.I get confused should i declare it singleton or declare state vaiables as static.
    As per mythoughts, if intention is just to share the state of object across application i should go for static variables. Is this right?
    My understanding about when we should go about singleton is below
    We should declare the class as singleton when we need only one instance across jvm. But i am not unable to find any practical scenario
    when we where we may need singleton . Any help here will be appreciated. Everywhere on different sites i get to see the example of logger
    class where the reason is generally given as so that single log file is created not multiple log files.
    But again this could have been achieved with declaring the file variable as static in logger file?
    So actual reason is for declaring the logger as singleton is becuase we need the single log file with issues avoiding concurrent writing
    which wont be possible if we make the separate instance of logger for each write..
    Is the above reasoning correct so that i can proceed in right direction?

    How will declaring its state as static accomplish that objective?With declaring variables as class variable instead of instance variables, there will be a single copy of each variable. In each instance (in this case logger if we dont declare it singleton) we can check if file is already created or not. I mean it will be visible across all instances.
    No, because the file name isn't the only state. There is also the output stream/writer, its current position, its charset, the log level, the logger name, its filters, its formatters, ...Agreed. I just wanted to convey the point. As you said there will be other parameters,in that case we can declare all of them as static.
    A configuration file holder is a good example: there is only one configuration file so there should only be one holder instance.Thanks for pointing it out. Configuration file is used mainly to read the properties. we usually dont update the values there.So even if we dont make it singleton it may be correct. The advantage i can think of making it singleton is that if configuration file is used frequently then we dont have create the object again and again.
    So actual reason is for declaring the logger as singleton is becuase we need the single log file with issues avoiding concurrent writing
    No it isn't, and that doesn't follow from anything you said previously so the 'so' part is meaningless.I want to say here is that t to have single log file should not be the only reason behind making the logger file as singleton, other reasons can be handling of concurrent writing too.
    Have a look at the Wikipedia article on the Singleton pattern, or buy the booki have gone through the singleton pattern in headfirst book and some of the articles on net. But they mainly describe how the make the class as singleton and the reason that We should declare the class as singleton when we need only one instance. But looking for actual scenarios where we need singleton. So i took the examplle of logger file which is used in many project and trying to understand it is constructed as singleton so that i can use in my project if required.
    Edited by: JavaFunda on Aug 28, 2011 3:51 AM
    Edited by: JavaFunda on Aug 28, 2011 3:56 AM

  • Singleton Vs Static Class

    Hi,
    Kindly excuse if my question annoys anyone in the forum.
    Compared to a singleton class we can always have a class and all methods as static?
    Wouldnt that be the same as Singleton.
    Also looking at Runtime class, its a Singleton. Just thinking if Runtime class could be a class with this static methods instead of making the constructor private .

    I thought I read somewhere that however you implement your singletons, client code shouldn't break if later you decide that you don't need/want a singleton for that class anymore.I agree with that principle.
    This requires that the client code never calls the getInstance() method, and the best way to make sure of that is that the client code does not depend on the singleton class, but on an interface that the singleton class implements.
    (Speaking for myself, I can assure you that I never thought that deeply about it, but continuing...)I have thought a lot about Singletons, specifically when contemplating flaying myself alive for putting them prematurely where they weren't really needed (not to mention some of my colleagues' choice, for fear my message would deserve editing out by moderators).
    I have come to the conclusion that Singleton is overhyped, probably because it's one of the simplest patterns, and the first one people are taught as a way to illustrate the very concept of "design pattern". And overused because it feels so natural to use the first and simplest pattern one has learnt.
    I'm not claiming Singleton has no merits (I used to claim that on this forums). I'm claiming most usages I've seen of Singleton were not based on a careful consideration of the real merits.
    If we implement our singletons (who have state) as "static classes", aren't we violating this?Ah, OK, I get it now: if someday you need to have several copies of the states with different values, you could always "de-singletonize" the singleton, with minimal impact for properly-written client-code, as you point out, whereas you couldn't justas easily "de-staticize" the static calls.
    Indeed that's an argument when evaluating whether making a method static: it statically (1) binds the client code to the implementation class.
    (1) not a pun, merely the very justification for the term static as a keyword.
    J.

  • Singleton class issue

    I have a singleton class. A method in this class creates an array of structures. This class is shared across different process. So there is a chance that some one unknowigly calls the method to create the array of structures and hence the member variable may now points to another array of structure.
    Is there any way in Java to restict invoking of a function only once.
    A static variable with a check will solve this issue, but any other method so that calling of method itself becomes invalid to avoid RT usage?.

    Hi,
    I think, I understood know.
    You want to have a singleton holding a defined number of other objects (your arrays).
    This objects (your arrays) are semantically singletons itsself, because they should be constructed only once and than reused.
    Assuming I interpreted right, see my comments inline below.
    I know that who ever participate in this discussion is
    pretty sure about singleton class. Some of the code
    what I gave was irretating as Martin pointed out. So
    let me try to give more transparent code snippet,Thanks, that helped.
    >
    My aim :- I need a global object which is going to
    hold some arrays(data structures). This should be
    shared across various threads. (forget about the
    synchronousation part here). All these arrays won't be
    of same size, so I need methods for each
    datastructures to initialise to its required size.That's a little bit part of your problem, see below.
    My wayforward :- Create the global object as
    singleton. This object has methods for initialising
    different data structures.OK, fine.
    What is my doubt :- please see the following code
    fragment,
    public class Singleton {
    private Singleton singleton;
    private Singleton() {
    public static Singleton getInstance() {
    if (singleton == null) {
    singleton = new Singleton();
    return singleton;
    //other methods for the class
    private someObjType1 myArray1 = null;
    private someObjType2 myArray2 = null;
    private someObjType3 myArray3 = null; // etc....This "smells" like an candidate for another data structure, so that you don't have a fixed number of array.
    F.E.
    // Associate class of array elements (someObjTypeX) as keys with arrays of someObjTypeX
    private Map arrayMap = new HashMap();>
    public void CreateArray1(int size) {
    if (myArray1 == null) {
    myArray1 = new someObjType1[size];
    }Using the map, you create array should look like
    public void CreateArray(Class clazzOfArrayElem, int size)
      Object arr = arrayMap.get(clazzOfArrayElem)
      if(arr == null)
        arr = java.lang.reflect.Array.newInstance(clazzOfArrayElem, size);
        arrayMap.put(clazzOfArrayElem, arr);
    }Additionally the "ugliness" of this method results from the problem, that don't know the size of arrays at compile time.
    So it seem to be preferable to use a dynamic structure like a Vector instead of array. Then you don't have the need to pass the size in the accessor method.
    Then you can use a "cleaner" accessor method like
    public Vector getVector(Class clazzOfArrayElem)
      Vector vec = arrayMap.get(clazzOfArrayElem)
      if(vec == null)
        vec = new Vector();
        arrayMap.put(clazzOfArrayElem, vec); 
    return vec;
    }If you want to expose an array oriented interface f.e. for type safety you can have an accessor like
    public Object[] getAsArray(Class clazzOfArrayElem)
      Vector vec = arrayMap.get(clazzOfArrayElem)
      if(vec == null)
        vec = new Vector();
        arrayMap.put(clazzOfArrayElem, vec);
      arr = java.lang.reflect.Array.newInstance(clazzOfArrayElem, 0);
      return (Object[])vec.toArray(arr);
    // Real typesafe accessors as needed following
    public SomeClass1[] getAsArrayOfSomeClass1()
      return (SomeClass1[])getAsArray(SomeClass1.class);
    /.....This accessor for array interface have the additional advantage, that they return a copy of the data (only the internal arrays, no the object within the arrays!), so that a least a client using your class doesn't have access to your internal data (with the Vector he has).
    >
    // similarly for other data structures...
    So here CreateArray1 method will work fine because of
    the check myArray1 == null.
    Actual question :- Can I remove this check and
    restrick call to CreateArray1 more than one time ?.No. As I understood you want to have something like a "only-use-once-method". There is no such thing in Java I know of.
    But I don't see the need to remove this check. Reference comparison should have no real impact to the performance.
    this is going to benifit me for some other cases
    also.How?
    Hope this helps.
    Martin

  • Singleton concept

    Hi
      Please anybody explain me about singleton concept in abap objects,
    Thanks n Regards
    vijay

    Just to elaborate on what Sesh mentioned, A Singleton class is one that can only be instantiated once during the runtime of a program. Typical examples would be Classes that provide services(Persistance), or classes that provide resource pools(BADI Adapters, Shared Connections, etc.)
    Since normal classes can be instantiated any number of times,
    CLASS lcl_normal DEFINITION.
      PUBLIC SECTION.
        DATA: v type i.
        METHODS: disp_v.
    ENDCLASS.
    CLASS lcl_normal IMPLEMENTATION.
      METHOD disp_v.
        WRITE:/ v.
      ENDMETHOD.
    ENDCLASS.
    *__Report Code__*
    DATA: r1 TYPE REF TO lcl_normal,
              r2 TYPE REF TO lcl_normal.
    CREATE OBJECT r1.
    r1->v = 10.
    CREATE OBJECT r2. "Possible because class is not singleton
    r2->v = 20.
    r1->disp_v( ).
    r2->disp_v( ). " Also possible
    If we have to redesign the above class to make it singleton, in other words, irrespective of how many times the program uses the class, only a single shared instance will be reused, we have to prevent the class from being reinstantiated, we start by preventing calls to the constructor from outside of the class, ie: Only the class itself can create it's own instance!!
    CLASS lcl_singleton DEFINITION CREATE PRIVATE.
    Next step, now that calling programs cannot "CREATE OBJECT" our class, we provide an alternative to this...
    CLASS lcl_singleton DEFINITION CREATE PRIVATE.
       PUBLIC SECTION.
          CLASS-DATA: singleton TYPE REF TO lcl_singleton READ-ONLY.
          DATA: v type i.
          CLASS-METHODS: class_constructor.
          METHODS: disp_v.
    ENDCLASS.
    CLASS lcl_singleton IMPLEMENTATION.
      METHOD class_constructor.
         CREATE OBJECT singleton. "Can be executed only once
      ENDMETHOD.
      METHOD disp_v.
        WRITE:/ v.
      ENDMETHOD.
    ENDCLASS.
    *__Report Code__*
    DATA: r1 TYPE REF TO lcl_singleton,
              r2 TYPE REF TO lcl_singleton.
    *Create object r1 not possible!
    r1 = lcl_singleton=>singleton. " The only way to retrieve an instance
    r2 = lcl_singleton=>singleton.
    r1->v = 10.
    r1->disp_v( ).
    r2->disp_v( ). "Will also print 10
    And that's how it goes !
    Regards,
    Dushyant Shetty
    P.S. Did not get the time to syntax-check, please check before using code !

  • Instead of creating multiple Instances I want to create only one Instance.

    Hi Everyone
    Good morning, How are you.
    I have a requirement to transfer files from one location to another location, I am able to do this successfully using FTP Adapters.
    I have some Issues please help any one.
    1) When I deployed my process it is creating one instance for one file transfer, Suppose If I have 50 files in my Get
    directory, After deploy the process 50 instances are creating and 50 Email generating saying files are not tranfered successfully.
    Instead of creating 50 Instances I want to create only one Instance.
    2) When files are not transferd it will fire error mail saying that not success (I want to display all file names(not tranfered files) in my mail , i.e whatever files are not tranfered, need to diplay in mail).
    3) And I am not able to transfer 0 size files, But in BPEL Console Instance is creating for 0 size file also and I am getting Email for success... and In put directory 0 size file is not showing. (Instance is creating and Success Email coming but file is not exists in Put directory)
    Please help me.
    Regards
    Venkat
    Edited by: user10263255 on Oct 1, 2008 8:10 AM
    Edited by: user10263255 on Oct 1, 2008 9:15 AM

    Hi Dharmendra,
    Thanks for your reply.
    I am not able to see any thing about singleton process in mentioned URL.
    Can you please provide me the another URL or please paste here about singleton process .
    Thanks in Advance.
    Regards
    Venkat

  • Why not to use static methods - with example

    Hi Everyone,
    I'd like to continue the below thread about "why not to use static methods"
    Why not to use static methods
    with a concrete example.
    In my small application I need to be able to send keystrokes. (java.awt.Robot class is used for this)
    I created the following class for these "operations" with static methods:
    public class KeyboardInput {
         private static Robot r;
         static {
              try {
                   r = new Robot();
              } catch (AWTException e) {
                   throw new RuntimeException(e + "Robot couldn't be initialized.");
         public static void wait(int millis){
              r.delay(millis);
         public static void copy() {
              r.keyPress(KeyEvent.VK_CONTROL);
              r.keyPress(KeyEvent.VK_C);
              r.keyRelease(KeyEvent.VK_C);
              r.keyRelease(KeyEvent.VK_CONTROL);
         public static void altTab() {
              r.keyPress(KeyEvent.VK_ALT);
              r.keyPress(KeyEvent.VK_TAB);
              r.keyRelease(KeyEvent.VK_TAB);
              r.keyRelease(KeyEvent.VK_ALT);
                   // more methods like  paste(), tab(), shiftTab(), rightArrow()
    }Do you thinks it is a good solution? How could it be improved? I've seen something about Singleton vs. static methods somewhere. Would it be better to use Singleton?
    Thanks for any comments in advance,
    lemonboston

    maheshguruswamy wrote:
    lemonboston wrote:
    maheshguruswamy wrote:
    I think a singleton might be a better approach for you. Just kill the public constructor and provide a getInstance method to provide lazy initialization.Thanks maheshguruswamy for advising on the steps to create a singleton from this class.
    Could you maybe advise also about why do you say that it would be better to use singleton? What's behind it? Thanks!In short, it seems to me that a single instance of your class will be able to coordinate actions across your entire application. So a singleton should be enough.But that doesn't answer why he should prefer a singleton instead over a bunch of static methods. Functionally the two are almost identical. In both cases there's only one "thing" on which to call methods--either a single instance of the class, or the class itself.
    To answer the question, the main reason to use a Singleton over a classful of static methods is the same reason the drives a lot of non-static vs. static decisions: Polymorphism.
    If you use a Singleton (and and interface), you can do something like this:
    KeyboardInput kbi = get_some_instance_of_some_class_that_implements_KeyboardInput_somehow_maybe_from_a_factory();And then whatever is calling KBI's public methods only has to know that it has an implementor of that interface, without caring which concrete class it is, and you can substitute whatever implementation is appropriate in a given context. If you don't need to do that, then the static method approach is probably sufficient.
    There are other reasons that may suggest a Singleton--serialization, persistence, use as a JavaBean pop to mind--but they're less common and less compelling in my experience.
    And finally, if this thing maintains any state between method calls, although you can handle that with static member variables, it's more in keeping with the OO paradigm to make them non-static fields of an instance of that class.

  • Class methods, (sqlite)

    Hey,
    I'm working on a sqlite database application and I need to declare class variables (or something similar) to use within a class method.
    what i'm trying to do is compile and run some sql queries throughout my app. Now all the instance methods I call for class objects are fine because they are being called by a specific object of that class.
    I need to call a method (which is actually a sql query) at any time even tho there are no objects presently in the database to pass the method to. Therefore, i've created a class method to do this so I can call this method anytime I want on the class itself.
    Problem is, I don't know where/how to declare class variables to use in this query (such as the handler for the database itself, statement handler, etc...
    Also I want these variables to be accessible by other classes so that way I can pass the data from the result set into an array or whatever.
    Anyone know how I can do this?

    yeah, when I was looking into this yesterday I came across a "Cocoa Design Guidelines" guide and they were talking a little about singletons....
    I've never used them.....do you know of any examples where one is used so I can see how it's used in an actual app (maybe one of the sample apps from Dev portal??)
    Thanks
    Frank

  • Efficiency VS simplicity in design patterns

    The topic came up in a previous posting of mine about how you shouldn't design a system based on the efficiency of execution alone but then I thought of how Hibernate expects us to use a singleton session factory because creating factories takes up too much memory or CPU time (ie. it is a heavy object).
    Someone in my previous posting said creating objects on today's computers takes so little time that it is really a non-issue.
    What other reason is there for using a singleton session factory for Hibernate?

    ttb999 wrote:
    OK, yes my terminology is imprecise to say the least.
    Every source that offers Hibernate tutorials says that the session factory should be a singleton. It seems to only be creating the equivalent of a connection in JDBC.
    Can you give me a reason why? The following snippet seems to indicate that it is considered bad form to use anything other than a singleton session factory.
    http://docs.jboss.org/hibernate/core/3.5/reference/en/html/session-configuration.html
    First that document is referring to a very specific factory. It isn't a reference to all factories.
    Second the point of a factory instance is to create other classes. It is not logical to consider that one should use other instances although as a general statement the factory itself would define whether that was applicable or not.
    Third the specific factory that you state seems to be implicitly tied to jdbc connections and pooling. A pool by its very nature requires a single instance of the pool. If there is more than one instance there is more than one pool.
    Fourth notice that in the above there is nothing that says anything about singletons. You use a singleton because you want a single instance. The usage of the factory, by its nature and requirements, might require or suggest a single instance. Those factors lead to a singleton. Just as would be the case for any other class (non-factories) that required a single instance.

Maybe you are looking for

  • Business Partner in Solution Manager

    Hi Experts, I met with a problem when I try to create a support message. I have created the business partner ID (31) for my user ID with the Role of Business Partner(Gen.) and Employee. I have also specify the <System ID><Installation Number><Client>

  • Reg:error during transfer order creation

    hi, after quality inspection i move the stock into warehouse integrated storage location. if i clear inspection lot in qa32 for a material after saving it will pop up express message"error during creation of transfer order for a material".i configure

  • Is there an easy way to transfer contacts from iphone to another phone?

    My company will no longer support/pay for my iphone and I need to transfer my contacts out of my iphone and into a new phone, is there any easy way to do this or am I stuck with writing my contacts down and re0entering them into a new phone?

  • Output type of purchase order as email

    Hi Experts,                 I want to configure the output type of my purchase order as  email also so that when i can save it as a pdf file. kindly tell me the procedure of configuring it with path in SPRO. Thanks Harmandeep

  • Why a black screen upon exiting Reader 9?

    I can open PDF files, read them, and prnt them. I am using Firefox as my browser. When I close the PDF screen, I get a black screen. I would think that the PDF reader should close and return me to the screen from whence I opened the PDF. I have to cl