summaryrefslogtreecommitdiff
path: root/odk
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2014-06-20 18:26:11 +0200
committerStephan Bergmann <sbergman@redhat.com>2014-06-20 18:26:11 +0200
commitdc795cbd2dcb50e555945a91925616c7b3e58ee9 (patch)
treee4bcd81746105958b18e6a8ee7b00c1b8f72646e /odk
parent3258c4f7b79ceedace3b4bdc88a818b45c7593ca (diff)
Make Linguistic SDK example use __getComponentFactory
...instead of legacy __getServiceFactory. This fixes a subtle bug: When these Java extensions are live-deployed, they are offloaded to an additional uno process. Their __getServiceFactory methods were called with the uno process (component context's) service manager, which they stored away for later use in OneInstanceFactory.createInstance. So even if later on an instance was created with the main LO process's component context, the uno process's component context would be used to instantiate the (C++) com.sun.star.linguistic2.LinguProperties service (in the uno process!), and that happens to internally use comphelper::getProcessServiceFactory, which would be null in the uno process, comphelper::getProcessServiceFactory comphelper::getProcessComponentContext (anonymous namespace)::getConfigurationProvider utl::ConfigManager::acquireTree utl::ConfigManager::addConfigItem utl::ConfigItem::ConfigItem SvtLinguConfigItem::SvtLinguConfigItem SvtLinguConfig::GetConfigItem SvtLinguConfig::GetConfigItem SvtLinguConfig::GetProperty LinguProps::getPropertyValue gcc3::callVirtualMethod ... Change-Id: Ib6f5a5dd6d0adbbe14d60aaff3a8b6ba24235d11
Diffstat (limited to 'odk')
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Linguistic/OneInstanceFactory.java29
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Linguistic/SampleHyphenator.java22
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Linguistic/SampleSpellChecker.java22
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/Linguistic/SampleThesaurus.java22
4 files changed, 38 insertions, 57 deletions
diff --git a/odk/examples/DevelopersGuide/OfficeDev/Linguistic/OneInstanceFactory.java b/odk/examples/DevelopersGuide/OfficeDev/Linguistic/OneInstanceFactory.java
index 2a33ecb4d6cf..63c27185c4e6 100644
--- a/odk/examples/DevelopersGuide/OfficeDev/Linguistic/OneInstanceFactory.java
+++ b/odk/examples/DevelopersGuide/OfficeDev/Linguistic/OneInstanceFactory.java
@@ -32,11 +32,11 @@
*
*************************************************************************/
-import com.sun.star.lang.XSingleServiceFactory;
+import com.sun.star.lang.XSingleComponentFactory;
import com.sun.star.lang.XServiceInfo;
import com.sun.star.lang.XInitialization;
-import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.beans.XPropertySet;
+import com.sun.star.uno.XComponentContext;
import com.sun.star.uno.XInterface;
import com.sun.star.uno.UnoRuntime;
@@ -49,32 +49,29 @@ import java.lang.reflect.Constructor;
public class OneInstanceFactory implements
- XSingleServiceFactory,
+ XSingleComponentFactory,
XServiceInfo
{
Class aMyClass;
String aSvcImplName;
String[] aSupportedSvcNames;
XInterface xInstantiatedService;
- XMultiServiceFactory xMultiFactory;
public OneInstanceFactory(
Class aMyClass,
String aSvcImplName,
- String[] aSupportedSvcNames,
- XMultiServiceFactory xMultiFactory )
+ String[] aSupportedSvcNames )
{
this.aMyClass = aMyClass;
this.aSvcImplName = aSvcImplName;
this.aSupportedSvcNames = aSupportedSvcNames;
- this.xMultiFactory = xMultiFactory;
xInstantiatedService = null;
}
- // XSingleServiceFactory
+ // XSingleComponentFactory
- public Object createInstance()
+ public Object createInstanceWithContext( XComponentContext context )
throws com.sun.star.uno.Exception,
com.sun.star.uno.RuntimeException
{
@@ -91,15 +88,17 @@ public class OneInstanceFactory implements
//!! workaround for services not always being created
//!! via 'createInstanceWithArguments'
XInitialization xIni = UnoRuntime.queryInterface(
- XInitialization.class, createInstance());
+ XInitialization.class, createInstanceWithContext(context));
if (xIni != null)
{
Object[] aArguments = new Object[]{ null, null };
- if (xMultiFactory != null)
+ if (context != null)
{
XPropertySet xPropSet = UnoRuntime.queryInterface(
- XPropertySet.class , xMultiFactory.createInstance(
- "com.sun.star.linguistic2.LinguProperties" ) );
+ XPropertySet.class,
+ context.getServiceManager().createInstanceWithContext(
+ "com.sun.star.linguistic2.LinguProperties",
+ context ) );
aArguments[0] = xPropSet;
}
xIni.initialize( aArguments );
@@ -108,14 +107,14 @@ public class OneInstanceFactory implements
return xInstantiatedService;
}
- public Object createInstanceWithArguments( Object[] aArguments )
+ public Object createInstanceWithArgumentsAndContext( Object[] aArguments, XComponentContext context )
throws com.sun.star.uno.Exception,
com.sun.star.uno.RuntimeException
{
if (xInstantiatedService == null)
{
XInitialization xIni = UnoRuntime.queryInterface(
- XInitialization.class, createInstance());
+ XInitialization.class, createInstanceWithContext( context ));
if (xIni != null)
xIni.initialize( aArguments );
}
diff --git a/odk/examples/DevelopersGuide/OfficeDev/Linguistic/SampleHyphenator.java b/odk/examples/DevelopersGuide/OfficeDev/Linguistic/SampleHyphenator.java
index ffa8358227cd..f74c5a7d8884 100644
--- a/odk/examples/DevelopersGuide/OfficeDev/Linguistic/SampleHyphenator.java
+++ b/odk/examples/DevelopersGuide/OfficeDev/Linguistic/SampleHyphenator.java
@@ -37,8 +37,7 @@ import com.sun.star.lib.uno.helper.ComponentBase;
import com.sun.star.uno.UnoRuntime;
// factories
-import com.sun.star.lang.XMultiServiceFactory;
-import com.sun.star.lang.XSingleServiceFactory;
+import com.sun.star.lang.XSingleComponentFactory;
// supported Interfaces
import com.sun.star.linguistic2.XHyphenator;
@@ -493,26 +492,21 @@ public class SampleHyphenator extends ComponentBase implements
* Returns a factory for creating the service.
* This method is called by the <code>JavaLoader</code>
* <p>
- * @return returns a <code>XSingleServiceFactory</code> for creating the component
+ * @return returns a <code>XComponentServiceFactory</code> for creating the component
* @param implName the name of the implementation for which a service is desired
- * @param multiFactory the service manager to be used if needed
- * @param regKey the registryKey
* @see com.sun.star.comp.loader.JavaLoader
*/
- public static XSingleServiceFactory __getServiceFactory(
- String aImplName,
- XMultiServiceFactory xMultiFactory,
- com.sun.star.registry.XRegistryKey xRegKey )
+ public static XSingleComponentFactory __getComponentFactory(
+ String aImplName )
{
- XSingleServiceFactory xSingleServiceFactory = null;
+ XSingleComponentFactory xSingleComponentFactory = null;
if( aImplName.equals( _aSvcImplName ) )
{
- xSingleServiceFactory = new OneInstanceFactory(
+ xSingleComponentFactory = new OneInstanceFactory(
SampleHyphenator.class, _aSvcImplName,
- getSupportedServiceNames_Static(),
- xMultiFactory );
+ getSupportedServiceNames_Static() );
}
- return xSingleServiceFactory;
+ return xSingleComponentFactory;
}
/**
diff --git a/odk/examples/DevelopersGuide/OfficeDev/Linguistic/SampleSpellChecker.java b/odk/examples/DevelopersGuide/OfficeDev/Linguistic/SampleSpellChecker.java
index 00fbab8365d9..7887fa06af30 100644
--- a/odk/examples/DevelopersGuide/OfficeDev/Linguistic/SampleSpellChecker.java
+++ b/odk/examples/DevelopersGuide/OfficeDev/Linguistic/SampleSpellChecker.java
@@ -37,8 +37,7 @@ import com.sun.star.lib.uno.helper.ComponentBase;
import com.sun.star.uno.UnoRuntime;
// factories
-import com.sun.star.lang.XMultiServiceFactory;
-import com.sun.star.lang.XSingleServiceFactory;
+import com.sun.star.lang.XSingleComponentFactory;
// supported Interfaces
import com.sun.star.linguistic2.XSpellChecker;
@@ -436,26 +435,21 @@ public class SampleSpellChecker extends ComponentBase implements
* Returns a factory for creating the service.
* This method is called by the <code>JavaLoader</code>
* <p>
- * @return returns a <code>XSingleServiceFactory</code> for creating the component
+ * @return returns a <code>XSingleComponentFactory</code> for creating the component
* @param implName the name of the implementation for which a service is desired
- * @param multiFactory the service manager to be used if needed
- * @param regKey the registryKey
* @see com.sun.star.comp.loader.JavaLoader
*/
- public static XSingleServiceFactory __getServiceFactory(
- String aImplName,
- XMultiServiceFactory xMultiFactory,
- com.sun.star.registry.XRegistryKey xRegKey )
+ public static XSingleComponentFactory __getComponentFactory(
+ String aImplName )
{
- XSingleServiceFactory xSingleServiceFactory = null;
+ XSingleComponentFactory xSingleComponentFactory = null;
if( aImplName.equals( _aSvcImplName ) )
{
- xSingleServiceFactory = new OneInstanceFactory(
+ xSingleComponentFactory = new OneInstanceFactory(
SampleSpellChecker.class, _aSvcImplName,
- getSupportedServiceNames_Static(),
- xMultiFactory );
+ getSupportedServiceNames_Static() );
}
- return xSingleServiceFactory;
+ return xSingleComponentFactory;
}
/**
diff --git a/odk/examples/DevelopersGuide/OfficeDev/Linguistic/SampleThesaurus.java b/odk/examples/DevelopersGuide/OfficeDev/Linguistic/SampleThesaurus.java
index ee0295393da0..5feb49bd3e99 100644
--- a/odk/examples/DevelopersGuide/OfficeDev/Linguistic/SampleThesaurus.java
+++ b/odk/examples/DevelopersGuide/OfficeDev/Linguistic/SampleThesaurus.java
@@ -37,8 +37,7 @@ import com.sun.star.lib.uno.helper.ComponentBase;
import com.sun.star.uno.UnoRuntime;
// factories
-import com.sun.star.lang.XMultiServiceFactory;
-import com.sun.star.lang.XSingleServiceFactory;
+import com.sun.star.lang.XSingleComponentFactory;
// supported Interfaces
import com.sun.star.linguistic2.XThesaurus;
@@ -272,26 +271,21 @@ public class SampleThesaurus extends ComponentBase implements
* Returns a factory for creating the service.
* This method is called by the <code>JavaLoader</code>
* <p>
- * @return returns a <code>XSingleServiceFactory</code> for creating the component
+ * @return returns a <code>XSingleComponentFactory</code> for creating the component
* @param implName the name of the implementation for which a service is desired
- * @param multiFactory the service manager to be used if needed
- * @param regKey the registryKey
* @see com.sun.star.comp.loader.JavaLoader
*/
- public static XSingleServiceFactory __getServiceFactory(
- String aImplName,
- XMultiServiceFactory xMultiFactory,
- com.sun.star.registry.XRegistryKey xRegKey )
+ public static XSingleComponentFactory __getComponentFactory(
+ String aImplName )
{
- XSingleServiceFactory xSingleServiceFactory = null;
+ XSingleComponentFactory xSingleComponentFactory = null;
if( aImplName.equals( _aSvcImplName ) )
{
- xSingleServiceFactory = new OneInstanceFactory(
+ xSingleComponentFactory = new OneInstanceFactory(
SampleThesaurus.class, _aSvcImplName,
- getSupportedServiceNames_Static(),
- xMultiFactory );
+ getSupportedServiceNames_Static() );
}
- return xSingleServiceFactory;
+ return xSingleComponentFactory;
}
/**