2014年1月25日星期六

今天你跳槽了吗? - 我和小菜

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
今天你跳槽了吗? - 我和小菜  阅读原文»

时间过的好快,一眨眼今天都1月26了(农历腊月26),祝福自己生日快乐,离开学校已经快五年的时间了,而自己踏上IT工作才一年多一点的时间,前天刚刚公司开完年会后,鸡冻人心的抽奖居然没有我,OH MY GOD! 不过彩票中了十块钱算是对自己的安慰奖了,哈哈!

年底产生了跳槽的想法,具体原因我就不说什么了,只是用这篇文章来写写关于跳槽的一些想法。

昨天和一位同行聊了两句"不加工资的挽留就是耍流氓",说的也算对,人都是生活在现实当中的,现在的物质奖励是最靠谱的,其他都是空话。老板每个月都延迟发工资,无偿加班,你会继续愿意无私奉献的效劳公司吗?你和公司存在的关系我想最直接的就是利益关系了,当两者的利益发生了扭曲变形,你是不是要考虑一下换一个地方了?这个可以理解为―"跳槽"!

每一次的跳槽都是很蛋疼的一件事

也是一件很苦恼的事

对于离职的个人观点

  1. 有下一家在跳。这样的好处是万一跳槽失败,还能有个糊口的工作。不会两面工作都没捞着,成为无业游民。
  2. 不要指望一下子能够跳到多么好的公司。绝大多数公司都是一个样子,只是企业理念和薪资制度可能会有细小的差异。
  3. 不要一味地指望进大公司。大公司已经基本都形成了自己的规模和体制,虽然进入待遇和福利也许不错,但是不要指望很快能够发展和升职。一旦进入了大公司,你会发现像我们这个年龄段的,大多都是在做一些基层的工作,即使有些人根本没有多少能力,但是很不幸,他们是老员工,有资历。
  4. 不要一味地指望跳槽就能够从一个开发者一下升迁为经理。即使有这个机会,也要衡量衡量,这个公司真的值得信任吗?绝大多数公司的中层都是从公司内部诞生出来的。正规而又有发展趋势的公司一般不会从外面招聘比较重要的职务,比如项目经理,项目架构师等。
  5. 不要一味地用薪水和奖金来衡量跳槽的好坏。真的衡量的标准只有三个:第一是这个公司是不是正处于发展时期,而且有很大的发展空间;第二是这份工作是不是一个挑战,一个新的尝试,是不是自己所希望的工作;第三,在接受这份工作的时候,会不会对你未来5年的发展产生一定的影响。
  6. 不要一味地指望外企。不可否认外企的待遇很好,举例:北京很少有外企从事产品研发工作,即使是像IBM这样的公司,你会发现一旦你进入之后,你不熬个四五年很难升一级;而且你还会发现,你做的只是测试和无聊的coding。
  7. 一定要注意你的交流圈子。如果到目前为止,你还没有一个属于你的而且比较不错的交流圈子,那么一定要注意了。跳槽的时候有朋友帮忙,会省去很多麻烦,也会获取一些更加容易的机会。
  8. 最后一条也是最重要的一条,你具备享受更好待遇的实力吗?人往高处走是不假,但是追求高待遇的你,是否也具备高待遇所对应的高实力呢?只要有好的技术能力和业务能力,不愁找不到更好的下家。相反,水平一般却想获取高回报的想法则不太现实。

说了这几点,希望大家可以对我的观点进行讨论,如果觉得文章在这个即将到来的跳槽大战可以帮助到你,可以推荐一下哦!

将来的你一定会感激现在拼命的自己


本文链接:http://www.cnblogs.com/wohexiaocai/p/3533821.html,转载请注明。

工作流activiti-02事物控制、流程引擎创建 - L凯林  阅读原文»

使用activiti中有个很重要的问题就是需要保证事物的控制

activiti使用的是mybatis作为orm技术 封装了一系列的操作数据库操作 这也就是大家调用的api 操作的数据库表都是activit自带的数据表 一般情况下使用spring整合

activiti的事物是很强大的 但是往往就不能如愿 因为公司使用的都是自己的框架不能利用spring来整合事物。

通过java程序来控制activiti的事物

activiti的事物依赖于TransactionFactory 在创建流程引擎ProcessEngine来指定事物工厂,其原因分析如下:

创建流程引擎: ProcessEngine processEngine = conf.buildProcessEngine() ;

conf为StandaloneProcessEngineConfiguration的对象其buildProcessEngine方法如下:

public ProcessEngine buildProcessEngine() {
init();
return new ProcessEngineImpl(this);
}

//调用init方法

protected void init() {
initHistoryLevel();
initExpressionManager();
initVariableTypes();
initBeans();
initFormEngines();
initFormTypes();
initScriptingEngines();
initBusinessCalendarManager();
initCommandContextFactory();
initTransactionContextFactory();
initCommandExecutors();
initServices();
initIdGenerator();
initDeployers();
initJobExecutor();
initMailScanner();
initDataSource();
initTransactionFactory();
initSqlSessionFactory();
initSessionFactories();
initJpa();
initDelegateInterceptor();
initEventHandlers();
}
其中初始化了很多信息,可以依次看看源码 其中initTransactionFactory()方法代码如下:

// myBatis SqlSessionFactory ////////////////////////////////////////////////

protected void initTransactionFactory() {
if (transactionFactory==null) {
if (transactionsExternallyManaged) {
transactionFactory = new ManagedTransactionFactory();
} else {
transactionFactory = new JdbcTransactionFactory();
}
}
}

其中transactionFactory为 protected TransactionFactory transactionFactory; 类中的属性
由代码可知 如果transactionFactory不为空则事物工厂为JdbcTransactionFactory的实例化对象
那么设置StandaloneProcessEngineConfiguration的transactionFactory的值为一JdbcTransactionFactory对象即可

