使用EJB和JAX-RS在java中使用企业应用程序时最好的Maven原型是什么,考虑到在不久的将来我将不得不使用JAX-RS作为后端EJB使用JSF2中的前端?
我正在学习Java EE 6.我已经看到它在这个版本的伞规范中取得了多大进展.EJB 3.1比以前的版本更容易,更轻量级,CDI非常棒.
我不熟悉Spring,但我经常读到它提供了一些Java EE堆栈没有的简洁功能.然而,我现在也读到Java EE已经赶上了,现在可以完全与Spring竞争.
我知道从两者中选择取决于很多因素,但如果我们只专注于功能,说最新的趋势等等哪一个具有领先优势?Spring 3可以提供一些资产Java EE 6堆栈不能吗?
那么,Seam框架呢?从我读到的它就像Java EE 6,但有一些补充?
我试图弄清楚这个方法的问题是什么,它使用JPQL来验证数据库中是否已存在电子邮件,由于某种原因它不起作用.有人可以看看吗?或者给另一个替代查询更简单?
@Override
public boolean emailAlreadyExists(String value) {
Query checkEmailExists = em.createQuery("SELECT COUNT(b.email) FROM "
+ Buyer.class.getName() + " b WHERE email = :emailparam");
checkEmailExists.setParameter("emailparam", value);
long matchCounter = 0;
matchCounter = (Long) checkEmailExists.getSingleResult();
if (matchCounter > 0) {
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
这是控制台输出的一部分:
引发者:异常[EclipseLink-8024](Eclipse Persistence Services - 2.0.1.v20100213-r6600):org.eclipse.persistence.exceptions.JPQLException异常描述:解析查询时出现语法错误[SELECT COUNT(b.email)FROM entities .Buyer b WHERE b.email =:emailparam],第1行,第35列:[.]处的语法错误.内部异常:MismatchedTokenException(83!= 78)
我确定它必须对语法做些什么.但是我犯了错误?
我正在实现自己的身份验证机制,我想知道我在做什么是正确的,如果不是我怎么能正确地做到这一点.
首先解释我的身份验证机制如何工作:
- 我的用户的详细信息位于名为Role的对象中.该对象包含3个字段:
电子邮件:String
密码:String
用户类型:Enum
- 当用户访问系统时,对象Role将保存到会话中.
我的问题是:如何根据userType字段限制对用户(角色)访问某些页面?
这是我做但不起作用.
首先我有一个托管bean来检查usser是否被记录.
@ManagedBean
@RequestScoped
public class SecurityController {
//Some attributes...
public String redirectNotBuyer() {
Role role = (Role) FacesContext.getCurrentInstance()
.getExternalContext().getSessionMap().get("userRole");
//Checks if user is logged
if (role == null) {
// Please login
//Add message to authentification
return "login.xhtml";
} else if (role != null) {
if (!role.getType().toString().equalsIgnoreCase("BUYER")) {
// Buyer not authorized
return "main.xhtml";
}
}
return null;
}
public String redirectNotSeller() {
Role …Run Code Online (Sandbox Code Playgroud) 以下情况可能吗?
"SessionService"是一个无状态EJB,它触发一个事件"LoggedInEvent".调用具有观察LoggedInEvent的非静态方法的SessionScoped(Weld)bean"SessionBean",并为该特定用户初始化一些内容.
是否调用了"SessionBean"的正确实例?所有实例都被调用了?我在文档中找不到任何内容.
我已经成功设置了JBoss安全域,并且可以使用BASIC身份验证进行身份验证(如web.xml中所定义).这一切都运作良好.但我无法弄清楚如何使用http request.login方法.
以下安全域(来自jboss-web.xml)适用于BASIC身份验证:
<jboss-web>
<context-root>/myapp</context-root>
<security-domain>java:/jaas/myapp-realm</security-domain>
</jboss-web>
Run Code Online (Sandbox Code Playgroud)
但是当我使用request.login时如下:
public void login() {
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
try {
request.login(username, password);
}
catch (ServletException ex) {
java.util.logging.Logger.getLogger(UserLogin.class.getName()).log(Level.SEVERE, null, ex);
}
}
Run Code Online (Sandbox Code Playgroud)
我得到以下异常:
javax.servlet.ServletException: Failed to authenticate a principal
Run Code Online (Sandbox Code Playgroud)
我知道用户名/密码很好(使用BASIC auth工作正常).我有TRACE级别登录,看起来甚至没有尝试进行身份验证.我错过了什么?
如果您需要有关我的setup/config的更多详细信息,请参阅http://java-web-development.blogspot.com/2011/07/jee-6-security-part-two-implementation.html.我正在使用JBoss 6.
我一直在尝试使用Java EE 6来创建基于Application Server的应用程序,该应用程序将从GWT Web应用程序接收Job对象,并且这些作业将从Java独立应用程序中提取.我一直以为EJB模型会为我提供简单的远程处理方式,因为我的客户端应用程序应该能够在不同的机器上运行.
我使用Glassfish 3.1和Netbeans 7.0.1作为我的IDE,我也使用eclipse Java EE来重现同样的问题.
我一直面临着下一个困难:
InitialContext,是否是使用远程处理的唯一方法?我不应该使用某些配置文件从我的独立应用程序使用@EJB/ @Inject进行一些自动代码注入吗?InitialContext我需要添加到我的库中的工作机制:gf-client-module.jar和weld-osgi-bundle.jarException in thread "main" javax.ejb.EJBException: java.rmi.MarshalException: CORBA MARSHAL 1330446343 No; nested exception is:
org.omg.CORBA.MARSHAL: FINE: IOP00810007: Underflow in BufferManagerReadStream after last fragment in message vmcid: OMG minor code: 7 completed: No
at ContentCreator._JobDispatcherRemote_Wrapper.getSimpleJobForProcessing(ContentCreator/_JobDispatcherRemote_Wrapper.java)
at javaapplication1.JavaApplication1.main(JavaApplication1.java:35)
Caused by: java.rmi.MarshalException: CORBA MARSHAL 1330446343 No; nested exception is:
org.omg.CORBA.MARSHAL: FINE: IOP00810007: Underflow in BufferManagerReadStream after last fragment in …Run Code Online (Sandbox Code Playgroud) 对于我的项目,我想用h:selectOneMenu实现一个组合框.我读了很多关于如何正确处理selectOneMenu以及如何实现自定义转换器的帖子.组合框应存储来自不同数据库表(名为fk_ID)的ID(长),其中约束已到位.到目前为止,一切似乎都按计划运作.现在我的问题:
列fk_ID是可选的,因此组合框中的第一个选项是f:selectItem,没有标记为"choose ..."的值.当我保存表单并更改值时,一切正常,除非我将其设置为"选择...".我得到的错误是约束完整性违规.
我也发现了问题:转换器按预期返回null,但bean接收Long 0.
XHTML:
<h:selectOneMenu value="#{userBean.selectedModel.fk_id}"
id="combobox">
<f:selectItem itemLabel="choose ..." />
<f:selectItems
value="#{userBean.items}"
var="item"
itemLabel="#{item.value}"
itemValue="#{item.id}"
/>
<f:converter converterId="userConverter" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
自定义转换器:
@FacesConverter(value = "userConverter")
public class UserConverter implements Converter {
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
if (arg2 != null && !arg2.equals("null"))
return Long.valueOf(arg2);
return null;
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
return String.valueOf(arg2);
}
} …Run Code Online (Sandbox Code Playgroud) 我有Websphere 7服务器,它不支持JPA 2.0.所以我无法在WAS 7 JPA 2.0应用程序上运行.
但我想知道Spring用户如何在Tomcat或Jetty上运行Hibernate?这个servlet-container也(如WAS 7)不支持Java EE 6.
所以这意味着我可以在WAS 7上运行Hibernate,结果与Tomcat或Jetty相同?.
如果是,使用app-servers进行JPA有什么好处?为什么所有开发人员都不使用servlet-containers而不是app-servers?
我也听说过"容器管理"的东西,它允许一些额外的特性和功能.所以这意味着许多开发人员(使用Spring on Jetty和Tomcat)没有获得使用app-servers的容器管理功能的好处?
PS我知道有关Feature PackJPA 2.0支持的WAS 7的可用补丁,但不是问题.
问题:在Java EE和EJB的上下文中,任何人都可以显示具有两种不同方法的特定DAO类(或多个).和一个服务类在一个事务边界中调用这两个方法并回滚?
我有一个EJB,但我想将它用作服务层,就像在Spring @Transactional方法中一样.
1)这是个好主意吗?
2)如何在一个方法中的一个"事务"中进行多个dao方法调用?我想我必须在transaction.begin()和.上制定一些策略.COMIT()?任何人都可以展示代码示例吗?
一些主要优点是:
a-所有小的不可变DAO事务将在单个数据库连接中的"一次性"中提交(in single transactional boundries)
b-如果说我在服务器上有4个dao调用,而第三个调用失败,那么由于它的一个事务边界,我可以这样做roll backs.
c-我immutable DAO methods会re-usable在很多其他地方.
Java EE示例:
import com.....entities.Users;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
@Stateless
public class UsersBean {
// Add business logic below. (Right-click in editor and choose
// "Insert Code > Add Business Method")
public Users sayHello() {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("CommunityPU");
EntityManager em = emf.createEntityManager();
Users user = em.find(Users.class, 1);
em.close();
emf.close();
return user;
}
} …Run Code Online (Sandbox Code Playgroud) java-ee-6 ×10
java ×4
java-ee ×3
jsf-2 ×3
spring ×2
cdi ×1
comparison ×1
converter ×1
corba ×1
ejb ×1
events ×1
glassfish-3 ×1
hibernate ×1
jaas ×1
java-ee-7 ×1
jax-rs ×1
jboss6.x ×1
jpa ×1
jpql ×1
jsf ×1
maven-2 ×1
netbeans-7 ×1
rmi ×1
security ×1
spring-3 ×1
spring-mvc ×1
tomcat ×1
websphere ×1