Hi, i think i finally did it :-) the trick is to implement your own SingletonFactory ...
public class SingletonFactory implements XSingleComponentFactory {
private transient LogServiceImpl instance = null;
public Object createInstanceWithArgumentsAndContext(final Object[] args,
final XComponentContext xComponentContext) throws
Exception {
return createInstanceWithContext(xComponentContext);
}
public Object createInstanceWithContext(
final XComponentContext xComponentContext) throws
Exception {
if (this.instance == null)
this.instance = new LogServiceImpl(xComponentContext);
return this.instance;
}
and changing ServiceProvider class:
public class ServiceProvider {
public static XSingleComponentFactory __getComponentFactory(final
String sImplName) {
XSingleComponentFactory xSingleComponentFactory = null;
if (sImplName.equals(LogServiceImpl.class.getName()))
xSingleComponentFactory = new SingletonFactory();
return xSingleComponentFactory;
}
public static boolean __writeRegistryServiceInfo(final XRegistryKey
xRegistryKey) {
try {
final XRegistryKey newKey = xRegistryKey
.createKey(LogServiceImpl.class.getName()
+ "/UNO/SINGLETONS/" +
LogServiceImpl._serviceName);
newKey.setStringValue(LogServiceImpl._serviceName);
} catch (final InvalidRegistryException e) {
return false;
}
return
Factory.writeRegistryServiceInfo(LogServiceImpl.class.getName(),
new String[] { LogServiceImpl._serviceName },
xRegistryKey);
}
}
now EqualUnoObjects(oA,oB) returns true ...
oA = CreateUnoService("logging.LogService")
oB = CreateUnoService("logging.LogService")
and generated LogService.class has a static method get(xComponentContext)
Oliver
GnuPG key 0xCFD04A45: 8822 057F 4956 46D3 352C 1A06 4E2C AB40 CFD0 4A45
signature.asc
Description: OpenPGP digital signature