代码如下:创建一个servlet监听器 在容器启动的时候创建一个流程引擎 (需要配置web.xml文件)

/**********************************************************************
* <pre>
* FILE : MyServletListener.java
* CLASS : MyServletListener
*
* AUTHOR : Liaokailin
*
* FUNCTION :
*
*
* Contact: Sina L凯林
*
*======================================================================
* CHANGE HISTORY LOG
*----------------------------------------------------------------------
* MOD. NO.| DATE | NAME | REASON | CHANGE REQ.
*----------------------------------------------------------------------
* |2014年1月17日|Liaokailin| Created |
* DESCRIPTION:
* </pre>
***********************************************************************/
package com.infodms.dms.actions;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration;

import com.infodms.dms.db.DBManager;
import com.infodms.dms.utils.DmsActivitiTransactionFactory;

public class MyServletListener implements ServletContextListener {

@Override
public void contextDestroyed(ServletContextEvent arg0) {
ProcessEngines.destroy();
}

@Override
public void contextInitialized(ServletContextEvent arg0) {
StandaloneProcessEngineConfiguration conf = (StandaloneProcessEngineConfiguration) ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
conf.setDataSource(DBManager.getDataSource()).setDatabaseSchemaUpdate("true").setDbHistoryUsed(true) ;
conf.setTransactionFactory(new DmsActivitiTransactionFactory()) ;
ProcessEngine processEngine = conf.buildProcessEngine() ;

}
}

conf.setTransactionFactory(new DmsActivitiTransactionFactory()) ;设置事物

DmsActivitiTransactionFactory代码如下:

/**********************************************************************
* <pre>
* FILE : DmsActivitiTransactionFactory.java
* CLASS : DmsActivitiTransactionFactory
*
* AUTHOR : Liaokailin
*
* FUNCTION :
*
*
* Contact: Sina L凯林
*
*======================================================================
* CHANGE HISTORY LOG
*----------------------------------------------------------------------
* MOD. NO.| DATE | NAME | REASON | CHANGE REQ.
*----------------------------------------------------------------------
* |2014年1月21日|Liaokailin| Created |
* DESCRIPTION:
* </pre>
***********************************************************************/
package com.infodms.dms.utils;

import java.sql.Connection;
import java.util.Properties;

import org.apache.ibatis.transaction.Transaction;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;

import com.infoservice.po3.core.context.DBService;


public class DmsActivitiTransactionFactory extends JdbcTransactionFactory {

@Override
public Transaction newTransaction(Connection conn, boolean autoCommit) {
System.out.println("开启新的事物");
return new DmsActitiviTransaction(conn,autoCommit) ;
//return (Transaction) DBService.getInstance().getTransaction() ;
}

@Override
public void setProperties(Properties props) {
super.setProperties(props);
}

}

DmsActitiviTransaction 代码如下:

/**********************************************************************
* <pre>
* FILE : DmsActitiviTransaction.java
* CLASS : DmsActitiviTransaction
*
* AUTHOR : Liaokailin
*
* FUNCTION :
*
*
* Contact: Sina L凯林
*
*======================================================================
* CHANGE HISTORY LOG
*----------------------------------------------------------------------
* MOD. NO.| DATE | NAME | REASON | CHANGE REQ.
*----------------------------------------------------------------------
* |2014年1月21日|Liaokailin| Created |
* DESCRIPTION:
* </pre>
***********************************************************************/
package com.infodms.dms.utils;

import java.sql.Connection;
import java.sql.SQLException;

import org.apache.ibatis.transaction.jdbc.JdbcTransaction;

import com.infodms.dms.db.DBManager;
import com.infoservice.po3.core.context.DBService;

public class DmsActitiviTransaction extends JdbcTransaction {
private static Connection conn = null ;
public DmsActitiviTransaction(Connection connection,
boolean desiredAutoCommit) {
//connection.setAutoCommit(desiredAutoCommit);
super(connection, desiredAutoCommit);
try {
connection.setAutoCommit(desiredAutoCommit);
} catch (SQLException e) {
e.printStackTrace();
}

}

@Override
public Connection getConnection() {
/*DBService d = DBService.getInstance() ;
d.loadConf("/DataAccessContext.xml");
return d.getConnection() ;*/
// return DBService.getInstance().getConnection() ;
try {
if(conn==null){
synchronized (DmsActitiviTransaction.class) {
conn = DBManager.getConnection() ;
}
}
return conn ;
} catch (Exception e) {
System.out.println("获取链接失败:"+e);
return null ;
}
}

@Override
public void close() throws SQLException {
/*if(conn!=null&&!conn.isClosed()){
conn.close();
}*/
System.out.println("activit:close()");
}

@Override
public void commit() throws SQLException {
/*if(conn!=null&&!conn.isClosed()){
conn.commit();
}*/
System.out.println("activit:commit()");
}

@Override
protected void resetAutoCommit() {
System.out.println("resetAutoCommit()");
/*try {
if (conn != null && !conn.isClosed()) {
conn.setAutoCommit(false);
}
} catch (SQLException e) {
e.printStackTrace();

}*/
}

@Override
public void rollback() throws SQLException {
/*if(conn!=null&&!conn.isClosed()){
conn.rollback();
}*/
System.out.println("activit:rollback()");
}

@Override
protected void setDesiredAutoCommit(boolean arg0) {
System.out.println("setDesiredAutoCommit:"+arg0);
}


}

其中DBManager

/**********************************************************************
* <pre>
* FILE : DBManager.java
* CLASS : DBManager
阅读更多内容

没有评论:

发表评论