首页数据库java监控数据库(使用java开发数据库应用程序的好处是什么)

java监控数据库(使用java开发数据库应用程序的好处是什么)

编程之家2023-10-1799次浏览

其实java监控数据库的问题并不复杂,但是又很多的朋友都不太了解使用java开发数据库应用程序的好处是什么,因此呢,今天小编就来为大家分享java监控数据库的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

java监控数据库(使用java开发数据库应用程序的好处是什么)

java如何实现定时从数据库查询新增的数据,

有几种方法,我觉得第二种,触发器是个好主意,见下。

第一种,开个线程,定式扫描,比如每一分钟查询一次数据库,将前后数据做比对(比对方法可以在java端先把第一次的数据存到一个集合中,然后每次查询集合之后,将两次的内容在java端作比较)

第二种,在数据库端,比如oracle数据库,对这个要监控的表A建个触发器,这个表中如果有数据改变,包括楼主要的新增,修改,删除,都可以被触发,然后把改变的内容存到另一个表B中,然后java就直接从这个B表中查询就可以了,省去了比对的工作。

第三种,如果你是用的类似spring这种框架,spring自带有类似crontab的功能,可以写个一般的java类,这个类中仅仅干查询数据,比对数据的工作,然后调度的工作交给spring框架来做,基本来说这个方法与第一种相比,只是调度者不同而已

第四种,可以随便写个java类,进行查询比对,然后在跑这个java程序的主机上,比如linux主机,配置一个crontab,来定时调度。

使用java开发数据库应用程序的好处是什么

总的来讲,JavaSever PagesTM(JSP)和微软的Active Sever Pages(ASP)在技术方面有许多相似之处。两者都是为基于WEB应用实现动态交互网页制作提供的技术环境支持。同等程度上来讲,两者都能够为程序开发人员提供实现应用程序的编制与自带组件设计网页从逻辑上分离的技术。而且两者都能够替代CGI使网站建设与发展变的较为简单与快捷。

java监控数据库(使用java开发数据库应用程序的好处是什么)

尽管JavaSever Pages技术和微软的Active Sever Pages在许多方面都有相似的,但仍然存在很多不同之处,其中最本质上的区别在于:两者是来源于不同的技术规范组织,其实现的基础:WEB服务器平台要求不相同。

一、 JSP技术:开放的技术

JSP和ASP技术明显的不同点:开发人员在对两者各自软件体系设计的深入了解的方式不同。JSP技术基于平台和服务器的互相独立,输入支持来自广泛的,专门的,各种工具包,服务器的组件和数据库产品开发商所提供。相比之下,ASP技术主要依赖微软的技术支持。

1、平台和服务器的独立性

JSP技术依附于一次写入,之后,可以运行在任何具有符合JavaTM语法结构的环境。取而代之过去依附于单一平台或开发商,JSP技术能够运行在任何WEB服务器上并且支持来自多家开发商提供的各种各样工具包。

由于ASP是基于Activex控件技术提供客户端和服务器端的开发组件,因此ASP技术基本上是局限于微软的操作系统平台之上。ASP主要工作环境是微软的IIS应用程序结构,又因Activex对象具有平台特性,所以ASP技术不能很容易地实现在跨平台的WEB服务器的工作。尽管ASP技术通过第三方提供的产品能够得到组件和服务实现跨平台的应用程序,但是Activex对象必须事先放置于所选择的平台中。

java监控数据库(使用java开发数据库应用程序的好处是什么)

2、开放的开发过程,开放的原代码

SUN应用JAVA社团性过程开发JSP技术。自从1995年,SUN已经用这种开放过程方法同国际JAVA组织合作开发和修改了JAVA技术与规范。针对JSP的产品,SUN授权了工具提供商(如Macromedia),结盟公司(如Apache,Netscape),最终用户,协作商及其他。最近,SUN将最新版本的JSP和JavaTM Servlet(JSP 1.1,JAVA SERVLET 2.2)的原代码发放给Apache,以求JSP与Apache紧密的相互发展。Apache,SUN和许多其他的公司及个人公开成立一个健壮的咨询机构以便任何公司和个人都能免费取得信息。(详见:)

JSP应用程序界面(API)毫无疑问已经取得成功,并将随JAVA组织不断开放扩大继续完善。相反,ASP技术仅依靠微软本身的推动,其发展是建立在独占的,封闭的开发过程基础之上。

ASP技术 JSP技术

WEB服务器微软的IIS或个人WEB服务器任何WEB服务器包括Apache,Netscape,和IIS

操作系统平台微软的视窗系统绝大多数的流行平台,包括solaris操作系统,微软的视窗系统,MAC OS,Linux,及其他UNIX系列平台产品

