我有一个托管bean绑在我index.xhtml
JSF网页,其中使用注入EJB是这样的:
// Code inside managed bean
@EJB
QueryEndpointLocal queryEndpoint;
public void search() {
//...
SearchResult result = queryEndpoint.search(query, resultFormat);
//...
}
QueryEndpoint又将另需EJB命名的优势QueryEngine
:
// Code inside QueryEndpoint
@EJB
QueryEngine queryEngine;
目前,我还有一个EJB非常相似, QueryEngine
命名QueryEngineLite
。 它们的区别在于QueryEngineLite
使用其捆绑到企业应用程序作为一种资源,而本地转储文件QueryEngine
连接到数据库HBASE。 他们都在启动时加载,并有@PostConstruct
其初始化连接-annotated方法。 其中只有一个是使用QueryEndpoint
在部署的应用程序,而另一个只是坐在周围的Startup
和PostConstruct
注释注释掉。 我知道有很多更好的办法来处理这个和我目前的解决方案是一个坏的,但将在该项目的未来阶段改变。 我们有一个计划,以充分利用应用服务器管理连接池与HBASE沟通的,但对于现在的连接是通过它使用HBASE的Java API库处理。
现在,当我使用精简版EJB我没有任何问题。 接口工作,网络服务工作,一切都很好。 只是当我使用HBASE绑EJB( QueryEngine
),与Glassfish的HTTP 403错误的请求的index.xhtml响应和以下几行代码插入server.log中:
INFO: JACC Policy Provider:Failed Permission Check: context (" App/App-war_war ") , permission (" ("javax.security.jacc.WebUserDataPermission" "" "GET") ")
INFO: JACC Policy Provider:Failed Permission Check: context (" App/App-war_war ") , permission (" ("javax.security.jacc.WebUserDataPermission" "" "GET:CONFIDENTIAL") ")
INFO: JACC Policy Provider:Failed Permission Check: context (" App/App-war_war ") , permission (" ("javax.security.jacc.WebUserDataPermission" "/favicon.ico" "GET") ")
INFO: JACC Policy Provider:Failed Permission Check: context (" App/App-war_war ") , permission (" ("javax.security.jacc.WebUserDataPermission" "/favicon.ico" "GET:CONFIDENTIAL") ")
我不知道为什么会这样,以及它如何被固定。 我要指出,这仅仅是JSF页面中使用的第一引擎EJB时不起作用。 如Web服务应用程序的其他部分与两台发动机正常工作。 在此先感谢您的帮助。