我需要将文件附加到交易电子邮件中.基本上我有一个生成报告的cron作业,需要通过电子邮件发送给管理员用户.
我希望这样的事情存在:
Mage::getModel('core/email_template')
->setDesignConfig(array('area'=>'frontend', 'store'=>1))
->createAttachment($file)
->sendTransactional($templateID, $sender, $email, “Admin", $vars);
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助.
以下BeginTransaction方法之间的区别是什么:
SqlConnection.BeginTransaction方法
DbConnection.BeginTransaction方法
DbConnection.BeginDbTransaction方法
而且,它们与System.Transaction中的TransactionScope()方法有何不同?
我在ubuntu 12.10和MySQL Workbench上使用MySQL 5.1.41.
我有2个产品表,t1和t2.t1是实时数据,t2是准备更新到t1的导入数据,用于更新所有新产品价格.所以我跑:
SELECT * FROM t1
JOIN t2 ON t1.id = t2.id
WHERE t1.price != t2.price;
Run Code Online (Sandbox Code Playgroud)
这将返回1201记录,其中价格不同并需要更新.所以我跑:
UPDATE t1 JOIN t2 ON t1.id = t2.id
SET t1.price = t2.price
WHERE t1.price != t2.price;
Run Code Online (Sandbox Code Playgroud)
这完成没有错误并报告1143行受影响,行匹配:1143更改:1143警告:0
所以这里已有的东西不对.选择查询中有1201条记录不同,但只有1143条使用相同的连接和条件进行了更改?
运行初始选择查询我希望看到仍有不同价格的58条记录.但是当它运行时,我得到了与我最初相同的1201.就像没有提交更新一样.
有任何想法吗?
我正在尝试将数据添加到User表(注册后).在将用户数据添加到用户表后,我不想立即在'profile'表(1:1)中使用userID创建行,这就是我在这里使用事务的原因.但问题是,当代码进入'ExecuteScalar()'行异常时,我收到后,我无法获得用户的UserId(@@ Identity)"Object reference not set to an instance of an object."
string sqlAddUser = string.Format("insert into tbl_users ([UserName],[Email],[Password],[PasswordSalt],[CreatedDate],[IsActivated],[IsLockedOut],[LastLoginDate],[LastLockedOutDate], [NewEmailKey]) values ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}', '{9}')",
user.UserName, user.Email, user.Password, user.PasswordSalt, user.CreatedDate, user.IsActivated, user.IsLockedOut, user.LastLockedOutDate, user.LastLoginDate, user.NewEmailKey);
SqlCommand cmdAddUser = new SqlCommand(sqlAddUser, conn, transaction);
int result = cmdAddUser.ExecuteNonQuery();
SqlCommand cmdGetLastIdentity = new SqlCommand("SELECT @@IDENTITY", conn, transaction);
int i = (int)cmdGetLastIdentity.ExecuteScalar();
string sqlAddUserProfile = string.Format("insert into tbl_profile (UserId) values ({0})", i);
SqlCommand cmdAddUserProfile = new SqlCommand(sqlAddUserProfile, conn, transaction);
cmdAddUserProfile.ExecuteNonQuery();
transaction.Commit();
return GetUser(username);
}
catch (Exception …Run Code Online (Sandbox Code Playgroud) 我有一个方法,它执行一个简单的mysql插入,当我尝试回滚插入操作如下,一个错误,但它没有回滚错误,请帮助我,
public void addFamer(FamerDTO famer) throws Exception {
Connection con = JDBCConnectionPool.getInstance().checkOut();
con.setAutoCommit(false);
try {
String generalFamerDataSQL = "INSERT INTO famers(famer_code, name_wt_initials, full_name, gender, "
+ "nic_or_passport_no, sc_possition, phone_home, phone_mobile, phone_office) VALUES(?,?,?,?,?,?,?,?,?)";
PreparedStatement insertFamerPS = con.prepareStatement(generalFamerDataSQL, PreparedStatement.RETURN_GENERATED_KEYS);
insertFamerPS.setString(1, famer.getFamerCode());
insertFamerPS.setString(2, famer.getNameWithInitials());
insertFamerPS.setString(3, famer.getNameInFull());
insertFamerPS.setString(4, famer.getGender());
insertFamerPS.setString(5, famer.getNICorPassportNo());
insertFamerPS.setString(6, famer.getSocietyPosission());
insertFamerPS.setString(7, famer.getHomePhone());
insertFamerPS.setString(8, famer.getMobilePhone());
insertFamerPS.setString(9, famer.getOfficePhone());
insertFamerPS.execute();
String famerRelations = "INSERT INTO org_reg_blk_soc_fmr(org_id, region_id, famer_id, block_id, soc_id) "
+ "VALUES (?,?,?,?,?)";
PreparedStatement famerRelationsPS = con.prepareStatement(famerRelations);
famerRelationsPS.setInt(1, famer.getOrganization().getOrg_id());
famerRelationsPS.setInt(2, famer.getRegion().getRegion_id());
famerRelationsPS.setInt(3, famerID); …Run Code Online (Sandbox Code Playgroud) 所以有2个InnoDB表,员工和公司.我使用try/catch块在事务中插入2个查询.然而,当我做出明确的错误在第一个查询(我把一个不正确的表名员工,而不是雇员),数据库不插入的当然是查询中的行,但第二个查询运行,并得到承诺的数据库而不是回滚(因为第一个查询未能插入).
结果是一个emply员工表,但公司表与新记录.我在这里错过了什么?它不应该回滚,因为没有插入第一个查询?
$employee_id = 2;
$employee_name = 'Marky Mark';
try {
$dbh->beginTransaction();
$query = "INSERT INTO employee (employee_name) VALUES (:employee_name)";
$insert_emp = $dbh->prepare($query);
$insert_emp->execute(array(':employee_name' => $employee_name));
$Employee_id = $dbh->lastInsertId();
$query = "INSERT INTO companies (company_name,employee_id) VALUES ('SO',:Employee_id)";
$insert_emp_comp = $dbh->prepare($query);
$insert_emp_comp->execute(array(':Employee_id' => $Employee_id));
$dbh->commit();
} catch (Exception $e) {
$dbh->rollBack();
echo "Failed: " . $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud) 我有一个@Transactional服务在oracle DB中执行持久化操作.如果我运行坚持打破一个唯一的违规,我得到预期的rollbackException:ConstraintException.
问题是任何后续请求(即使没有违反唯一约束)持久化都会引发相同的异常.
似乎JPA没有清除持久化其事务管理器的对象?我甚至关闭?我需要一点解释.
回购:
@Repository
public class UserRepository {
@PersistenceContext(type=PersistenceContextType.EXTENDED)
private EntityManager em;
public User findUserById(long id){
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<User> query = builder.createQuery(User.class);
Root<User> root = query.from(User.class);
Predicate whereClause = builder.equal(root.get(User_.userId), id);
return em.createQuery(query.where(whereClause)).getSingleResult();
}
public User findUserByCredentials(String credentials){
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<User> query = builder.createQuery(User.class);
Root<User> root = query.from(User.class);
Predicate whereClause = builder.equal(root.get(User_.credentials), credentials);
return em.createQuery(query.where(whereClause)).getSingleResult();
}
public void registerUser(User user){
em.persist(user);
}
}
Run Code Online (Sandbox Code Playgroud)
ServiceImpl:
@Transactional(readOnly=true)
@Service("userService")
public class UserServiceImpl implements UserService {
@Resource
private …Run Code Online (Sandbox Code Playgroud) 我参加了一个项目,我们最近将应用程序服务器更改为Jboss AS 7(EAP 6).该系统是在域模式下运行的Jboss安装,其中一个服务器(服务器A)包含连接到关系数据库的EJB,另一个服务器(服务器B)是一个前端节点,主要是JSP连接到服务器A.
在开始我们的负载和性能测试之前,我会问这里.
题:
在运行混合事务EJB和JSP Web界面的域模式下,Jboss AS 7(EAP 6)所需的主要缺陷和性能调整是什么?
这里我使用事务范围存储transactionSummary类型的文档,如下所示
public class TransactionSummary
{
[JsonIgnore]
public Guid? Etag { get; set; }
public String Id { get; set; }
public String TransactId { get; set; }
public OpenOrClosed BalanceType { get; set; }
public TransactStatus Status { get; set; }
public String PayeeAccountNo { get; set; }
public Decimal AmountPaid { get; set; }
}
using (var trans = new TransactionScope())
{
using (IDocumentSession sess = GetConnection())
{
sess.Store(fldtrans);
sess.SaveChanges();
}
trans.complete();
}
Run Code Online (Sandbox Code Playgroud)
在立即存储之后我需要检索它,所以我按照以下方式进行操作
using (IDocumentSession sess = GetConnection()) …Run Code Online (Sandbox Code Playgroud) 我有一个表Jobs包含字段Name和Status.
我正在尝试在tomcat实例中部署两个单独的应用程序来轮询jobs表以获取新记录,但重要的是两个进程都不会收到相同的作业记录.我怎样才能做到这一点?
到目前为止,我的(不成功)方法是使用spring集成:
<int-jdbc:inbound-channel-adapter
query="select * from jobs where status=1"
channel="rawInputDataListChannel"
data-source="dataSource"
update="update input_table set status=2 where status=1">
<int:poller fixed-rate="1">
<int:transactional isolation="READ_COMMITTED" />
</int:poller>
</int-jdbc:inbound-channel-adapter>
Run Code Online (Sandbox Code Playgroud)
由于这不起作用,我认为可能在tomcat中使用事务管理器,因此两个应用程序可以共享它可能会起作用,但我正在努力使其运行起来.这种方法有用吗?