跨平台访问需要第三方ASP的引入产品支持WEB信息机构环境中不同系列的计算机群即保证用户在当前软硬件及人力资源上的投资完全兼容,JSP技术提供灵活,开放选择:可以使用各种各样的工具提供商提供的工具,高度体现工业化标准输入与配置

3、从开发人员的角度来看:ASP和JSP技术都能使开发者实现通过点击网页中的组件制作交互式的,动态的内容和应用程序的WEB站点。ASP仅支持组件对象模型COM,而JSP技术提供的组件都是基于JavabeansTM技术或JSP标签库。由此可以看出两者虽有相同之处,但其区别是很明显的。

1) JSP标签可扩充性

尽管ASP和JSP都使用标签与脚本技术来制作动态WEB网页,JSP技术能够使开发者扩展JSP标签得以应用,JSP开发者能定制标签库,所以网页制作者充分利用与XML兼容的标签技术强大的功能,大大减少对脚本语言的依赖。由于定制标签技术,使网页制作者降低了制作网页和向多个网页扩充关键功能的复杂程度。

2) JSP跨平台的可重用性

JSP的开发人员在开发过程中一直关注可重用性。JSP组件(企业JavabeansTM,Javabeans,或定制的JSP标签)都是跨平台可重用的。企业Javabeans组件可以访问传统的数据库,并能以分布式系统模式工作于UNIX和WINDOWS平台。JSP技术的标签可扩充功能为开发人员提供简便的,与XML兼容的接口即共享网页的打包功能使其完全的工业标准化。

这种基于组件的模式很有效提高应用程序的开发效率,因为这种模式能够使开发人员利用快捷的子组件快速创建模板应用程序,然后再整合一些附加功能以后便可使用。象这样有效的方法在JSP中无处不在,并可将其打包成一个Javabean或一个工业标准化的Javabean组件。

二、 JAVA的优越性

JSP技术是用JAVA语言作为脚本语言的,而ASP网页使用微软的VBScrip或Jscrip。JAVA是成熟的,强大的,易扩充的编程语言,远优于基于BASIC的脚本语言。如:JAVA的可执行性优于VBScript或Jscript语言。因为它们利用JAVA技术并且都被编译为JAVA Servlets,JSP网页为整个服务器端的JAVA库单元提供了一个接口来服务于HTTP的应用程序。

JAVA使开发人员的工作在其他方面也变的一样容易,简单。例如,当ASP应用程序在WINDOWS NT系统被怀疑可能会崩溃时,JAVA能有效的防止系统的崩溃。JAVA语言通过提供防止内存的泄漏的方法,在内存管理方面也能大显身手。加之,JSP为应用提供了健壮的意外事件处理机制。

1、易于维护性

基于JSP技术的应用程序比基于ASP的应用程序易于维护和管理。

脚本语言都能很好服务于小的应用程序,但不能适应大型的,复杂的应用程序。因为,JAVA是结构化的,它比较容易创建和维护庞大的,组件化的应用程序。

JSP突出的组件技术使修改内容而不影响逻辑或修改逻辑而不影响内容变得很容易实现。

企业级的Javabeans结构整合了企业逻辑,例如数据库的访问,安全,事务完整性,及独立性即独立于应用程序。

因为JSP技术是一种开放的,跨平台的结构,因此,WEB服务器,平台,及其他的组件能很容易升级或切换,且不会影响JSP基本的应用程序。这一特点使JSP能够适用现实世界的各种WEB应用程序不断的变化和发展。

ASP技术 JSP技术

可重用,跨平台组件没有JAVABEANS企业级JAVABEANS,定制JSP标签

安全:防范系统崩溃没有有

内存泄露保护没有有

脚本语言 VBSCRIPT,JSCRIPT JAVA

定制标签没有有

2、企业产品的多样性

JAVA2平台即企业版(J2EE)是适用于多企业应用程序的JAVA结构,作为J2EE的部分,JSP网页可访问所有J2EE的组件,包括Javabeans,企业级Javabeans及JAVA Servlets。JSP网页都能完全编译成为Servlets,所以它们都享有灵活性的特点和为服务器端JAVA应用程序。J2EE平台内容不仅包括管理复杂的企业应用程序而且包括事务管理技术和Pooling资源管理技术。

JSP网页可以访问标准的J2EE服务,包括:

? JAVA名称和目录界面API

? JDBCTM API(与关联的数据库通讯)

? JavaMailTM(支持基于JAVA邮件和消息应用程序的类)

? JAVATM消息服务

通过J2EE,JSP网页能够用许多方式同企业系统交互访问。J2EE支持两种CORBA规范的技术:JAVA IDL和RMI-IIOP。在企业级JAVABEANS技术支持下,JSP网页通过运用高级的,对象映射的方式访问数据库。

