All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.cayenne.rop.JettyHttpClientConnectionProvider Maven / Gradle / Ivy

There is a newer version: 4.2.1
Show newest version
/*****************************************************************
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 

* http://www.apache.org/licenses/LICENSE-2.0 *

* Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. ****************************************************************/ package org.apache.cayenne.rop; import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.ConfigurationException; import org.apache.cayenne.configuration.Constants; import org.apache.cayenne.configuration.RuntimeProperties; import org.apache.cayenne.di.DIRuntimeException; import org.apache.cayenne.di.Inject; import org.apache.cayenne.di.Provider; import org.apache.cayenne.remote.ClientConnection; import org.apache.cayenne.rop.http.JettyHttpROPConnector; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.AuthenticationStore; import org.eclipse.jetty.client.util.BasicAuthentication; import org.eclipse.jetty.util.ssl.SslContextFactory; import java.net.URI; /** * This {@link Provider} initializes HTTP/1.1 {@link ClientConnection} through {@link JettyHttpROPConnector} which uses * {@link org.eclipse.jetty.client.HttpClient}. */ public class JettyHttpClientConnectionProvider implements Provider { private static Log logger = LogFactory.getLog(JettyHttpROPConnector.class); @Inject protected RuntimeProperties runtimeProperties; @Inject protected ROPSerializationService serializationService; @Override public ClientConnection get() throws DIRuntimeException { String sharedSession = runtimeProperties .get(Constants.ROP_SERVICE_SHARED_SESSION_PROPERTY); JettyHttpROPConnector ropConnector = createJettyHttpRopConnector(); ProxyRemoteService remoteService = new ProxyRemoteService(serializationService, ropConnector); HttpClientConnection clientConnection = new HttpClientConnection(remoteService, sharedSession); ropConnector.setClientConnection(clientConnection); return clientConnection; } protected JettyHttpROPConnector createJettyHttpRopConnector() { String url = runtimeProperties.get(Constants.ROP_SERVICE_URL_PROPERTY); if (url == null) { throw new ConfigurationException( "No property defined for '%s', can't initialize connection", Constants.ROP_SERVICE_URL_PROPERTY); } String username = runtimeProperties.get(Constants.ROP_SERVICE_USERNAME_PROPERTY); long readTimeout = runtimeProperties.getLong( Constants.ROP_SERVICE_TIMEOUT_PROPERTY, -1L); HttpClient httpClient = initJettyHttpClient(); addBasicAuthentication(httpClient, url, username); JettyHttpROPConnector result = new JettyHttpROPConnector(httpClient, url, username); if (readTimeout > 0) { result.setReadTimeout(readTimeout); } return result; } protected HttpClient initJettyHttpClient() { try { HttpClient httpClient = new HttpClient(new SslContextFactory()); httpClient.start(); return httpClient; } catch (Exception e) { throw new CayenneRuntimeException("Exception while starting Jetty HttpClient.", e); } } protected void addBasicAuthentication(HttpClient httpClient, String url, String username) { String password = runtimeProperties.get(Constants.ROP_SERVICE_PASSWORD_PROPERTY); String realm = runtimeProperties.get(Constants.ROP_SERVICE_REALM_PROPERTY); if (username != null && password != null) { if (realm == null && logger.isWarnEnabled()) { logger.warn("In order to use JettyClient with BASIC Authentication " + "you should provide Constants.ROP_SERVICE_REALM_PROPERTY."); return; } if (logger.isInfoEnabled()) { logger.info( "Adding authentication" + "\nUser: " + username + "\nRealm: " + realm); } AuthenticationStore auth = httpClient.getAuthenticationStore(); auth.addAuthentication(new BasicAuthentication(URI.create(url), realm, username, password)); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy