我是JPA的新手,并希望在处理JPA的持久性异常时找到最佳实践,例如,可以由用户解决的唯一约束违规.有很多关于如何编写JPA应用程序的例子,但几乎没有关于如何处理由它们引发的异常的例子.:/
例如,注册用户,该人输入已被系统主动使用的电子邮件地址并获得约束违规:
try {
em.persist(credentials);
} catch (javax.persistence.PersistenceException ex) {
Run Code Online (Sandbox Code Playgroud)
添加重复的电子邮件时会产生此错误:
WARNING: SQL Error: 0, SQLState: 23505
SEVERE: ERROR: duplicate key value violates unique constraint "EMAIL_UQ_IDX"
Detail: Key (email)=(testuser@xyz.com) already exists.
Run Code Online (Sandbox Code Playgroud)
如何才能将有意义的答案反馈给用户?例如:Oops看起来好像有人正在使用该电子邮件地址,您确定以前没有注册吗?是否有内置工具来解析这个或者我是否需要在(可能是一系列)if语句中对异常消息运行正则表达式?
如果它被捕获在业务层上呢...那么将它踢到表示层的最佳实践是什么...就像我之前说过的那样,这样就可以为用户提供"好"的消息.
增加了对净度:正是这样的人都知道,我有,有,而且我仍然在寻找各种不同类型的持久性的异常,这里是一些我一直在做我没有用"try语句"包括研究上面包含的示例:
try {
em.persist(credentials);
} catch (javax.persistence.PersistenceException ex) {
System.out.println("EXCEPTION CLASS NAME: " + ex.getClass().getName().toString());
System.out.println("THROWABLE CLASS NAME: " + ex.getCause().getClass().getName().toString());
Throwable th = ex.getCause();
System.out.println("THROWABLE INFO: " + th.getCause().toString());
Logger.getLogger(CredentialsControllerImpl.class
.getName()).log(Level.INFO, "Credentials Controller "
+ "persistence exception "
+ "EXCEPTION STRING: {0}", ex.toString());
Logger.getLogger(CredentialsControllerImpl.class …Run Code Online (Sandbox Code Playgroud) 有没有办法只运行一个页面,以便我可以看到生成的html(和css),因为它会向用户看,即使它本质上是非功能性的?独立的JSF页面.我想回顾一下如何在实际编写表单字段之前设置表单以确定它们是否符合用户的观点.我正在使用maven和netbeans但不确定后者是否相关.
我们在ELB后面的EC2上有一些PHP服务器.我们希望通过连接到我们服务器的客户端的IP地址来确定区域设置/区域.问题是PHP服务器只能看到ELB的IP地址.我们希望看到通过ELB传递的客户端的IP地址.
鉴于很多人使用内容存储库.一定有充分的理由.我正在构建一个需要存储内容的新Web应用程序.有人能帮我理解吗?
使用像Apache Jackrabbit这样的内容存储库有什么好处,而不是编写自己的代码/ API来存储图像或文本页面?编写自己需要时间等,但实现和学习内容存储库API等新框架也是如此.在我看来,如果您需要增强或修复它,您知道自己的代码并拥有直接的专业知识.使用另一个框架,你需要学习它的缺点,并且修改你知道的不知道的代码总是更容易...即你不知道底层框架代码以及你自己的代码.
正如我所说,很多人都使用它们.必须有一个理由.我不能把它视为另一个"每个人都在使用它们,所以我们也应该这样做." 至少我希望不是这样.:)
我有一个问题,我得到一个:org.hibernate.MappingException:没有JDBC类型的Dialect映射:1111尝试使用JPA创建本机查询时调用postgres函数.
我在一个启动单例中创建了一个EJB计时器,每6个小时运行一次Postgres函数.该函数返回void并检查过期记录,删除它们并更新某些状态.它不需要参数,它返回void.
如果我使用PgAdmin查询工具(select function();)调用它并返回void,则postgres函数运行完美.
当我在Glassfish 3.1.1上部署应用程序时,我遇到异常并且部署失败.
这是(缩短的)堆栈跟踪:
WARNING: A system exception occurred during an invocation on EJB UserQueryBean method public void com.mysoftwareco.entity.utility.UserQueryBean.runRequestCleanup()
javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean
...STACK TRACE BLAH BLAH BLAH ...
Caused by: javax.persistence.PersistenceException: org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111
Run Code Online (Sandbox Code Playgroud)
这是代码:
首先是JPA的东西:
public void runRequestCleanup() {
String queryString = "SELECT a_function_that_hibernate_chokes_on()";
Query query = em.createNativeQuery(queryString);
Object result = query.getSingleResult();
}
Run Code Online (Sandbox Code Playgroud)
这是单身人士称之为:
@Startup
@Singleton
public class RequestCleanupTimer {
@Resource
TimerService timerService;
@EJB
UserQueryBean queryBean;
@PostConstruct …Run Code Online (Sandbox Code Playgroud) 我在使用JPA和Hibernate在PostgreSQL中使用CITEXT数据类型时遇到了困难.CITEXT应该提供不区分大小写的文本数据类型,但是当与JPA/Hibernate一起使用时,它不会以不区分大小写的方式运行.有没有其他人有这个问题或知道解决方法?我已经看到一些关于JDBC问题的提及(但非常非常少),但这至少可以追溯到一年,并不是很清楚.
我在postgres 9.1中将"昵称"列定义为citext.我刚刚做了一个测试,看它是否可以使用命名查询找到一行:
create table test(
nickname citext
)
@NamedQuery(name = "Person.findByNickname",
query = "SELECT p
FROM Person p
WHERE p.nickname = :nickname")
Run Code Online (Sandbox Code Playgroud)
在数据库中插入昵称:
insert into test values('testNick')
Run Code Online (Sandbox Code Playgroud)
然后运行以下代码:
String nickname = "testNick";
Query q = em.createNamedQuery("Person.findByNickname");
q.setParameter("nickname", nickname);
if (q.getResultList().isEmpty()) {
return (false);
}
return (true);
Run Code Online (Sandbox Code Playgroud)
这返回'true'(即数据库中已存在'testNick').
如果我做这个任务
String nickname = "testnick"; //(lower case 'N')
Run Code Online (Sandbox Code Playgroud)
并再次运行它返回'false'.
由于列是CITEXT,它应该再次返回'true'.不区分大小写的文本.
使用JPA和Hibernate.有人有什么想法?
与此同时,我已将列更改回varchar并为小写创建了一个功能索引.我现在必须创建一个本机查询来使用数据库函数进行搜索.想知道是否有一种方法我不能这样做来维护数据库抽象.
问候.
首先,我在这里有一些示例和代码(我一直在玩的东西).这是实际链接,以防万一:http://www.williamrosmus.com/examples/calendar1_wf.html
这是我专门针对Firefox(我正在使用v3.6)的一个问题,我想知道发生了什么.Requonc合理地显示和IE8完美.
对于学习练习,我使用CSS表而不是传统的html标签在xhtml中手动创建了一个日历.我将单元格的高度和宽度设置为100px×100px.然而,在Firefox中,一些单元格为空的顶部和底部行显示方式太高.
有关如何解决这个问题以便正确显示或使用Firefox发生了什么的任何建议或意见?
问候,
BillR
除此之外,根据Robin的建议,我将此记录为mozilla.org上的一个错误.有人刚刚证实了这一点.如果有人有兴趣:
我在<ui:insert name ="content"/>中有一个表单当我使用ap:commandButton保存数据时,我可以更新<ui:insert name ="content"/>中的表单和内容.但我无法弄清楚如何更新<ui:include src ="/ sections/menus/topMenu.xhtml"/>中的组件
在topmenu中我有一个面板的子视图,其中的链接根据一个人是否登录而呈现.当他们登录时,我会显示他们的用户名.如果我更新模板内容部分中的用户名,我想更新ui,以便菜单中的名称也更新而不刷新页面.但这也是我可以使用的后备.更新后刷新页面.但不愿意.如果你愿意的话,我会发布更多的代码,但试图将其保持在最低限度.
<h:body>
<div id="wrap">
<div title="Container">
<ui:include src="/sections/base/header.xhtml"/>
</div><!-- End of Banner -->
<div id="baseTemplateTopMenu" title="Menu">
<ui:include src="/sections/menus/topMenu.xhtml"/>
</div><!-- End of Menu -->
<div id="sbt_contentbody">
<div title="Left Column">
<ui:include src="/sections/base/leftsidebar.xhtml"/>
</div> <!-- End of Left Column -->
<div title="Content Column">
<ui:insert name="content" />
</div><!-- End of Centre Column -->
<div title="Right Column">
<ui:include src="/sections/base/rightsidebar.xhtml"/>
</div><!-- End of Right Column -->
</div>
<div id="footer" title="Footer" class ="container">
<ui:include src="/sections/base/footer.xhtml"/>
</div><!-- End of Footer …Run Code Online (Sandbox Code Playgroud) 有没有办法让这个与env.hosts一起使用?相反,每当我有多台主机运行时,必须手动循环?
我正在尝试使用fabric api,而不必使用非常不方便和kludgey fabric命令行调用.我在一个模块/类中设置env.hosts变量,然后调用另一个类实例方法来运行fabric命令.在被调用的类实例中,我可以打印出env.hosts列表.然而,当我尝试运行命令时,它告诉我它无法找到主机.
如果我遍历env.hosts数组并为env.hosts数组中的每个主机手动设置env.host变量,我可以使用run命令.奇怪的是,我还设置调用类的env.user变量,它被拾起.
例如,这工作:
def upTest(self):
print('env.hosts = ' + str(env.hosts))
for host in env.hosts:
env.host_string = host
print('env.host_string = ' + env.host_string)
run("uptime")
Run Code Online (Sandbox Code Playgroud)
输出来自:
env.hosts = ['ec2-....amazonaws.com']
env.host_string = ec2-....amazonaws.com
[ec2-....amazonaws.com] run: uptime
[ec2-....amazonaws.com] out: 18:21:15 up 2 days, 2:13, 1 user, load average: 0.00, 0.01, 0.05
[ec2-....amazonaws.com] out:
Run Code Online (Sandbox Code Playgroud)
这不起作用......但是如果你从"fab"文件中运行它确实有效......对我来说毫无意义.
def upTest(self):
print('env.hosts = ' + str(env.hosts))
run("uptime")
Run Code Online (Sandbox Code Playgroud)
这是输出:
No hosts found. Please specify (single) host string for connection:
Run Code Online (Sandbox Code Playgroud)
我确实尝试在方法上放置一个@task装饰器(并删除'self'引用,因为装饰器不喜欢它).但没有帮助.
有没有办法让这个与env.hosts一起使用?相反,每当我有多台主机运行时,必须手动循环?
当它们分别在Salesforce和Netsuite之间使用作为纯CRM和ERP /会计/财务时,在Aria/Zuora等SaaS计费平台上使用预构建连接器是否有好处.也就是说,与使用像Mulesoft或Boomi这样的ESB/Integration平台相比.
我们目前正在考虑更改计费和ERP系统,并将它们与Salesforce CRM集成在一起.所以链条看起来像:
CRM - 计费解决方案 - ERP
许多计费系统都有预构建的连接器,可与Netsuite或Fusion等ERP系统配合使用,也可与Salesforce连接器配合使用.更不用说Web服务端点/ API.
但是,像Mulesoft和Boomi(基本上是企业服务总线PaaS提供商)这样的集成供应商也允许服务之间的集成.
我来自SOA背景并且倾向于支持独立的ESB来连接系统,但由于我对Saas ERP系统缺乏了解,因此不了解预构建连接器与ESB辩论中的好处和缺陷.我理解避免点对点集成背后的概念,这将转变为使用ESB的好处.但是在SaaS平台中使用预构建连接器是否有好处......并且存在严重的缺点(我主要担心).
谁能在这里提供一些见解?我不是要求"哪一个是最好的",只是一些现实世界的经验好坏,可以帮助某人做出这些决定.
jpa ×3
hibernate ×2
java ×2
ajax ×1
css ×1
css-tables ×1
env ×1
erp ×1
esb ×1
exception ×1
fabric ×1
facelets ×1
firefox ×1
function ×1
html ×1
jackrabbit ×1
jsf ×1
jsf-2 ×1
locale ×1
parsing ×1
postgresql ×1
primefaces ×1
python ×1
saas ×1
salesforce ×1
templates ×1
testing ×1
xhtml ×1
zuora ×1