最终,因为JSP技术是基于JAVA的开放性过程的产品,因此它能够广泛支持不同提供商提供的工具,WEB服务器和应用程序的服务,这样能够使用户选择最佳的开发方法,选择最适应他们的应用程序开发的工具包,同时,有效地保护用户在代码和人员培训上的投资。

ASP技术 JSP技术

兼容传统的数据库可以(COM)可以(用JDBC API)

集成数据源的能力能工作在任何符合ODBC规范的数据库能工作在任何符合ODBC规范的数据库,而且能访问符合JDBC技术规范数据库

组件 COM组件 JAVABEANS,企业级JAVABEANS或扩展的JSP标签

扩展工具支持有有

java 数据库事务与应用事务的区别

在说他们之间的区别之前,先考虑如下几个问题:

1、getCurrentSession()与openSession()的区别?

*采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()

创建的session则不会

*采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession()

创建的session必须手动关闭

2、使用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:

*如果使用的是本地事务(jdbc事务)

<property name="hibernate.current_session_context_class">thread</property>

*如果使用的是全局事务(jta事务)

<property name="hibernate.current_session_context_class">jta</property>

以上是hibernate中一些使用,下面来说说jdbc与jta的区别:

JDBC事务

JDBC事务是用 Connection对象控制的。JDBC Connection接口( java.sql.Connection)提供了两种事务模式:自动提交和手工提交。

#在jdbc中,事务操作缺省是自动提交。也就是说,一条对数据库的更新表达式代表一项事务操作,操作成功后,系统将自动调用commit()来提交,否则将调用rollback()来回滚。

#在jdbc中,可以通过调用setAutoCommit(false)来禁止自动提交。之后就可以把多个数据库操作的表达式作为一个事务,在操作完成后调用commit()来进行整体提交,倘若其中一个表达式操作失败,都不会执行到commit(),并且将产生响应的异常;此时就可以在异常捕获时调用 rollback()进行回滚。这样做可以保持多次更新操作后,相关数据的一致性,示例如下:

