名为EJB的方法Aby
调用另一个名为的EJB方法Bob
Bob
标有 @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
bob
交易提交?:a)bob
调用结束时
b)aby
调用结束时
c)其他.什么时候?
我有一个@Stateless
带有@WebService
接口的EJB ,使用容器管理的事务,这意味着如果没有引发系统异常,在调用方法后,容器会自动提交事务.
如果我EntityManager.persist(...)
为具有唯一约束的列尝试两个具有相同值的对象,则容器将PersistenceException
在我的代码之外的提交中向客户端抛出一个.我如何捕获此异常,以便我可以重新抛出自己的应用程序异常?
我是否必须在我的方法中手动提交事务以捕获提交中的异常?(这是EntityManager.flush()
正确的方法吗?)如果是这样,那么拥有容器管理交易的重点是什么?
我有一个我在Tomcat中部署的Web应用程序.我想保护url路径管理/*下的所有页面.
我已将容器管理的安全性设置为web.xml文件中的下一个片段:
<security-role>
<role-name>administrator</role-name>
</security-role>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
<security-constraint>
<web-resource-collection>
<web-resource-name>AdministrationPanel</web-resource-name>
<url-pattern>/administration/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>administrator</role-name>
<role-name>member</role-name>
</auth-constraint>
</security-constraint>
Run Code Online (Sandbox Code Playgroud)
我在$ CATALINA_HOME/conf/tomcat-users.xml中
<user username="userA" password="userA" roles="administrator"/>
Run Code Online (Sandbox Code Playgroud)
一切都很好.我得到一个登录框,我可以作为userA验证自己.
但是,我希望能够通过使用Web应用程序直接存储新用户,更改用户密码等.
是否有可能告诉tomcat以其他方式获取用户,密码和角色?例如,从数据库中检索它们的类.
我使用 Glassfish 2 和容器管理的持久性和 Hibernate 3.2 作为持久性提供者。我的业务逻辑中有一些 finder 方法,它操作一些持久性实体,这些实体是通过EntityManager
. 操作只是改变一个String
属性(从集合中删除一个元素会导致相同的效果)。
我不叫像什么保存或坚持我的EntityManager
。我只想将一些更改的实体返回给我的客户。
似乎当容器提交事务时,对我的实体的更改会自动保存。到目前为止,我完全错过了一些神奇的 Hibernate 或 Glassfish 行为吗?
我相信通过<login-config>
+ <security-constraint>
+ <security-role>
和通过使用实现JSF应用程序的安全性<filter>
是两种不同的方式!是吗?
我尝试通过上面的第一种方法(使用<login-config>
+ <security-constraint>
+ <security-role>
)实现安全性, 但发现我使用受保护和未受保护的HTML组件的受保护网页甚至向未经身份验证的用户提供了不受保护的资源.
我需要完全保护URL,以便受保护的URL甚至不会将该网页的任何部分泄露给未经身份验证的用户.我该怎么做?
而且,使用安全实施<filter>
的web.xml
一种自我管理的方式来处理安全性?我相信,然后您可以在筛选/捕获每个请求时自定义更细粒度的安全性?
所以我有这个库代码,请看......
class Thing
{
public:
class Obj
{
public:
static const int len = 16;
explicit Obj(char *str)
{
strncpy(str_, str, len);
}
virtual void operator()() = 0;
private:
char str_[len];
};
explicit Thing(vector<Obj*> &objs) : objs_(objs) {}
~Thing() {
for(vector<Obj*>::iterator i = objs_.begin(); i != objs_.end(); ++i) {
delete *i;
}
}
private:
vector<Obj*> objs_;
}
Run Code Online (Sandbox Code Playgroud)
在我的客户端代码中......
class FooObj : public Thing::Obj
{
virtual void operator()() {
//do stuff
}
}
class BarObj : public Thing::Obj
{
virtual void …
Run Code Online (Sandbox Code Playgroud)