전: Osgi 실전 중 질문
10371 단어 osgi
1. Import-Package 시 org.eclipse.equinox.servlet.api 이 가방은 죽어라 찾을 수 없습니다.eclipse3.4 이미 존재하지 않습니다.javax를 직접 가져옵니다.servlet_2.4.0.v200806031604.jar이면 돼요. javax가 추가되지 않았다면.서브렛에 INSTALLED UserValidatorWebBundle1.0.0 강제 시동은 다음과 같은 이상 org를 던집니다.osgi.framework.BundleException: The bundle could not be resolved. Reason: Missing Constraint: Require-Bundle: javax.servlet; bundle-version="2.4.0"
2. Equinox OSGI Declarative 서비스를 사용하려면 다운로드eclipse-equinox-SDK-3.4.2.zip가 필요합니다. Declarative 서비스가 Eclipse의 기본 패키지에 포함되지 않았기 때문에 Eclipse의 사이트에서 다운로드를 받아야 합니다. 다운로드 패키지의plugins와features를 eclipse에 복사해서 org를 다시 시작해야 합니다.eclipse.equinox.ds_1.0.0.v20080427-0830.jar는 실행할 때 사용하는 bundleorg입니다.eclipse.equinox.ds가 org를 사용했습니다.eclipse.equinox.util_1.0.0.v20080414.jar는 모두 config에 있어야 합니다.ini에 추가 및 시작
3. 모든 것이 정상적으로 작동하는 것 같은데log에는 다음과 같은 이상java가 있습니다.lang.IllegalStateException: Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started (see config.ini).org를 시작해야 합니다.eclipse.osgi.util_3.1.300.v20080303.jar 이 bundle
4. http://localhost/demo/page/login.htm 이 페이지에 접근할 수 없으면 org.eclipse.equinox.http_1.0.200.v20080421-2006.jar가 시작되지 않았습니다. htm가 접근할 수 있는지 http://localhost/demo/login 접근할 수 없습니다.eclipse.equinox.http.servlet_1.0.100.v20080427-0830.jar이 시작되지 않았습니다
사용자 로그인 인증 모듈에서 시작할 Bundleid State Bundle0 ACTIVE org를 요약합니다.eclipse.osgi_3.4.2.R34x_v20080826-12301 ACTIVE ConfigFileValidatorBundle_1.0.02 ACTIVE DBValidatorBundle_1.0.04 ACTIVE UserValidatorBundle_1.0.05 ACTIVE LDAPValidatorBundle_1.0.09 ACTIVE UserValidatorWebBundle_1.0.010 ACTIVE org.eclipse.equinox.util_1.0.0.v2008041411 ACTIVE org.eclipse.equinox.ds_1.0.0.v20080427-083012 ACTIVE javax.servlet_2.4.0.v20080603160413 ACTIVE org.eclipse.osgi.services_3.1.200.v2007120314 ACTIVE org.eclipse.equinox.http.servlet_1.0.100.v20080427-083015 ACTIVE org.eclipse.equinox.http_1.0.200.v20080421-200617 ACTIVE org.eclipse.osgi.util_3.1.300.v20080303
Bundle이 부족하면 직접 인터넷에서 내려오시면 됩니다. 그리고 Plug-ins and Fragments를 가져오는 방식으로 Bundle를 가져오면 인용할 수 있습니다. 그래서 깊은 것으로 생각하지 말고 실행할 때 "Add Required Bundles"를 사용하세요. 이것은 저희가 사용할 Bundles를 가입하는 데 큰 도움이 됩니다.
첫 번째 예(원본의classic)에서 코드 등록 방식으로 서비스를 등록한다. 즉, 서비스 인터페이스를 실현하는 모든 bundle의Activator에서 자신의 서비스를 지정한 서비스 이름으로 등록한다. 예를 들어
Java 코드
package org.riawork.demo.user.validator;
/*
* RIAWork.org
*
* OSGI Opendoc Demo
*/
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import org.riawork.demo.service.user.Validator;
import org.riawork.demo.service.user.impl.ConfigFileValidatorImpl;
/**
* desc: ConfigFileBundle Activator,
*
* @author jerry
*/
public class Activator implements BundleActivator {
// --------------------------------------------Instance Variables
private ServiceRegistration serviceReg=null;
// --------------------------------------------Public Method
/* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
*/
// Validator Bunble Activator Validator.class.getName() , Validator.class.getName()
public void start(BundleContext context) throws Exception {
serviceReg=context.registerService(Validator.class.getName(), new ConfigFileValidatorImpl(), null);
}
/* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
if(serviceReg!=null)
serviceReg.unregister();
}
}
두 번째 예(원본의 ds)는 프로필에 설명된 방식으로 bundle의 서비스를 발표한다. 즉,ConfigFileValidatorBundle,DBValidatorBundle,LDAPValidatorBundle 이 세 가지 UserValidatorBundle 인터페이스를 실현하는 bundle에는Activator가 그들의 실현 서비스를 등록하지 않고 MANIFEST에 등록한다.MF 프로필에 Service-Component 가입: OSGI-INF/component.프로젝트 디렉터리에 성명된 OSGI-INF/component를 발표합니다.xml 프로필 서비스입니다.
포장할 때 문서에 따라 하면 안 돼요. 포장할 때 org.eclipse.osgi의jar 패키지와run.bat는 하나의 디렉터리에 configuration 디렉터리 (config.ini 파일 저장) 와 bundles 디렉터리 (자신이 포장한 bundle와 그들이 실행하는 의존적인 bundle 저장) 를 재구성하고, 문서의 config를 복사하는 것을 주의해야 한다.config에 대한 ini 내용.ini 파일은 실행할 수 없습니다. 중국어 문자가 있을 수 있습니다.
내가 이곳에서 운행할 수 있는 것은 다음과 같다.
Xml 코드
osgi.noShutdown=true
# Bundle, Bundle ,
# StartLevel Service
# Unable to acquire application service. Ensure that the org.eclipse.core.runtime
eclipse.ignoreApp=true
#osgi.bundles=reference\:file\:bundles/ConfigFileValidatorBundle_1.0.0.jar@start,reference\:file\:bundles/DBValidatorBundle_1.0.0.jar@start,reference\:file\:bundles/LDAPValidatorBundle_1.0.0.jar@start,reference\:file\:bundles/org.eclipse.equinox.http_1.0.301.R35x_v20090728.jar@start,reference\:file\:bundles/javax.servlet_2.5.0.v200806031605.jar@start,reference\:file\:bundles/org.eclipse.osgi.services_3.2.0.v20090520-1800.jar@start,reference\:file\:bundles/UserValidatorBundle_1.0.0.jar@start, reference\:file\:bundles/UserValidatorWebBundle_1.0.0.jar@start
osgi.bundles=plugins/ConfigFileValidatorBundle_1.0.0.jar@start,\
plugins/DBValidatorBundle_1.0.0.jar@start,\
plugins/LDAPValidatorBundle_1.0.0.jar@start,\
plugins/org.eclipse.equinox.http_1.0.301.R35x_v20090728.jar@start,\
plugins/javax.servlet_2.5.0.v200806031605.jar@start,\
plugins/org.eclipse.osgi.services_3.2.0.v20090520-1800.jar@start,\
plugins/UserValidatorBundle_1.0.0.jar@start,\
plugins/UserValidatorWebBundle_1.0.0.jar@start,\
plugins/org.eclipse.equinox.ds_1.1.1.R35x_v20090806.jar@start,\
plugins/org.eclipse.equinox.util_1.0.100.v20090520-1800.jar@start
osgi.bundles.defaultStartLevel=4
여기에 ds의 bundle를 넣는 것을 잊지 마십시오. 그렇지 않으면 서비스-Component: OSGI-INF/component를 사용하십시오.xml 설정은 작동하지 않습니다. 서비스를 발표할 수 없습니다. ds의bundle로 스캔하여 해당하는 서비스를 발견하고 관리에 추가했기 때문입니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다: