Hi together,

I changed the name of the thread, because I progressed a lot
implementing a singleton...

After implementing my singleton (see Steps below) I want to retrieve it
using the following Java code:
-----%<-----
mySpringLoader.get(xComponentContext);
-----%<-----
But I get an exception:
-----%<-----
com.sun.star.uno.RuntimeException: no service object raising singleton
/singletons/de.twc.oocom.comp.mySpringLoader
        at ...
-----%<-----

What went wrong? Can you help me?

Here is the way, I created my singleton (thanks Daan de Wit for your
great help):

STEP 1. I created an IDL file for my UNO interface for my extension:
-----%<-----
#ifndef __de_twc_oocom_comp_xspringloader_idl__
#define __de_twc_oocom_comp_xspringloader_idl__

#include <com/sun/star/uno/XInterface.idl>
module de { module twc { module oocom { module comp {   

published interface XSpringLoader : com::sun::star::uno::XInterface {
};

}; }; }; };
#endif
-----%<-----

STEP 2. Then I defined my UNO singleton with the following IDL file:
-----%<-----
#ifndef __de_twc_oocom_comp_myspringloader_idl__
#define __de_twc_oocom_comp_myspringloader_idl__

#include "XSpringLoader.idl"
module de { module twc { module oocom { module comp {   
        
        published singleton mySpringLoader : XSpringLoader;
        
 }; }; }; };
#endif
-----%<-----

STEP 3. I created a Java implementation of my singleton (very rudimentary):
-----%<-----
package de.twc.oocom.comp;
public class SpringLoaderImpl implements XSpringLoader {

        private static final SpringLoaderImpl INSTANCE =
                new SpringLoaderImpl();

        private SpringLoaderImpl() { }
        
        public static final SpringLoaderImpl getInstance() {
                return INSTANCE;
        }
        
        /**
         * The name of the singleton implemented.
         */
        static final String SINGLETONNAME =
                "de.twc.oocom.comp.mySpringLoader";
}
-----%<-----

STEP 4. I stored the singleton by adding the following code in my
__writeRegistryServiceInfo of my component registration class:
-----%<-----
public static boolean __writeRegistryServiceInfo(XRegistryKey regKey) {
        try {
                XRegistryKey newKey = regKey.createKey(
                        SpringLoaderImpl.class.getName() +
                        "/UNO/SINGLETONS/" +
                        mySpringLoader.class.getName());

                newKey.setStringValue(SpringLoaderImpl.SINGLETONNAME);

        } catch (InvalidRegistryException e) {
                return false;
        }

        // Registering my service implemented in the same component
        boolean regJudas = FactoryHelper.writeRegistryServiceInfo(
                JudasProtocolHandler.class.getName(),
                JudasProtocolHandler.SERVICENAME, regKey);
        return regJudas;
    }
-----%<-----

STEP 5. I changed my __getServiceFactory of my component registration
class. I am not sure if this step is correct. Daan adviced me the change
the method __getComponentFactory. But my component registration class
has no such method. Thus I used the __getServiceFactory. Can someone
tell me, if this is correct? Here is my code:
-----%<-----
public static XSingleServiceFactory __getServiceFactory(String implName,
                XMultiServiceFactory multiFactory, XRegistryKey regKey) {
        XSingleServiceFactory xSingleServiceFactory = null;

        if (implName.equals(JudasProtocolHandler.class.getName())) {
            xSingleServiceFactory = FactoryHelper.getServiceFactory(
                        JudasProtocolHandler.class,
                        JudasProtocolHandler.SERVICENAME,
                        multiFactory,
                        regKey);
        }
        else if (implName.equals(SpringLoaderImpl.class.getName())) {
            xSingleServiceFactory = FactoryHelper.getServiceFactory(
                        SpringLoaderImpl.class,
                        SpringLoaderImpl.SINGLETONNAME,
                        multiFactory,
                        regKey);
        }
        return xSingleServiceFactory;
    }
------%<------

STEP 6. I try to get my singelton this way:
-----%<-----
mySpringLoader.get(xComponentContext);
-----%<-----
Here, the failure described above happend. Can you help me solving this?

Thanks in advance!

Greeting, Tobias

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

Reply via email to