2012-06-20 3 views
3

EDIT : 해결책을 찾았습니다. 메이븐 빌드 프로세스 동안 코드를 최소화하는 것이 문제였습니다. Java Applet에서 OrientDB를 실행할 수 있습니다.OrientDB를 Java 애플릿에서 실행하십시오.

자바 애플릿에서 내림차순 OrientDB를 시작하는 데 문제가 있습니다. OrientDB 버전 1.0.1이있는 서명 된 애플릿을 사용합니다. 누군가가 OrientDB를 애플릿에 구현했는지, 이것이 가능한지 또는이 예외로 나를 도울 수 있는지 확인할 수 있습니까?

예외 내가 얻을 :

2012-06-20 11:22:24:734 INFO OrientDB Server v1.0.1 is starting up... [OServer]Exception in thread "thread applet-de.test.all.Applet-1" sun.misc.ServiceConfigurationError: com.orientechnologies.orient.core.sql.OCommandExecutorSQLFactory: Provider com.orientechnologies.orient.core.sql.ODefaultCommandExecutorSQLFactory not found 
at sun.misc.Service.fail(Service.java:129) 
at sun.misc.Service.access$000(Service.java:111) 
at sun.misc.Service$LazyIterator.next(Service.java:273) 
at com.orientechnologies.orient.core.sql.OSQLEngine.getCommandFactories(OSQLEngine.java:186) 
at com.orientechnologies.orient.core.sql.OSQLEngine.getCommandNames(OSQLEngine.java:216) 
at com.orientechnologies.orient.core.sql.OSQLEngine.getCommand(OSQLEngine.java:239) 
at com.orientechnologies.orient.core.sql.OCommandExecutorSQLDelegate.parse(OCommandExecutorSQLDelegate.java:41) 
at com.orientechnologies.orient.core.sql.OCommandExecutorSQLDelegate.parse(OCommandExecutorSQLDelegate.java:31) 
at com.orientechnologies.orient.core.storage.OStorageEmbedded.command(OStorageEmbedded.java:62) 
at com.orientechnologies.orient.core.command.OCommandRequestTextAbstract.execute(OCommandRequestTextAbstract.java:60) 
at com.orientechnologies.orient.core.metadata.schema.OSchemaShared.createClass(OSchemaShared.java:218) 
at com.orientechnologies.orient.core.metadata.schema.OSchemaShared.createClass(OSchemaShared.java:164) 
at com.orientechnologies.orient.core.metadata.schema.OSchemaShared.createClass(OSchemaShared.java:145) 
at com.orientechnologies.orient.core.metadata.schema.OSchemaShared.createClass(OSchemaShared.java:116) 
at com.orientechnologies.orient.core.metadata.schema.OSchemaProxy.createClass(OSchemaProxy.java:65) 
at com.orientechnologies.orient.core.metadata.security.OSecurityShared.createMetadata(OSecurityShared.java:259) 
at com.orientechnologies.orient.core.metadata.security.OSecurityShared.create(OSecurityShared.java:202) 
at com.orientechnologies.orient.core.metadata.security.OSecurityProxy.create(OSecurityProxy.java:37) 
at com.orientechnologies.orient.core.metadata.OMetadata.create(OMetadata.java:68) 
at com.orientechnologies.orient.core.db.record.ODatabaseRecordAbstract.create(ODatabaseRecordAbstract.java:171) 
at com.orientechnologies.orient.core.db.ODatabaseWrapperAbstract.create(ODatabaseWrapperAbstract.java:53) 
at com.orientechnologies.orient.core.db.ODatabaseRecordWrapperAbstract.create(ODatabaseRecordWrapperAbstract.java:54) 
at com.orientechnologies.orient.server.OServer.loadStorages(OServer.java:451) 
at com.orientechnologies.orient.server.OServer.loadConfiguration(OServer.java:394) 
at com.orientechnologies.orient.server.OServer.startup(OServer.java:152) 
at com.orientechnologies.orient.server.OServer.startup(OServer.java:143) 
at com.orientechnologies.orient.server.OServer.startup(OServer.java:132) 
at de.test.all.Applet$1.run(Applet.java:132) 
at de.test.all.Applet$1.run(Applet.java:125) 
at java.security.AccessController.doPrivileged(Native Method) 
at de.test.all.Applet.init(Applet.java:124) 
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1639) 
at java.lang.Thread.run(Thread.java:680) 

내 애플릿 코드는 DB를 시작합니다 :

public class Applet extends java.applet.Applet { 

    OrientDbConfigurationLoader configLoader = null; 
    OServer server = null; 
    ODatabaseDocumentTx db = null; 

    @Override 
    public void init() { 
     AccessController.doPrivileged(new 
       PrivilegedAction<OServer>() { 

      public OServer run() { 
       configLoader = new OrientDbConfigurationLoader("db/", "test"); 

       try { 
        server = OServerMain.create(); 
        server.startup(configLoader.loadDefaultConfig()); 
        server.activate(); 
       } catch (InstanceAlreadyExistsException e) { 
        server = OServerMain.server(); 
       } catch (Exception e) { 
        System.out.println("Something went wrong while the server should start"); 
        e.printStackTrace(); 
       } 

       try { 
        db = new ODatabaseDocumentTx("memory:temp"); 
        db = db.open(OrientDbConfigurationLoader.USERNAME, OrientDbConfigurationLoader.PASSWORD); 
       } catch (Exception e) { 
        System.out.println("Can't init the in-memory db."); 
        e.printStackTrace(); 
       } 
       return null; 
      } 
     }); 
    } 
} 

답변

1

문제는 자바 서비스 레지스트리의 사용을 보인다. 난 그냥 SVN 트렁크 (r5909)이 체크 추가 한

ServiceRegistry.lookupProviders(clazz); 

:

OClassLoaderHelper.lookupProviderWithOrientClassLoader() 

가 호출 봐 이런 식으로 A의

try { 
      factories.add(ite.next()); 
     } catch (Exception e) { 
      OLogManager.instance().warn(null, "Cannot load OCommandExecutorSQLFactory instance from service registry", e); 
     } 

를 덤프 WARN을하지만, 필요한 경우 자신의 공장을 계속 구성 할 수 있습니다.

관련 문제