Tag: ejb

对Hibernate(和JPA)标准表达能力的限制?

我在层次结构中有4个实体,如下所示: Parent | ———————— | | | Child1 Child2 Child3 我有兴趣在单个Query中使用条件检索Child1和Child2的所有实例(但不是Child3实例)。 使用HQL(或JPQL)很容易做到,如下所示: FROM Parent obj WHERE obj IN (FROM Child1 where fieldOfChild1=”aa”) OR obj IN (FROM Child2 where fieldOfChild2=55) 我已经研究了Hibernate Criteria和JPA Criteria API,但我找不到将此查询表达为Criteria的方法 。 这是Criteria API的限制吗? 还是只是我错过了路? 任何提示?

在EJB 3中使用客户端jar和设计模式

我是EJB 3的新手,并且对谷歌没有提供满意答案的一些疑惑感到困惑。 我正在尝试使用一些基类和一些实用程序方法创建一个框架,我的其他应用程序可以使用它们。 所有应用程序都将部署在同一台服务器上。 当我试图在eclipse中创建一个新的EJB 3.0项目时,它会询问我是否也要创建一个客户端jar。 这个客户端jar有什么用途? 我的ejbmodule是作为EAR文件的一部分添加的。 所以我真的需要这个客户端jar吗? 我是否需要创建本地和远程接口? 或者只是远程接口会做什么? 我决定将所有接口保存在一个名为projCommon的项目和projApps中的bean定义中。 bean类实现的远程接口在projCommon中。 所以projApps依赖于projCommon。 我计划使用projCommon中定义的委托方法来调用bean类。 这意味着projCommon也依赖于projApps,rt? 并导致循环依赖。 EJB是如何直接注入的? 如果你能对我的怀疑提供解释,那将非常有帮助。

EntityManager的find()方法是否创建了JPA类的新实例?

我有点困惑。 问题在于标题,这就是我要问的原因。 我在一个VM上运行JSF + JPA Web应用程序。 JPA课程有@Transient字段。 现在想象一些Web用户打开一些页面并执行下面的代码 import javax.persistence.EntityManager; // method 1 in backing bean Agent a = entityManager.find(Agent.class, “007”); a.setTransientValue(“Aston Martin”); 当另一个Web用户/线程尝试读取该瞬态值时,我应该期望什么输出: // method 2 in backing bean Agent a = entityManager.find(Agent.class, “007”); String val = a.getTransientValue(); 换句话说,就JVM而言, find()方法总是返回新的类实例或相同或“它取决于”? 我已经通过JSR-220查找答案,没有成功,任何帮助或文档参考将不胜感激。

EJB 3 Stub生成

