我試圖manualy創建EJB BMT的例子和控制交易,但是當嘗試運行我得到了一個NullException,我不硝酸鉀我在做什麼錯。 下面是代碼:BMT EJB如何使用UserTransaction的
@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
@Local(GlobalTLocal.class)
public class GlobalT implements GlobalTLocal {
@Resource
private UserTransaction utx;
public GlobalT() {
}
@Override
public void sincroniza() {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
env.put(Context.PROVIDER_URL, "jnp://localhost:1099");
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
String sqlPostgres = "SELECT * FROM RH.RHINFORMIX";
String insert = "INSERT INTO RH.RHINFORMIX (id_agente,fk_codigo_area,nome,email,excluido,tipoinclusao,id,teste)"+
" VALUES (11,11,'teste','teste',false,'I',12,'teste')";
InitialContext ic = new InitialContext(env);
DataSource ds = (DataSource) ic.lookup("jdbc/RHMigracaoPostgres");
con = ds.getConnection();
utx.begin();
// con.setAutoCommit(false);
stmt = con.createStatement();
rs = stmt.executeQuery(sqlPostgres);
while (rs.next()) {
System.out.println("Query '" + sqlPostgres + "' returned "
+ rs.getString(3));
}
stmt.executeUpdate(insert);
// con.commit();
// if(true){
// throw new Exception();
// }
utx.commit();
} catch (Exception e) {
try {
utx.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally{
if(rs != null)
try {
rs.close();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(con!=null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
當我運行這個類我收到以下錯誤:
java.lang.NullPointerException
at br.gov.dprf.GlobalT.sincroniza(GlobalT.java:94)
at Principal.main(Principal.java:11)
java.lang.NullPointerException
at br.gov.dprf.GlobalT.sincroniza(GlobalT.java:71)
at Principal.main(Principal.java:11)
該EJB部署在一個JBoss 4.2.2發球和存在是JBoss期間沒有埃羅啓動,我們可以看到部署的EJB的日誌:
15:51:33,529 INFO [EJB3Deployer] Deployed: file:/C:/Jboss-Limpos/jboss-4.2.2.GA/server/all/deploy/GlobalTransaction.jar
我試圖強制UserTransaction提交插入我!
我在做什麼錯?
韓國社交協會
行號不匹配您的碼。 71和94行是幹什麼的?看起來你直接使用JavaSE啓動Principal類:這不起作用;只有EE組件支持注入。你需要從JNDI查找您的EJB或應用程序客戶端容器使用注射。 – 2012-02-07 23:26:37
很抱歉。第71行和第94行是「utx.begin();」 和 「utx.rollback();」。我就像你說的那樣開始說話。你能給我舉例說明如何去做你的建議嗎? GlobalT類位於Jboss容器內的deploy文件夾中。在Jboss在線之後,我運行創建GlobalT實例的Principal類並調用sincroniza方法。 – IOSJR 2012-02-08 14:39:52