임베디드 Glassfish v3:sun-resources.xml을 프로그래밍 방식으로 배포하는 데 실패함
-
16-09-2020 - |
문제
Glassfish 임베디드 API를 사용하여 jpa-ejb-web 프로젝트를 독립형 애플리케이션으로 패키징할 수 있기를 원합니다.
JPA 계층을 사용하려면 sun-resource.xml 구성을 배포해야 합니다. 이는 다음과 같이 가능해야 합니다. asadmin 명령 add-resources path\to\sun-resources.xml
.이를 수행하는 코드는 다음과 같습니다.
String command = "add-resources";
ParameterMap params = new ParameterMap();
params.add("", "...\sun-resources.xml" );
CommandRunner runner = server.getHabitat().getComponent(CommandRunner.class);
ActionReport report = server.getHabitat().getComponent(ActionReport.class);
runner.getCommandInvocation(command, report).parameters(params).execute();
그러나 Glassfish는 다음과 같이 이를 거부합니다.
15-Jul-2010 16:34:12 org.glassfish.admin.cli.resources.AddResources execute
극심한:리소스 추가에 문제가 발생했습니다.
java.lang.Exception: ...\gfembed6930201441546233570tmp\lib\dtds\sun-resources_1_4.dtd (The system cannot find the path specified)
at org.glassfish.admin.cli.resources.ResourcesXMLParser.initProperties(ResourcesXMLParser.java:163)
at org.glassfish.admin.cli.resources.ResourcesXMLParser.<init>(ResourcesXMLParser.java:109)
at org.glassfish.admin.cli.resources.ResourcesManager.createResources(ResourcesManager.java:67)
at org.glassfish.admin.cli.resources.AddResources.execute(AddResources.java:106)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:305)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:320)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1176)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$900(CommandRunnerImpl.java:83)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1235)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1224)
at javaapplication4.Main.main(Main.java:55)
그리고 실제로는 없습니다 lib
표시된 경로의 디렉터리...
내 코드에 뭔가 문제가 있는 걸까요?(나는 사용한다 glassfish-embedded-all-3.0.1.jar)
감사해요
해결책
임베디드 Glassfish에 대한 임베디드 파일 시스템을 지정하여 문제를 해결하고 /path/to/my/glassfish/lib/dtds
누락된 파일이 있는 폴더입니다.
EmbeddedFileSystem.Builder efsb = new EmbeddedFileSystem.Builder();
efsb.autoDelete(false);
efsb.installRoot(new File("/path/to/my/glassfish"), true);
EmbeddedFileSystem efs = efsb.build();
Server.Builder builder = new Server.Builder("test");
builder.embeddedFileSystem(efs);
builder.logger(true);
Server server = builder.build();
server.addContainer(ContainerBuilder.Type.all);
server.start();
실행이 끝나면 Glassfish에게 폴더를 삭제하지 말라고 요청합니다.
다른 팁
이것이 가능한지 잘 모르겠습니다. 달리기 asadmin
Sun GlassFish Embedded Server API를 사용하는 명령 그러한 사용 사례를 언급하지 않습니다( sun-resources.xml
).
하지만 저는 미리 구성된 domain.xml
배포하려고 하는 대신 sun-resource.xml
파일을 열면 결과는 비슷해야 합니다.로부터 Sun GlassFish Enterprise Server v3 내장 서버 안내서:
기존 사용
domain.xml
파일기존 사용
domain.xml
파일은 응용 프로그램에서 프로그래밍 방식으로 임베디드 엔터프라이즈 서버를 구성 할 필요가 없습니다.응용 프로그램은 기존에서 도메인 구성 데이터를 얻습니다domain.xml
파일.비 침전 된 엔터프라이즈 서버 설치의 관리 인터페이스를 사용 하여이 파일을 만들 수 있습니다.기존을 지정하려면domain.xml
파일을 호출하고installRoot
,instanceRoot
, 또는configurationFile
의 방법EmbeddedFileSystem.Builder
이러한 방법의 클래스 또는 조합.
문서에서는 이를 수행하는 방법을 보여주는 코드 샘플을 제공합니다(매우 간단해야 함).