我说有一个与ejb-3兼容的ejb @Remote interface Hai{ String sayHai(); } Stateless(name = “xxx”, mappedname=”yyy”) public class HaiImpl implements Hai{ public String sayHai(){ return “Hai”; } } 我需要为这个EJB生成存根。 但我不想使用websphere工具或maven工具。 有没有办法使用jdk生成存根? 当您创建远程客户端时 Hai hai = (Hai)ctx.lookup(“yyy#com.zz.Hai”); System.out.println(hai.sayHai()); 将在weblogic或jboss中工作,但在websphere中,即使是ejb 3,你也需要这样写 Object o = ctx.lookup(“yyy”); Hai hai = (Hai)javax.rmi.PortableRemoteObject.narrow(o,Hai.class); System.out.println(hai.sayHai()); 在这种情况下,如果存根不存在于客户端,它将抛出exception,有一种方法可以使用websphere ejb stub generater工具生成存根。 但我不想使用任何平台特定的工具。

如何从同一GlassFish Server上的其他应用程序注入EJB?

我在本地glassfish服务器上运行了两个应用程序。 一个租住bicylces,一个买火车票。 我现在想从火车应用程序拨打远程ejb,允许在所选时间租用自行车,但我不确定该怎么办。 我已经尝试了几种不同的方法。 两个应用程序都在不同的包中,列车应用程序必须知道自行车远程接口,但我不知道如何实现这一点。 远程接口(自行车应用程序): @Remote public interface FahrradRemote { public List findAvaible(Date start, Date end); public void addAuftrag(Fahrrad fahrrad, Date startDate, Date endDate); public boolean login(String name, String passwort); } 我想打电话的自行车EJB: @Stateless(name=”FahrradService”,mappedName=”FahrradService”) public class FahrradService implements javax.ejb.SessionBean, FahrradRemote, Serializable { @PersistenceContext private EntityManager em; Kunde customer; … } 火车应用程序的开头: @Named @SessionScoped public class […]

Java EE 6:如何从无状态会话Bean调用有状态会话Bean?

我有一个状态会话Bean(SFSB),它充当身份validation模块。 在SFSB中,我存储了当前登录的用户。此外,我还有一些外观(无状态会话Bean(SLSB))处理我的实体的JPA / SQL内容。 为了检查当前用户的访问权限,我尝试从SLSB中调用SFSB。 但是当从SLSB调用时,当前用户字段始终为“null”。 直接调用SFSB时,正确设置当前用户字段…为了调用我使用@EJB注释。 任何想法可能是什么问题? 这是某种上下文问题吗? 通常是否可以从SLSB调用SFSB来保留它的状态? 提前谢谢了!

“本地事务已经有1个非XA资源:无法添加更多资源”错误

在阅读了有关此错误的先前问题后,似乎所有这些问题都表明您需要在所有数据源上启用XA。 但: 如果我不想要分布式事务怎么办? 如果我想同时在两个不同的数据库上启动事务,但是在一个数据库上提交事务并在另一个数据库上回滚事务,我该怎么办? 我想知道我的代码是如何实际启动分布式事务的。 在我看来,我在每个数据库上开始完全独立的事务。 有关应用程序的信息: 该应用程序是在Sun Java Application Server 9.1上运行的EJB 我使用类似下面的spring上下文来设置hibernate会话工厂: hibernate.dialect=org.hibernate.dialect.Oracle9Dialect hibernate.default_schema=schemaA [mapping resources…] hibernate.dialect=org.hibernate.dialect.Oracle9Dialect hibernate.default_schema=schemaB [mapping resources…] 两个JNDI资源都是javax.sql.ConnectionPoolDatasoure。 它们实际上都指向同一个连接池,但是我们有两个不同的JNDI资源,因为这两个完全独立的表组可能会在将来移动到不同的数据库。 然后在代码中,我做: sessionA = dbASessionFactory.openSession(); sessionB = dbBSessionFactory.openSession(); sessionA.beginTransaction(); sessionB.beginTransaction(); sessionB.beginTransaction()行在这篇文章的标题中产生错误 – 有时候。 我在两个不同的sun应用服务器上运行了应用程序。 一个运行正常,另一个抛出错误。 虽然它们连接到不同但等效的数据库,但我没有看到两个服务器的配置方式有何不同。 所以问题是 为什么上面的代码没有启动完全独立的事务? 如何强制它启动独立事务而不是分布式事务? 什么配置可能导致两个应用程序服务器之间的行为差​​异? 谢谢。 PS堆栈跟踪是: Local transaction already has 1 non-XA Resource: cannot add more resources. […]

差异:@SessionScoped vs @Stateful和@ApplicationScoped vs @Singleton

我想知道, 两者之间的主要区别是什么: javax.enterprise.context.SessionScoped和javax.ejb.Stateful javax.enterprise.context.ApplicationScoped和javax.ejb.Singleton 我知道@SessionScoped和@Stateful允许为每个客户端创建一个新实例。 我也知道,对于@ApplicationScoped和@Singleton / @Stateless,它们在客户端之间共享。 但是,我什么时候应该考虑选择一个EJB或另一个更好?

如何在WebSphere上为远程EJB调用启用Kerberos身份validation?

由于经典的JNDI查找和RMI-IIOP方法调用,我的应用程序是一个独立的Swing客户端调用EJB无状态会话bean。 它作为Java WebStart应用程序启动。 我的目标是使用getCallerPrincipal方法从EJBContext检索客户端用户的身份,这要归功于Windows工作站,ActiveDirectory和Linux上运行的WebSphere服务器之间的Kerberos SSO。 由于信息中心文档,我已经在网络部署模式下成功配置了我的WebSphere单元以支持Kerberos身份validation。 krb5.conf和krb5.keytab文件都可以使用Linux kinit , klist和wsadmin进行测试, $AdminTask validateKrbConfig回答为true 。 客户端设置仅引用JAAS login.config文件以使用命令系统属性启用。 我的直觉告诉我这可能还不够。 但现在,我找不到更多信息来完成测试用例: 如何设置JNDI初始上下文环境以触发Kerberos协商? 如果在服务器端有其他要求,比如用角色保护我的EJB(例如JBoss不需要它)? 更新 由于没有使用./launchClient运行JavaEE客户端容器,我在JNLP中设置了读取sas.client.props和JAAS登录配置所需的属性: 我的wsjaas_client.config适用于Oracle Java,因此它包含: WSKRB5Login{ com.sun.security.auth.module.Krb5LoginModule required debug=true useTicketCache=true doNotPrompt=true; }; 我的sas.client.props包含: com.ibm.CORBA.securityEnabled=true com.ibm.CORBA.authenticationTarget=KRB5 com.ibm.CORBA.loginSource=krb5Ccache com.ibm.CORBA.loginUserid= com.ibm.CORBA.loginPassword= com.ibm.CORBA.krb5CcacheFile= com.ibm.CORBA.krb5ConfigFile=C:\\temp\\krb5.conf 目前,没有触发Kerberos身份validation:我的kerberos缓存(来自Windows或Linux工作站)中的SPN WAS/myserver.mydomain.com没有TGS,并且仍然匿名建立JNDI连接。 没有错误信息,没有警告,最后没有校长。 我如何诊断错误或缺乏? 更新2012/06/20 这是向前迈出的一步。 在我的应用程序JNLP中运行Oracle Java,我已设置以下属性以使用IBM ORB并启用完整的跟踪和调试信息: TraceSettings.properties文件包含 traceFileName=c:\\temp\\traces.log ORBRas=all=enabled SASRas=all=enabled com.ibm.*=all=enabled 即使在阅读了大量的WebSphere 7 Security […]

javax.persistence.NoResultException:getSingleResult()没有检索任何实体

我用ejb创建了一个namedquery来检查是否使用了用户名。 当singleResult为null时,我得到以下exception: javax.persistence.NoResultException: getSingleResult() did not retrieve any entities 但是这个例外是我想要的用户名是免费的结果。 这是代码: public User getUserByUsername(String username) throws DAOException{ try{ Query q = em.createNamedQuery(User.getUserByUsername); q.setParameter(“username”, username); return (User) q.getSingleResult(); }catch(Exception e){ throwException(username, e); return null; } } 有谁知道问题是什么。 🙁 我想返回null并且没有得到exception。 非常感谢你