我查看了JBoss的JSR-299上下文和依赖注入的焊接参考实现,我想知道其他CDI实现如何相互比较.具体来说,我了解Weld,Resin CanDI(由Caucho)和Apache OpenWebBeans.
我正在尝试学习Java EE 6,我只是想知道如何在Java EE 6中实现认证机制.
这是Java EE 6认证示例:
public void login() {
if (account.authenticate(name, password) == null) {
message = "Invalid user name or password!";
} else {
message = " Login successful";
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
try {
request.login(this.name, this.password);
Principal principal = FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();
name = principal.getName();
} catch (ServletException e) {
// Handle unknown username/password in request.login().
context.addMessage(null, new FacesMessage("Unknown login"));
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有以下问题:
最后,谢谢你的建议,我需要一个非常好的教程或建议.
到目前为止,我总是喜欢直接使用Hibernate而不是JPA 1.0,因为JPA缺少我需要的一些重要功能和Hibernate提供的:Criteria API,二级缓存,单向OneToMany和其他一些.
现在,随着JPA 2.0的出现以及JPA 1.0(http://en.wikibooks.org/wiki/Java_Persistence/What_is_new_in_JPA_2.0%3F)中最初缺少的所有新功能,我想知道是否仍然需要直接使用Hibernate.
你怎么看?在Hibernate 3.5中我还没有用JPA 2.0做什么?
我是一名Java SE开发人员,但我有丰富的Web背景(PHP,Perl/CGI等),现在我正在开始新项目.它将具有Web界面,意大利面条业务逻辑,关系数据库作为存储和与其他服务的连接.我是从零开始做的.
我的同事告诉我要使用弹簧,弹簧安全装置和支柱.我简要地看一下Java EE 6规范,发现它几乎涵盖了企业应用程序的所有方面.我问同事他们为什么需要spring和struts,但看起来他们只是因为熟悉它们并且不熟悉经典的Java EE 6堆栈而使用技术.
所以,我的问题是:Java EE 6有什么不好的地方?如果有JNDI查找,为什么我需要spring?为单元测试创建假的InitialContext需要一两天的时间.这就是全部:我坚持使用像春天这样的外部工具.如果Servlets规范中内置了安全性,为什么我需要spring-security?我可以使用web.xml将任何请求映射到任何servlet,不需要struts.xml.我可以使用servlet-filters而不是struts拦截器.有RMI,所以我不需要弹簧遥控器.等等..
如果有Java EE 6,为什么我要用所有那些花哨的东西来烦扰自己呢?
我真的很想找到Java EE 6还不够的情况.你有什么?
谢谢!
我在Java EE6 Singleton Session Bean中有一个方法,每隔30秒由一个@Schedule(...)计时器调用.这可以正常工作,直到在方法中抛出异常并捕获异常(异常是在try-catch块中抛出并捕获).异常发生后,计时器停止调用该方法.
无论是否发生异常,我如何强制计时器再次调用该方法?
最好的祝福,
基督教
EntityManager根据定义,它不是线程安全的.Servlets规范说,在非分布式环境中,如果没有实现SingleThreadModel,每个定义只有一个servlet实例.
因此,在Java EE中,当您EntityManager通过@PersistenceContextServlet的字段注入时- 它不是线程安全的:
public class MyServlet extends HttpServlet {
// Not thread-safe, should be using EMF instead.
@PersistenceContext
private EntityManager em;
}
Run Code Online (Sandbox Code Playgroud)
这是正确的说,即使Spring bean的默认范围是单例,它EntityManager是线程安全的,因为Spring ThreadLocal用来绑定它的事务和EntityManager它?
上面的Servlets示例在Spring中仍然有效吗?它仍然不是线程安全的吗?
该ThreadLocal方法是否仅适用于Spring托管bean,而普通servlet不是其中之一?
据我所知,注入的是容器的责任EntityManager.在Glassfish Java EE实现中,应用程序服务器发现了@PersistenceContextas注入点.
它在Spring中看起来如何?Spring Framework是否负责发现这些注释或JPA实现者的责任?
我有一个关于POJO中List的初始化的问题,因为它遵循下一个代码:
public class Person {
//other fields...
private List<String> friends=new ArrayList<>();
public List<String> getFriends() {
return friends;
}
public void setFriends(List<String> friends) {
this.friends = friends;
}
}
Run Code Online (Sandbox Code Playgroud)
或者它是这样的更好,并在其他类中具有初始化(例如Bean(JSF))
public class Person {
//other fields...
private List<String> friends;
public List<String> getFriends() {
return friends;
}
public void setFriends(List<String> friends) {
this.friends = friends;
}
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是什么方法更好?
我有一个工作的应用程序,我使用Java EE 6与EclipseLink进行持久化和PostgreSQL数据库.
对于User-Registration,我想在PostgreSQL中将密码设置为:
... password = crypt('inputPassword',gen_salt('bf')) ...
Run Code Online (Sandbox Code Playgroud)
由于我不能使用DigestUtils,我必须手动将用户插入数据库.为了保持我的应用程序可配置,我不想用一个查询DataSource,
InitialContextInstance.lookup(dataSource)而是以某种方式从EntityManager中提取它(或连接),如:
DataSource ds = entityManagerInstance.someFunctionThatReturnsADataSourceOrConnection();
Run Code Online (Sandbox Code Playgroud)
或者是否可以使用createNativeQuery或类似的东西与预备语句结合以防止注入?
比方说,我决定使用Java EE堆栈来实现我的企业应用程序.
现在,对于域建模(或:用于设计MVC的M),我可以安全地假设和使用哪些API,哪些我应该远离......比如说,通过抽象层?
例如,
我应该继续使用Hibernate/JPA API调用我的模型吗?或者,我应该构建一个抽象...我自己的持久层,以避免对这两个特定的持久性API进行硬编码?为什么我这样问:几年前,这个Kodo API被Hibernate取代了.如果设计了一个持久层并对该层编码模型的其余部分(而不是通过调用特定的供应商API来乱丢模型),那么它将允许一个(相对)轻松地从Kodo切换到Hibernate到xyz.
是否建议在域模型中积极使用持久性供应商提供的*QL?我不知道由于大量使用类似HQL的语言而产生的任何现实问题(如性能,可伸缩性,可移植性等).为什么我这样问:我希望尽可能避免编写自定义代码,这可以通过比SQL更便携的查询语言来实现.
对不起,我是这个地区的新手.我在哪里可以找到关于此主题的更多信息?
我在这里写一个问题,因为我自己几个月都找不到解决方案.我的情况:我有一个用java编写的客户端服务器应用程序,它使用Java2ee 6和EJB3.0.服务器端部署在glassfish 3.0上.我需要为应用程序开发/实现登录模块.必须使用ldap服务器进行身份验证,并在应用程序内部处理授权.因此,我想聘请JAAS技术来进行身份验证和授权.我这样做是为了例如像在这里.然后我按照本教程和官方文档进行登录.我的问题是ldap登录不起作用.
我的代码:
LoginContext lc = null;
try {
CallbackHandler handler = new CallbackHandler() {
public void handle(Callback[] callbacks) throws UnsupportedCallbackException {
for( int i = 0; i < callbacks.length; i++ ) {
if( callbacks[i] instanceof NameCallback ) {
// prompt the user for a username
NameCallback nc = (NameCallback)callbacks[i];
nc.setName("admin");
System.out.println("Login done.");
} else if( callbacks[i] instanceof PasswordCallback ) {
// prompt the user for sensitive information
PasswordCallback pc = (PasswordCallback)callbacks[i];
pc.setPassword("mypassword".toCharArray()); …Run Code Online (Sandbox Code Playgroud)