1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski package test.javauno.nativethreadpool; 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski import com.sun.star.bridge.BridgeExistsException; 27*b1cdbd2cSJim Jagielski import com.sun.star.bridge.XBridgeFactory; 28*b1cdbd2cSJim Jagielski import com.sun.star.bridge.XInstanceProvider; 29*b1cdbd2cSJim Jagielski import com.sun.star.comp.helper.Bootstrap; 30*b1cdbd2cSJim Jagielski import com.sun.star.comp.loader.FactoryHelper; 31*b1cdbd2cSJim Jagielski import com.sun.star.connection.AlreadyAcceptingException; 32*b1cdbd2cSJim Jagielski import com.sun.star.connection.ConnectionSetupException; 33*b1cdbd2cSJim Jagielski import com.sun.star.connection.Acceptor; 34*b1cdbd2cSJim Jagielski import com.sun.star.connection.XAcceptor; 35*b1cdbd2cSJim Jagielski import com.sun.star.connection.XConnection; 36*b1cdbd2cSJim Jagielski import com.sun.star.lang.WrappedTargetRuntimeException; 37*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory; 38*b1cdbd2cSJim Jagielski import com.sun.star.lang.XSingleServiceFactory; 39*b1cdbd2cSJim Jagielski import com.sun.star.registry.XRegistryKey; 40*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 41*b1cdbd2cSJim Jagielski import com.sun.star.uno.XComponentContext; 42*b1cdbd2cSJim Jagielski 43*b1cdbd2cSJim Jagielski public final class Relay implements XRelay, XSource { start(XSource source)44*b1cdbd2cSJim Jagielski public void start(XSource source) { 45*b1cdbd2cSJim Jagielski this.source = source; 46*b1cdbd2cSJim Jagielski XComponentContext context; 47*b1cdbd2cSJim Jagielski try { 48*b1cdbd2cSJim Jagielski context = Bootstrap.createInitialComponentContext(null); 49*b1cdbd2cSJim Jagielski } catch (RuntimeException e) { 50*b1cdbd2cSJim Jagielski throw e; 51*b1cdbd2cSJim Jagielski } catch (com.sun.star.uno.Exception e) { 52*b1cdbd2cSJim Jagielski throw new WrappedTargetRuntimeException(e.toString(), this, e); 53*b1cdbd2cSJim Jagielski } catch (Exception e) { 54*b1cdbd2cSJim Jagielski throw new com.sun.star.uno.RuntimeException(e.toString(), this); 55*b1cdbd2cSJim Jagielski } 56*b1cdbd2cSJim Jagielski final XAcceptor acceptor = Acceptor.create(context); 57*b1cdbd2cSJim Jagielski final XBridgeFactory factory; 58*b1cdbd2cSJim Jagielski try { 59*b1cdbd2cSJim Jagielski factory = UnoRuntime.queryInterface( 60*b1cdbd2cSJim Jagielski XBridgeFactory.class, 61*b1cdbd2cSJim Jagielski context.getServiceManager().createInstanceWithContext( 62*b1cdbd2cSJim Jagielski "com.sun.star.bridge.BridgeFactory", context)); 63*b1cdbd2cSJim Jagielski } catch (com.sun.star.uno.Exception e) { 64*b1cdbd2cSJim Jagielski throw new WrappedTargetRuntimeException(e.toString(), this, e); 65*b1cdbd2cSJim Jagielski } 66*b1cdbd2cSJim Jagielski new Thread() { 67*b1cdbd2cSJim Jagielski public void run() { 68*b1cdbd2cSJim Jagielski try { 69*b1cdbd2cSJim Jagielski // Use "127.0.0.1" instead of "localhost", see #i32281#: 70*b1cdbd2cSJim Jagielski factory.createBridge( 71*b1cdbd2cSJim Jagielski "", "urp", 72*b1cdbd2cSJim Jagielski acceptor.accept("socket,host=127.0.0.1,port=3831"), 73*b1cdbd2cSJim Jagielski new XInstanceProvider() { 74*b1cdbd2cSJim Jagielski public Object getInstance(String instanceName) { 75*b1cdbd2cSJim Jagielski return Relay.this; 76*b1cdbd2cSJim Jagielski } 77*b1cdbd2cSJim Jagielski }); 78*b1cdbd2cSJim Jagielski } catch (AlreadyAcceptingException e) { 79*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 80*b1cdbd2cSJim Jagielski } catch (ConnectionSetupException e) { 81*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 82*b1cdbd2cSJim Jagielski } catch (BridgeExistsException e) { 83*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 84*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IllegalArgumentException e) { 85*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 86*b1cdbd2cSJim Jagielski } 87*b1cdbd2cSJim Jagielski } 88*b1cdbd2cSJim Jagielski }.start(); 89*b1cdbd2cSJim Jagielski try { 90*b1cdbd2cSJim Jagielski Thread.sleep(3000); // wait for new thread to accept connection 91*b1cdbd2cSJim Jagielski } catch (InterruptedException e) { 92*b1cdbd2cSJim Jagielski Thread.currentThread().interrupt(); 93*b1cdbd2cSJim Jagielski throw new com.sun.star.uno.RuntimeException(e.toString(), this); 94*b1cdbd2cSJim Jagielski } 95*b1cdbd2cSJim Jagielski } 96*b1cdbd2cSJim Jagielski get()97*b1cdbd2cSJim Jagielski public int get() { 98*b1cdbd2cSJim Jagielski return source.get(); 99*b1cdbd2cSJim Jagielski } 100*b1cdbd2cSJim Jagielski __getServiceFactory( String implName, XMultiServiceFactory multiFactory, XRegistryKey regKey)101*b1cdbd2cSJim Jagielski public static XSingleServiceFactory __getServiceFactory( 102*b1cdbd2cSJim Jagielski String implName, XMultiServiceFactory multiFactory, XRegistryKey regKey) 103*b1cdbd2cSJim Jagielski { 104*b1cdbd2cSJim Jagielski return implName.equals(implementationName) 105*b1cdbd2cSJim Jagielski ? FactoryHelper.getServiceFactory( 106*b1cdbd2cSJim Jagielski Relay.class, serviceName, multiFactory, regKey) 107*b1cdbd2cSJim Jagielski : null; 108*b1cdbd2cSJim Jagielski } 109*b1cdbd2cSJim Jagielski __writeRegistryServiceInfo(XRegistryKey regKey)110*b1cdbd2cSJim Jagielski public static boolean __writeRegistryServiceInfo(XRegistryKey regKey) { 111*b1cdbd2cSJim Jagielski return FactoryHelper.writeRegistryServiceInfo( 112*b1cdbd2cSJim Jagielski implementationName, serviceName, regKey); 113*b1cdbd2cSJim Jagielski } 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski private static final String implementationName 116*b1cdbd2cSJim Jagielski = "test.javauno.nativethreadpool.comp.Relay"; 117*b1cdbd2cSJim Jagielski private static final String serviceName 118*b1cdbd2cSJim Jagielski = "test.javauno.nativethreadpool.Relay"; 119*b1cdbd2cSJim Jagielski 120*b1cdbd2cSJim Jagielski private XSource source; 121*b1cdbd2cSJim Jagielski } 122