根据this article和许多其他文档,除非使用java:app/
作为前缀,否则全局部署JDBC资源(可在服务器范围内使用)。当我将jdbc/myDataSource
更改为java:app/jdbc/myDataSource
而myConnectionPool
更改为java:app/myConnectionPool
时,部署会因此异常而失败:
com.sun.appserv.connectors.internal.api.ConnectorRuntimeException: Invalid resource : { ResourceInfo : (jndiName=java:app/jdbc/myDataSource__pm), (applicationName=com.example.web_example_war_1.0-SNAPSHOT) }
在没有java:app/
前缀的情况下工作正常,但资源在服务器范围内部署。
答案 0 :(得分:0)
您是否正在部署EAR文件中捆绑的WAR文件,因为根据您的'java:app /'前缀用于EAR部署的链接。
答案 1 :(得分:0)
在阅读this section之后,我意识到我不必在glassfish-resources.xml
中使用java:app/
范围前缀为资源添加前缀。根据该文件:
如果资源定义是在归档中提供的(即.ear或其他归档中的 glassfish-resources.xml ),则假定它们是作用域资源。
然后它继续说如果应用程序是EAR并且路径是META-INF/glassfish-resources.xml
或者(在我的情况下)它是WAR并且路径是WEB-INF/glassfish-resources.xml
,则资源是应用程序作用域。
这可以解释为什么GlassFish会破坏这个名字。最有可能是名称冲突,因为我添加了前缀。