try{

conn=

DriverManager.getConnection

("jdbc:oracle:thin:@host:1521:SID","username","userpwd";

conn.setAutoCommit(false);//禁止自动提交,设置回滚点

stmt= conn.createStatement();

stmt.executeUpdate(“alter table…”);//数据库更新操作1

stmt.executeUpdate(“insert into table…”);//数据库更新操作2

conn.commit();//事务提交

}catch(Exception ex){

ex.printStackTrace();

try{

conn.rollback();//操作不成功则回滚

}catch(Exception e){

e.printStackTrace();

}

}

JDBC事务的一个缺点是事务的范围局限于一个数据库连接。一个 JDBC事务不能跨越多个数据库。

JTA事务

JTA(Java Transaction API)为 J2EE平台提供了分布式事务服务。

要用 JTA进行事务界定,应用程序要调用 javax.transaction.UserTransaction接口中的方法。例如:

utx.begin();

//...

DataSource ds= obtainXADataSource();

Connection conn= ds.getConnection();

pstmt= conn.prepareStatement("UPDATE MOVIES...");

pstmt.setString(1,"Spinal Tap");

pstmt.executeUpdate();

//...

utx.commit();

让我们来关注下面的话:

“用 JTA界定事务,那么就需要有一个实现 javax.sql.XADataSource、 javax.sql.XAConnection和 javax.sql.XAResource接口的 JDBC驱动程序。一个实现了这些接口的驱动程序将可以参与 JTA事务。一个 XADataSource对象就是一个 XAConnection对象的工厂。 XAConnection s是参与 JTA事务的 JDBC连接。”

要使用JTA事务,必须使用XADataSource来产生数据库连接,产生的连接为一个XA连接。

XA连接(javax.sql.XAConnection)和非XA(java.sql.Connection)连接的区别在于:XA可以参与JTA的事务,而且不支持自动提交。

注意:

Oracle, Sybase, DB2, SQL Server等大型数据库才支持XA,支持分布事务。

My SQL连本地都支持不好,更别说分布事务了。

JTA方式的实现过程:

用XADataSource产生的XAConnection它扩展了一个getXAResource()方法,事务通过这个方法把它加入到事务容器中进行管理.对于调用者来说,根本看不到事务是如果管理的,你只要声明开始事务,告诉容器我下面的操作要求事务参与了,最后告诉事务说到这儿可以提交或回滚了,别的都是黑箱操作。

在使用JTA之前,你必须首先实现一个Xid类用来标识事务(在普通情况下这将由事务管理程序来处理)。Xid包含三个元素:formatID、gtrid(全局事务标识符)和bqual(分支修饰词标识符)。

下面的例子说明Xid的实现:

import javax.transaction.xa.*;

public class MyXid implements Xid

{

protected int formatId;

protected byte gtrid[];

protected byte bqual[];

public MyXid()

{

}

public MyXid(int formatId, byte gtrid[], byte bqual[])

{

this.formatId= formatId;

this.gtrid= gtrid;

this.bqual= bqual;

}

public int getFormatId()

{

return formatId;

}

public byte[] getBranchQualifier()

{

return bqual;

}

public byte[] getGlobalTransactionId()

{

return gtrid;

}

}

其次,你需要创建一个你要使用的数据库的数据源:

public DataSource getDataSource()

throws SQLException

{

SQLServerDataSource xaDS= new

com.merant.datadirect.jdbcx.sqlserver.SQLServerDataSource();

xaDS.setDataSourceName("SQLServer");

xaDS.setServerName("server");

xaDS.setPortNumber(1433);

xaDS.setSelectMethod("cursor");

return xaDS;

}

例1这个例子是用“两步提交协议”来提交一个事务分支:

XADataSource xaDS;

XAConnection xaCon;

XAResource xaRes;

Xid xid;

Connection con;

Statement stmt;

int ret;

xaDS= getDataSource();

xaCon= xaDS.getXAConnection("jdbc_user","jdbc_password");

xaRes= xaCon.getXAResource();

con= xaCon.getConnection();

stmt= con.createStatement();

xid= new MyXid(100, new byte[]{0x01}, new byte[]{0x02});

try{

xaRes.start(xid, XAResource.TMNOFLAGS);

stmt.executeUpdate("insert into test_table values(100)");

xaRes.end(xid, XAResource.TMSUCCESS);

ret= xaRes.prepare(xid);

if(ret== XAResource.XA_OK){

xaRes.commit(xid, false);

}

}

catch(XAException e){

e.printStackTrace();

}

finally{

stmt.close();

con.close();

xaCon.close();

}

当然,实际过程中,我们不需要写这些代码,这些代码是JTA最终的实现代码。

关于“两步提交协议”,可以参看下面的文章:

http://www.ibm.com/developerworks/cn/db2/library/techarticles/dm-0505weber/index.html

两阶段提交(Two-Phase-Commit)协议

首先,两阶段提交(Two-Phase-Commit)事务的启动与常规的单阶段提交(One-Phase-Commit)事务类似。接着,应用程序/客户机对该两阶段提交(Two-Phase-Commit)操作中所涉及的所有数据库执行其修改工作。现在,在最终提交该事务之前,客户机通知参与的数据库准备提交(第 1阶段)。如果客户机从数据库收到一条“okay”,就发出命令向数据库提交该事务(第 2阶段)。最后分布式事务(Distributed Transaction)结束。

上面的例子演示了如何在 Java中使用 JTA实现两阶段提交(Two-Phase-Commit)协议。在该应用程序中,如果一个事务分支报告了错误,您就要负责进行错误处理。但是“两阶段提交协议简介”小节中提到仍然存在一个问题,那就是如果第 2阶段中一个事务分支发生故障,该怎么办呢?

如果再次查看程序代码,您可以看到在“第 1阶段”和“第 2阶段”之间有一个很小的时间间隔。在这一时间间隔中,出于某种理由,其中某一参与数据库可能崩溃。如果发生了,我们将陷入分布式事务已经部分提交的情形中。

假定下列情形:在“第 1阶段”之后,您从 DB2和 IDS数据库中都收到了“okay”。在下一步中,应用程序成功提交了 DB2的事务分支。接着,应用程序通知 DB2事务分支提交事务。现在,在应用程序可以通知 IDS事务分支提交它这一部分之前,IDS引擎由于断电发生崩溃。这就是一种部分提交全局事务的情形。您现在该怎么办呢?

在重启之后,DB2和 IDS都将尝试恢复打开的事务分支。该引擎等待来自应用程序的提示如何做。如果应用程序没有准备重新发送“第 2阶段”的提交,该事务分支将被引擎所启动的试探性回滚中止。这是非常糟糕的,因为这将使该全局事务处于不一致状态。

一种解决方案是用一个小型应用程序连接引擎中打开的事务分支,并通知引擎提交或回滚这一打开的事务。如果您使用 IDS作为后端,那么还有一个隐藏的 onmode标志,允许您结束打开的事务分支。(onmode-Z xid)。

在 DB2 UDB中,您可以发出 LIST INDOUBT TRANSACTIONS来获得打开的 XA事务的有关信息。您必须查看 DB2 Information Center中的描述来解决该问题。

上面描述的情形是一个很好的例子,也是使用应用程序服务器(Application Server)或事务监控器(Transaction Monitor)的理由。在使用一个中间层服务器时,就由该服务器负责保持事情正常。

java监控数据库和使用java开发数据库应用程序的好处是什么的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!

全球品牌数据库,全球排名前十商业版数据库有哪些阿尔派主机?怎么鉴别阿尔派主机真假