Skip to main content

connectivity-onpremise

Invoke this skill to enable on-premise connectivity via Cloud Connector. Detects HC_OP_HTTP_PROXY_* environment variables, manual proxy config, or ProxyType=OnPremise. Replaces Neo proxy handling with SAP Cloud SDK automatic connectivity.

معلومات المصدر

المستودع
SAP-samples/btp-neo-java-app-migration
آخر نشاط في المصدر
٢٨ يوليو ٢٠٢٦ في ١٤:٣٥
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٦
التفرعات
٠

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
connectivity-onpremise
description
Invoke this skill to enable on-premise connectivity via Cloud Connector. Detects HC_OP_HTTP_PROXY_* environment variables, manual proxy config, or ProxyType=OnPremise. Replaces Neo proxy handling with SAP Cloud SDK automatic connectivity.
disable-model-invocation
false
allowed-tools
Read, Edit, Write, Bash, Grep, Glob
# Connectivity (On-Premise) Enable connectivity to on-premise systems via Cloud Connector. ## Purpose Replace Neo's manual proxy configuration (`HC_OP_HTTP_PROXY_*` environment variables) with SAP Cloud SDK's automatic handling of on-premise connectivity through Cloud Connector. ## Detection This skill applies if any of these patterns are found: ### In Java source files ```java // Manual proxy configuration String proxyHost = System.getenv("HC_OP_HTTP_PROXY_HOST"); String proxyPort = System.getenv("HC_OP_HTTP_PROXY_PORT"); // OnPremise proxy type handling if ("OnPremise".equals(proxyType)) { // Configure proxy... } // Consumer account header urlConnection.setRequestProperty("SAP-Connectivity-ConsumerAccount", accountId); ``` ### In destination configuration ``` ProxyType=OnPremise ``` ## Prerequisites > **Working directory:** This skill must run inside the `-cf-migration` copy of your app, created by `jakarta-java25-migration` or `neo-to-cf-migration-orchestrator`. If your current directory does not end in `-cf-migration`, switch to it before proceeding. Before invoking this skill, ensure you have invoked: 1. **sdk-replacement** - `Use the sdk-replacement skill` - Sets up SAP Cloud SDK - REQUIRED before this skill 2. **destinations** - `Use the destinations skill` - Configures Destination service - REQUIRED before this skill Also required: - Cloud Connector installed and configured ## Transformation Steps ### Step 1: Remove AuthenticationHeaderProvider from web.xml If present, remove the AuthenticationHeaderProvider resource reference: ```xml <resource-ref> <res-ref-name>authenticationHeaderProvider</res-ref-name> <res-type>com.sap.core.connectivity.api.authentication.AuthenticationHeaderProvider</res-type> </resource-ref> ``` > **Note:** The SAP Cloud SDK handles authentication headers automatically for on-premise connections. ### Step 2: Remove Manual Proxy Handling The SAP Cloud SDK handles all proxy configuration automatically when `ProxyType=OnPremise` is detected in the destination. **Before (Neo) - REMOVE ALL THIS CODE:** ```java private Proxy getProxy(String proxyType) { Proxy proxy = Proxy.NO_PROXY; String proxyHost = null; String proxyPort = null; if (ON_PREMISE_PROXY.equals(proxyType)) { // Get proxy for on-premise destinations proxyHost = System.getenv("HC_OP_HTTP_PROXY_HOST"); proxyPort = System.getenv("HC_OP_HTTP_PROXY_PORT"); } else { proxyHost = System.getProperty("https.proxyHost"); proxyPort = System.getProperty("https.proxyPort"); } if (proxyPort != null && proxyHost != null) { int proxyPortNumber = Integer.parseInt(proxyPort); proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPortNumber)); } return proxy; } private void injectHeader(HttpURLConnection urlConnection, String proxyType) { if (ON_PREMISE_PROXY.equals(proxyType)) { urlConnection.setRequestProperty("SAP-Connectivity-ConsumerAccount", tenantContext.getTenant().getAccount().getId()); } } ``` **After (Cloud Foundry) - Simple and automatic:** ```java import com.sap.cloud.sdk.cloudplatform.connectivity.DestinationAccessor; import com.sap.cloud.sdk.cloudplatform.connectivity.HttpDestination; import org.apache.http.client.HttpClient; import static com.sap.cloud.sdk.cloudplatform.connectivity.HttpClientAccessor.getHttpClient; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String destinationName = request.getParameter("destname"); if (destinationName == null) { destinationName = "on-premise-destination"; } try { // SAP Cloud SDK handles all proxy configuration automatically! HttpDestination destination = DestinationAccessor.getDestination(destinationName).asHttp(); // Get HTTP client - SDK automatically: // - Configures proxy for on-premise destinations // - Adds required headers (SAP-Connectivity-ConsumerAccount, etc.) // - Handles Cloud Connector integration HttpClient httpClient = getHttpClient(destination); HttpGet httpGet = new HttpGet(destination.getUri()); HttpResponse destinationResponse = httpClient.execute(httpGet); int statusCode = destinationResponse.getStatusLine().getStatusCode(); if (statusCode != HttpServletResponse.SC_OK) { response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Destination returned: " + statusCode); return; } destinationResponse.getEntity().writeTo(response.getOutputStream()); } catch (Exception e) { throw new ServletException("Connectivity failed: " + e.getMessage(), e); } } ``` ### Step 2: Remove Resource References Remove from `web.xml`: ```xml <!-- REMOVE --> <resource-ref> <res-ref-name>connectivityConfiguration</res-ref-name> <res-type>com.sap.core.connectivity.api.configuration.ConnectivityConfiguration</res-type> </resource-ref> <!-- REMOVE if present --> <resource-ref> <res-ref-name>TenantContext</res-ref-name> <res-type>com.sap.cloud.account.TenantContext</res-type> </resource-ref> ``` ### Step 3: Update MTA Descriptor Add both destination and connectivity services to `mtad.yaml`: ```yaml modules: - name: ${app-name} type: java.tomcat path: target/<artifactId>.war parameters: buildpack: sap_java_buildpack_jakarta disk-quota: 1024M memory: 1024M properties: ENABLE_SECURITY_JAVA_API_V2: true SET_LOGGING_LEVEL: 'ROOT: INFO' requires: - name: ${app-name}-destination - name: ${app-name}-connectivity resources: - name: ${app-name}-destination type: org.cloudfoundry.managed-service parameters: service: destination service-plan: lite - name: ${app-name}-connectivity type: org.cloudfoundry.managed-service parameters: service: connectivity service-plan: lite ``` ### Step 4: Configure Cloud Connector In Cloud Connector Administration: 1. **Add Subaccount** - Region: Your CF region - Subaccount: Your subaccount ID - Display Name: Descriptive name 2. **Add Virtual Host Mapping** - Click "Cloud to On-Premise" - Add new mapping: - **Back-end Type:** Non-SAP System / HTTP - **Protocol:** HTTP or HTTPS - **Internal Host:** `your-onprem-server.local` - **Internal Port:** `8080` - **Virtual Host:** `onprem-virtual` - **Virtual Port:** `8080` 3. **Add Resources** - Path: `/` (or specific paths) - Access Policy: Allow ### Step 5: Create On-Premise Destination In BTP Cockpit, create destination: | Property | Value | |----------|-------| | Name | `on-premise-destination` | | Type | HTTP | | URL | `http://onprem-virtual:8080` | | Proxy Type | **OnPremise** | | Authentication | NoAuthentication (or as needed) | | Location ID | (Optional) Cloud Connector location ID | For destinations with Location ID: ```json { "Name": "on-premise-destination", "Type": "HTTP", "URL": "http://onprem-virtual:8080", "ProxyType": "OnPremise", "Authentication": "NoAuthentication", "CloudConnectorLocationId": "my-location-id" } ``` ### Step 6: Check Proxy Type Programmatically (if needed) ```java import com.sap.cloud.sdk.cloudplatform.connectivity.ProxyType; HttpDestination destination = DestinationAccessor.getDestination(name).asHttp(); // Check if on-premise if (destination.getProxyType() == ProxyType.ON_PREMISE) { // On-premise handling (SDK handles proxy automatically) logger.info("Using on-premise connectivity"); } ``` ## Configuration Files No new configuration files in the application. Cloud Connector and destinations are configured externally. ## CF Services | Service | Plan | Purpose | |---------|------|---------| | `destination` | lite | Destination configuration | | `connectivity` | lite | On-premise connectivity proxy | ## Verification ### 1. Compile Check ```bash mvn clean compile ``` ### 2. Verify Cloud Connector Connection In Cloud Connector Administration: - Check connection status (should show "Connected") - Verify virtual host mappings ### 3. Test On-Premise Connectivity ```bash # Deploy application cf deploy . -f # Test on-premise destination curl "https://${app-url}/connectivity?destname=on-premise-destination" ``` ### 4. Check Logs for Connectivity ```bash cf logs ${app-name} --recent | grep -i "connectivity\|proxy" ``` ## Common Issues ### Issue: Connection refused **Cause:** Cloud Connector not connected or misconfigured. **Solution:** 1. Check Cloud Connector status 2. Verify virtual host mapping 3. Check Location ID in destination matches Cloud Connector ### Issue: 403 Forbidden on on-premise resource **Cause:** Cloud Connector resource access policy. **Solution:** Add the path to allowed resources in Cloud Connector. ### Issue: Timeout connecting to on-premise **Cause:** Network issue or Cloud Connector firewall. **Solution:** 1. Verify on-premise server is reachable from Cloud Connector host 2. Check firewall rules 3. Increase timeout in destination if needed ### Issue: "No connectivity service bound" **Cause:** Connectivity service not bound to application. **Solution:** Verify `${app-name}-connectivity` is in requires section of mtad.yaml. ## Architecture Overview ``` ┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ CF Application │────▶│ Connectivity │────▶│ Cloud Connector │ │ (Your App) │ │ Service Proxy │ │ (On-Premise) │ └─────────────────┘ └──────────────────┘ └────────┬────────┘ │ ▼ ┌─────────────────┐ │ On-Premise │ │ Backend System │ └─────────────────┘ ``` The SAP Cloud SDK automatically: 1. Detects that the destination has `ProxyType=OnPremise` 2. Routes the request through the connectivity service proxy 3. Adds required headers (`SAP-Connectivity-ConsumerAccount`) 4. Cloud Connector forwards to the actual on-premise system ## Next Steps After completing this skill, proceed to: - [../mail-destinations/SKILL.md](../mail-destinations/SKILL.md) - For on-premise mail server configuration
عرض على GitHub