import java.util.Collection;\r
import java.util.HashMap;\r
import java.util.Iterator;\r
-import java.util.List;\r
import java.util.Map;\r
import java.util.Map.Entry;\r
-import java.util.Vector;\r
\r
import javax.security.auth.login.AppConfigurationEntry;\r
import javax.transaction.TransactionManager;\r
import org.nuxeo.ecm.core.client.ConnectionListener;\r
import org.nuxeo.ecm.core.client.DefaultLoginHandler;\r
import org.nuxeo.ecm.core.client.LoginHandler;\r
-import org.nuxeo.ecm.core.repository.RepositoryDescriptor;\r
+//import org.nuxeo.ecm.core.repository.RepositoryDescriptor;\r
import org.nuxeo.ecm.core.schema.SchemaManager;\r
import org.nuxeo.ecm.core.schema.SchemaManagerImpl;\r
import org.nuxeo.ecm.core.schema.TypeProvider;\r
\r
private RepositoryManager repositoryMgr;\r
\r
- private boolean multiThreadedLogin = false;\r
-\r
private static final NuxeoClientEmbedded instance = new NuxeoClientEmbedded();\r
\r
private static final Log log = LogFactory.getLog(NuxeoClientEmbedded.class);\r
return instance;\r
}\r
\r
- public void setMultiThreadedLogin(boolean useMultiThreadedLogin) {\r
- multiThreadedLogin = useMultiThreadedLogin;\r
- }\r
-\r
- public boolean getMultiThreadedLogin() {\r
- return multiThreadedLogin;\r
- }\r
-\r
- public synchronized void connect(String locator) throws Exception {\r
- if (this.locator != null) {\r
- throw new IllegalStateException("Client is already connected");\r
- }\r
- doConnect(AutoConfigurationService.createLocator(locator));\r
- }\r
-\r
- public synchronized void connect(InvokerLocator locator) throws Exception {\r
- if (this.locator != null) {\r
- throw new IllegalStateException("Client is already connected");\r
- }\r
- doConnect(locator);\r
- }\r
-\r
- public synchronized void connect(String host, int port) throws Exception {\r
- if (locator != null) {\r
- throw new IllegalStateException("Client is already connected");\r
- }\r
- doConnect(AutoConfigurationService.createLocator(host, port));\r
- }\r
-\r
- public synchronized void forceConnect(InvokerLocator locator)\r
- throws Exception {\r
- if (this.locator != null) {\r
- disconnect();\r
- }\r
- doConnect(locator);\r
- }\r
-\r
- public synchronized void forceConnect(String locator) throws Exception {\r
- if (this.locator != null) {\r
- disconnect();\r
- }\r
- doConnect(AutoConfigurationService.createLocator(locator));\r
- }\r
-\r
- public synchronized void forceConnect(String host, int port)\r
- throws Exception {\r
- if (locator != null) {\r
- disconnect();\r
- }\r
- doConnect(AutoConfigurationService.createLocator(host, port));\r
- }\r
-\r
- public synchronized void tryConnect(String host, int port) throws Exception {\r
- if (locator != null) {\r
- return; // do nothing\r
- }\r
- doConnect(AutoConfigurationService.createLocator(host, port));\r
- }\r
-\r
- public synchronized void tryConnect(String url) throws Exception {\r
- if (locator != null) {\r
- return; // do nothing\r
- }\r
- doConnect(AutoConfigurationService.createLocator(url));\r
- }\r
-\r
- public synchronized void tryConnect(InvokerLocator locator)\r
- throws Exception {\r
- if (this.locator != null) {\r
- return; // do nothing\r
- }\r
- doConnect(locator);\r
- }\r
-\r
@Deprecated\r
- private void doConnect(InvokerLocator locator) throws Exception {\r
- this.locator = locator;\r
- try {\r
- cfg.load(locator);\r
- // FIXME TODO workaround to work with nxruntime core 1.3.3\r
- // --------------\r
- String newPort = Framework.getProperty("org.nuxeo.runtime.1.3.3.streaming.port");\r
- if (newPort != null) {\r
- StreamingService streamingService = (StreamingService) Framework.getRuntime().getComponent(\r
- StreamingService.NAME);\r
- // streaming config\r
- String oldLocator = streamingService.getServerLocator();\r
- int p = oldLocator.lastIndexOf(':');\r
- if (p > -1) {\r
- String withoutPort = oldLocator.substring(0, p);\r
- String serverLocator = withoutPort + ":" + newPort;\r
- streamingService.stopManager();\r
- streamingService.setServerLocator(serverLocator);\r
- streamingService.setServer(false);\r
- streamingService.startManager();\r
- }\r
- }\r
- // FIXME TODO workaround for remote services\r
- // -------------------------------\r
- schemaRemotingWorkaround(locator.getHost());\r
- // workaround for client login configuration - we need to make it\r
- // not multi threaded\r
- // TODO put an option for this in NuxeoClient\r
- if (!multiThreadedLogin) {\r
- LoginService ls = Framework.getService(LoginService.class);\r
- SecurityDomain sysDomain = ls.getSecurityDomain(LoginComponent.SYSTEM_LOGIN);\r
- SecurityDomain clientDomain = ls.getSecurityDomain(LoginComponent.CLIENT_LOGIN);\r
- adaptClientSecurityDomain(sysDomain);\r
- adaptClientSecurityDomain(clientDomain);\r
- }\r
- // ----------------\r
-// login();\r
- if (!multiThreadedLogin) {\r
- throw new RuntimeException("This coode is dead and should never be called?"); //FIXME: REM - If you're reading this, this was left here by mistake and should be removed.\r
- }\r
- } catch (Exception e) {\r
- this.locator = null;\r
- throw e;\r
- }\r
- fireConnected(this);\r
- }\r
-\r
- public static void adaptClientSecurityDomain(SecurityDomain sd) {\r
- AppConfigurationEntry[] entries = sd.getAppConfigurationEntries();\r
- if (entries != null) {\r
- for (int i = 0; i < entries.length; i++) {\r
- AppConfigurationEntry entry = entries[i];\r
- if ("org.jboss.security.ClientLoginModule".equals(entry.getLoginModuleName())) {\r
- Map<String, ?> opts = entry.getOptions();\r
- Map<String, Object> newOpts = new HashMap<String, Object>(\r
- opts);\r
- newOpts.put("multi-threaded", "false");\r
- entries[i] = new AppConfigurationEntry(\r
- entry.getLoginModuleName(), entry.getControlFlag(),\r
- entry.getOptions());\r
- }\r
- }\r
- }\r
- }\r
-\r
- /**\r
- * Workaround for being able to load schemas from remote\r
- * TODO integrate this in core\r
- */\r
- private static void schemaRemotingWorkaround(String host) throws Exception {\r
- ServiceManager serviceManager = Framework.getLocalService(ServiceManager.class);\r
- ServiceDescriptor sd = new ServiceDescriptor(TypeProvider.class, "core");\r
- sd.setLocator("%TypeProviderBean");\r
- serviceManager.registerService(sd);\r
- TypeProvider typeProvider = Framework.getService(TypeProvider.class);\r
- SchemaManager schemaMgr = Framework.getLocalService(SchemaManager.class);\r
- ((SchemaManagerImpl) schemaMgr).importTypes(typeProvider);\r
- }\r
-\r
- public synchronized void disconnect() throws Exception {\r
+ private synchronized void disconnect() throws Exception {\r
if (locator == null) {\r
throw new IllegalStateException("Client is not connected");\r
}\r
doDisconnect();\r
}\r
\r
- @Deprecated\r
private void doDisconnect() throws Exception {\r
locator = null;\r
serverName = null;\r
}\r
it.remove();\r
}\r
- // logout\r
-// logout();\r
- if (!multiThreadedLogin) {\r
- throw new RuntimeException("This coode is dead and should never be called?"); //FIXME: REM - If you're reading this, this was left here by mistake and should be removed.\r
- }\r
- repositoryMgr = null;\r
- fireDisconnected(this);\r
- }\r
-\r
- public synchronized void reconnect() throws Exception {\r
- if (locator == null) {\r
- throw new IllegalStateException("Client is not connected");\r
- }\r
- InvokerLocator locator = this.locator;\r
- disconnect();\r
- connect(locator);\r
- }\r
\r
- public AutoConfigurationService getConfigurationService() {\r
- return cfg;\r
+ repositoryMgr = null;\r
}\r
\r
public synchronized String getServerName() {\r
return true;\r
}\r
\r
- public String getServerHost() {\r
- if (locator == null) {\r
- throw new IllegalStateException("Client is not connected");\r
- }\r
- return locator.getHost();\r
- }\r
-\r
- public int getServerPort() {\r
- if (locator == null) {\r
- throw new IllegalStateException("Client is not connected");\r
- }\r
- return locator.getPort();\r
- }\r
-\r
public InvokerLocator getLocator() {\r
return locator;\r
}\r
}\r
}\r
\r
-// public RepositoryInstance[] getRepositoryInstances() {\r
-// return repositoryInstances.toArray(new RepositoryInstance[repositoryInstances.size()]);\r
-// }\r
-\r
public static RepositoryInstance newRepositoryInstance(Repository repository) {\r
- ClassLoader cl = Thread.currentThread().getContextClassLoader();\r
- if (cl == null) {\r
- cl = NuxeoClientEmbedded.class.getClassLoader();\r
- }\r
return new RepositoryInstanceHandler(repository).getProxy(); // Why a proxy here?\r
}\r
\r
- public void addConnectionListener(ConnectionListener listener) {\r
- connectionListeners.add(listener);\r
- }\r
-\r
- public void removeConnectionListener(ConnectionListener listener) {\r
- connectionListeners.remove(listener);\r
- }\r
-\r
- private void fireDisconnected(NuxeoClientEmbedded client) {\r
- Object[] listeners = connectionListeners.getListeners();\r
- for (Object listener : listeners) {\r
-// ((ConnectionListener) listener).disconnected(client);\r
- }\r
- }\r
-\r
- private void fireConnected(NuxeoClientEmbedded client) {\r
- Object[] listeners = connectionListeners.getListeners();\r
- for (Object listener : listeners) {\r
-// ((ConnectionListener) listener).connected(client);\r
- }\r
- } \r
}\r
\r
import java.io.File;\r
import java.io.IOException;\r
-import java.util.Collection;\r
import java.util.Hashtable;\r
import java.util.Iterator;\r
\r
public final static String NUXEO_CLIENT_DIR = JEEServerDeployment.NUXEO_CLIENT_DIR;\r
public final static String NUXEO_SERVER_DIR = JEEServerDeployment.NUXEO_SERVER_DIR;\r
private final static String ERROR_CONNECTOR_NOT_INITIALIZED = "NuxeoConnector is not initialized!";\r
-\r
-\r
- private static final String HOST = "127.0.0.1";\r
- private static final int PORT = 62474;\r
\r
private final static String CSPACE_JEESERVER_HOME = "CSPACE_CONTAINER";\r
private final static String CSPACE_NUXEO_HOME = "CSPACE_NUXEO_HOME";\r
\r
- private static final String NUXEO_CLIENT_USERNAME = "NUXEO_CLIENT_USERNAME";\r
- private static final String NUXEO_CLIENT_PASSWORD = "NUXEO_CLIENT_PASSWORD";\r
-\r
private static final NuxeoConnectorEmbedded self = new NuxeoConnectorEmbedded();\r
private NuxeoClientEmbedded client;\r
private ServletContext servletContext = null;\r
public final static NuxeoConnectorEmbedded getInstance() {\r
return self;\r
}\r
-\r
- private String getClientUserName() {\r
- String username = System.getenv(NUXEO_CLIENT_USERNAME);\r
- if (username == null) {\r
- username = "Administrator";\r
- }\r
- return username;\r
- }\r
-\r
- private String getClientPassword() {\r
- String password = System.getenv(NUXEO_CLIENT_PASSWORD);\r
- if (password == null) {\r
- password = "Administrator";\r
- }\r
- return password;\r
- }\r
- \r
- private String getServerRootPath() {\r
- String result = null;\r
- \r
- String prop = System.getenv(CSPACE_JEESERVER_HOME);\r
- if (prop == null || prop.isEmpty()) {\r
- logger.error("The following CollectionSpace services' environment variable needs to be set: " + CSPACE_JEESERVER_HOME);\r
- }\r
- \r
- return result;\r
- }\r
\r
private String getNuxeoServerPath(String serverRootPath) throws IOException {\r
String result = null;\r
// TODO Auto-generated catch block\r
e.printStackTrace();\r
}\r
+ \r
ConnectionFactoryImpl connectionFactory = (ConnectionFactoryImpl)repository;\r
ManagedConnectionFactoryImpl managedConnectionFactory = connectionFactory.getManagedConnectionFactory();\r
String serverUrl = managedConnectionFactory.getServerURL();\r
*/\r
public RepositoryInstance getRepositorySession(RepositoryDomainType repoDomain) throws Exception {\r
RepositoryInstance repoSession = getClient().openRepository(repoDomain);\r
+ \r
if (logger.isDebugEnabled() && repoSession != null) {\r
logger.debug("getRepositorySession() opened repository session");\r
String repoName = repoDomain.getRepositoryName();\r
String databaseName = this.getDatabaseName(repoName); // For debugging purposes only\r
}\r
+ \r
return repoSession;\r
}\r
\r
\r
public RepositoryDescriptor getRepositoryDescriptor(String name) throws Exception {\r
RepositoryDescriptor repo = null;\r
-\r
Iterable<RepositoryDescriptor> descriptorsList = NXCore.getRepositoryService().getRepositoryManager().getDescriptors();\r
for (RepositoryDescriptor descriptor : descriptorsList) {\r
String homeDir = descriptor.getHomeDirectory();\r
public NuxeoClientEmbedded getClient() throws Exception {\r
if (initialized == true) {\r
if (client.isConnected()) {\r
-// client.login();\r
- return client;\r
- } else {\r
- client.forceConnect(this.HOST,\r
- this.PORT);\r
- if (logger.isDebugEnabled()) {\r
- logger.debug("getClient(): connection successful port="\r
- + this.PORT);\r
- }\r
return client;\r
}\r
}\r
\r
void releaseClient() throws Exception {\r
if (initialized == true) {\r
-// client.logout();\r
+ // Do nothing.\r
} else {\r
//\r
// Nuxeo connection was not initialized\r
releaseRepositorySession(repoSession);\r
}\r
}\r
+ \r
return workspaceIds;\r
- }\r
- \r
- @Deprecated\r
- private void loadBundles() throws Exception {\r
- }\r
- \r
+ } \r
}\r