部署EJB组件的艺术

博弈论入门:从纳什均衡到商业竞争策略的5个经典案例解析 本文通过囚徒困境、智猪博弈、性别战、斗鸡博弈和拍卖博弈五个经典案例,深入浅出地解析了博弈论在商业竞争中的应用。文章重点阐述了纳什均衡的核心概念,揭示了从价格战到市场进入等商业决策背后的策略逻辑,帮助读者将博弈论思维转化为实用的商业决策工具。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 部署EJB组件的艺术
(仙人掌工作室 )

width=360 height=300 noresize scrolling=No frameborder="0" marginheight=0 marginwidth=0 src="http://www.cnnet.com.cn/servlets/ad?Pool=tech_pip" align="right"> Sun用“Write once,run anywhere”这一口号来推崇Java的跨平台移植能力。然而,对于大多数Java开发者来说,这个口号与其说反映了真实的Java应用部署,还不如说它代表着一个美好的、在一定程度上可以说远大的目标。例如,如果要让Java Applet在Netscape和IE浏览器中运行得完全一样,你得好好试验几次。类似地,在不同的Java兼容平台上,要让Java应用以完全同样的方式运行,你得耐心地进行一番辛苦的、彻底的测试。

但请不要误解我们的意思。Java是一种优秀的技术,特别是用来作为服务器端解决方案时,这一点尤其突出。我们认为,Java 2平台企业版(J2EE)是首选的Web服务开发环境。然而,对于Enterprise JavaBean(EJB),在不同的平台上部署同一EJB组件时也会出现一些与平台有关的问题。虽然我们完全有可能编写出部署方法统一的EJB代码,这些代码和应用服务器必须遵从同一版本的EJB规范。在很多情况下,要正确地安装和部署EJB,EJB的部署者必须针对不同的应用服务器进行不同的处理。

用初学者的眼光来看,本文介绍的是:在不同的应用服务器上部署同一EJB组件时,其部署过程的一些细微差别。这些应用服务器包括BEA的WebLogic、IBM的WebSphere和源代码开放组织的JBoss应用服务器。

一、EJB部署过程
在不同的应用服务器之间,EJB组件部署过程的不同由多种原因造成。首先,在描述如何部署EJB组件方面,EJB规范只提供了最小限度的指导。因此,供应商从不同的方向解释J2EE/EJB规范的这一部分,在为自己的平台定义组件部署步骤时,作出了各自的判断。

第二,组件部署是一个应用服务器供应商可以为其产品增值和增加独特功能的领域,供应商们把该过程标准化的热情不高。另外,这种部署标准的缺乏为应用服务器和Java IDE供应商带来了机会,使得它们能够集成自己的工具集,以便有效地方便EJB开发和部署——只有当你选择的IDE支持你的目标应用服务器时,这个过程才能得以简化。因此,对于一个给定的EJB,它的部署步骤必须根据具体情况进行分析,而且通常对于每一个应用服务器来说,部署步骤往往有所不同。

为了阐明这个问题,我们试验了两种EJB实现,一个LDAP(Lightweight Directory Access Protocol,轻量级目录访问协议)无状态会话Bean和一个简单的容器管理的实体(container-managed persistence,CMP)Bean。在这篇文章中,我们将了解把同一EJB部署到WebLogic、WebSphere和JBoss应用服务器时的主要不同之处。必须说明的是,虽然我们承认,如果利用与特定应用服务器密切关联的部署工具(例如,对于WebSphere服务器,使用VisualAge for Java),EJB部署过程将更加流畅;但是,这里我们将尽可能地用手工方式进行处理(利用vi/Emacs和JDK的jar工具编写代码、编写部署描述器文件、创建jar文件)。

为方便起见,文章最后提供了一个可下载的ZIP文件,它包含了本文用到的两个EJB示例,即HelloWorldLdap和ProfileTest。

二、HelloWorldLdap: LDAP无状态会话Bean
我们的第一个例子是一个无状态会话Bean,它从一个LDAP目录提取信息。用户(在这里是客户)可以在命令行指定一个LDAP服务器、email地址和DN(Distinguished Name)名称,EJB将从指定的目录提取该DN的所有属性。

类的路径问题可能干扰EJB和客户程序的编译。举例来说,我们选择把Netscape LDAP目录加入到第一个例子。一般而言,编译EJB代码的时候应该在类路径中指定J2EE JDK附带的j2ee.jar库,或者与它相当的库(对于JBoss,使用jboss.jar;对于WebLogic,使用weblogic.jar)。然而,编译客户程序的时候,类路径中还必须包含供应商的客户库,因为客户程序必须用到一个与特定供应商以及编译后的EJB组件有关的初始环境。另外,WebSphere客户程序还要求被部署的EJB jar文件也在classpath中。

成功地编译EJB之后就可以开始准备部署EJB。为部署Bean,META-INF目录下必须包含至少一个部署描述器(Deployment Descriptor)。本例的部署描述器ejb-jar.xml就位于该例子的META-INF目录下,在部署之前,我们把它和EJB类文件一起用jar打包。我们的第一个例子HelloWorldLdap有两个目录,即HelloWorldLdap和META-INF,这两个目录都属于同一目录层次。怀着以统一的方式部署Bean的希望,我们让EJB jar包包含以下内容:

HelloWorldLdap/
EjbLdapbean.class
EjbLdap.class
EjbLdapHome.class
EjbLdapClient.class

META-INF/
ejb-jar.xml


在Unix Shell下,我们用以下命令打包EJB:

> jar cvf HelloWorldLdap.jar META-INF/ HelloWorldLdap/*.class

接下来,我们把HelloWorldLdap.jar部署到前面提到的三个应用服务器上。以下内容介绍我们在部署过程中的发现。

2.1 BEA WebLogic 6.0 (Service Pack 2)

WebLogic有一个EJB部署准备工具,称为ejbc(即java weblogic.ejbc)。它有两个输入参数:包含类和部署描述器的jar文件的名字(例如,HelloWorldLdap.jar),以及我们为ejbc编译后的jar文件指定的名字(即HelloWeblogic.jar)。当jar文件编译不出现错误时,ejbc工具确实很不错;但如果EJB的构造存在问题,ejbc会变得相当恼人。尽管如此,ejbc仍旧是一个优秀的检验工具,它能够帮助我们在EJB部署之前找出错误。如果用ejbc编译jar文件,我们可以确信EJB能够在Weblogic上部署成功。

我们还试验了不用ejbc部署同一jar文件。对于简单的EJB,有可能获得成功;但是,不使用ejbc时,“热部署” EJB(在不关闭或者重新启动应用服务器的情况下,或者在不先行删除原有Bean实例的情况下,更新一个EJB)不能进行,而且此时我们不能再用ejbc进行确保部署成功的检验。

对于WebLogic,部署EJB时既可以简单地把jar文件复制到WL_HOME/config/your_domain/applications目录,或者也可以通过Web风格的管理控制台进行。在通过服务器日志报告部署中出现的问题时,WebLogic做得很出色。要检验部署是否成功,最简单的方法是利用管理控制台查看JNDI(Java Naming and Directory Interface)树。对于WebLogic,JNDI名字在另一个名为weblogic-ejb-jar.xml的部署描述器文件中指定。事实上,为了让示例EJB能够在WebLogic上部署成功,META-INF目录下必须存在这个部署描述器文件。


图一:利用Web界面的管理控制台把EJB部署到WebLogic。

总地看来,虽然我们无需修改原始的EJB代码,但必须把weblogic-ejb-jar.xml文件加入到META-INF目录。第二,我们发现,在准备部署EJB以及预先查找Bean存在的问题时,利用ejbc工具具有许多明显的优点。我们惊喜地发现,Netscape LDAP库已经捆绑到了weblogic.jar库,这使得我们的类路径更容易管理。最后,热部署WebLogic EJB可以说是轻而易举!我们只是把修改后的jar文件复制到应用的目录,对Bean的修改就立即生效。

2.2 IBM WebSphere 3.5

在WebSphere上部署EJB时,我们了解到3.5版本不遵从EJB 2.0规范(根据报告,4.0版本遵从EJB 2.0规范)。WebSphere部署描述器是一个串行化对象,而不是一个XML文件。为便于创建串行化部署描述器,你必须使用IBM的Java图形用户界面(GUI)工具,即jetace,把EJB jar文件转换成串行化的格式。显然,如果EJB至少遵从EJB 1.1规范,jetace工具将解析Bean内的ejb-jar.xml部署描述器,获得有关部署操作的一些细节说明;否则,jetace工具直接从类文件获得必须的部署信息。如果不使用jetace部署工具,我们无法在WebSphere 3.5上部署EJB。

使用jetace工具时,jar文件从File菜单装入。顺便说明,当EJB的部署描述器带有DOCTYPE头时,jetace将拒绝装入EJB。装入jar文件之后,我们实际上是创建了一个新的串行化文件,通过一系列的对话设置合适的部署参数,然而保存它。只有完成这个过程之后,我们才可以利用WebSphere管理控制台安装EJB。在WebSphere上部署EJB时还有一个值得注意的问题,即在重新部署一个EJB之前,我们必须先从管理控制台关闭并删除EJB。如果在不关闭并删除以前安装的Bean的情形下就重新部署它,我们可能在无意之中损坏Bean,导致它不时地返回奇怪的结果。最后,由于在重新部署之前,我们必须从管理控制台关闭并删除EJB,所以WebSphere不支持热部署。


图二:在WebSphere上部署EJB时必须结合管理控制台运用jetace工具

总地看来,对于第一个EJB包,我们只需修改部署描述器(ejb-jar.xml),使它不包含DOCTYPE标记。另外,我们还要熟悉jetace工具以及有关它的特殊的部署步骤。

2.3 JBoss 2.2.1

JBoss很容易安装和运行,而且它是免费的——它以Lesser GNU Public License(LGPL)的方式发行。在JBoss上部署EJB几乎就象安装和运行应用服务器本身一样简单。尽管如此,在JBoss上部署Bean时,我们仍旧发现了一些细微的差别。

首先,在ejb-jar.xml部署描述器的编写格式方面,我们遇到了一个问题。JBoss希望元素的开始标记和结束标记位于同一行上,而不是把它们分开到多个行。例如,下面的ejb-jar.xml部署描述器虽然顺利通过了WebLogic和WebSphere XML解析器的检查,但在JBoss上会出现部署错误:

【初始的ejb-jar.xml文件】

<?xml version="1.0"?>
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>
EjbLdap
</ejb-name>
<home>
HelloWorldLdap.EjbLdapHome
</home>
<remote>
HelloWorldLdap
</remote>
<ejb-class>
HelloWorldLdap.EjbLdapbean
</ejb-class>
<session-type>
Stateless
</session-type>
<transaction-type>
Bean
</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>

纠正格式错误之后得到的ejb-jar.xml部署描述器如下所示:

【修改后的ejb-jar.xml】

<?xml version="1.0"?>
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name> EjbLdap</ejb-name>
<home> HelloWorldLdap.EjbLdapHome</home>
<remote> HelloWorldLdap</remote>
<ejb-class> HelloWorldLdap.EjbLdapbean</ejb-class>
<session-type> Stateless</session-type>
<transaction-type>Bean</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>

另外,我们还必须增加一个名为jboss.xml的部署描述器,把它加入到META-INF目录。jboss描述器与WebLogic的weblogic-ejb-jar.xml部署描述器相似,它的作用是把EJB名称绑定到一个JNDI树上的名称。

部署JBoss EJB简单到只需把jar文件复制到部署目录,该目录就在JBoss安装的根目录之下。JBoss支持EJB热部署,有关Bean部署的信息直接在命令行上输出,从而方便了观察(在Unix上,它就在启动JBoss的那个shell窗口)。然而,在JBoss上部署EJB也有一个小小的不便之处,这就是我们不能浏览JNDI树验证Bean已经成功注册,不能在JNDI树中看到Bean的注册名字。如果我们未能在jboss.xml部署描述器中指定Bean的JNDI名称,默认情况下,JBoss将使用ejb-jar.xml中<ejb-name>标记提供的值注册它。如果加入了jboss.xml,我们可以利用<jndi-name>标记指定Bean在JBoss JNDI树上的注册名字。

总地看来,JBoss作为一个轻量级的应用服务器,它在注册EJB的时候只需要很简单的部署操作。我们只需把jar文件复制到部署目录,然后观察控制台上的输出结果。JBoss支持我们所谓的Bean热部署。如果我们在构造ejb-jar.xml文件时足够小心,按照要求正确格式化了ejb-jar.xml文件,原先的EJB可以不经过任何修改直接在JBoss服务器上部署。然而,JBoss也要用到附加的部署描述器,例如jboss.xml和jaws.xml,这使得部署复杂Bean的过程更令人感兴趣。

2.4 LDAP EJB示例之小结

即使象LDAP EJB这样一个简单的例子,它也很快证明了,我们必须根据具体的部署环境考虑部署过程。第二个例子将进一步示范在不同的应用服务器上部署同一EJB组件时的一些不同之处。但首先,表一总结了本例我们在部署EJB时发现的问题。

表一:LDAP EJB示例中出现的部署问题
 热部署支持供应商特有的部署工具额外的、供应商特有的部署描述器遵从EJB 2.0规范
BEA WebLogic 6.0 SP2是ejbcweblogic-ejbc-jar.xml是
IBM WebSphere 3.5否jetace否否
JBoss 2.2.1是否jboss.xml是

三、ProfileTest: CMP实体Bean
下一个例子是一个简单的实体Bean,它允许客户程序访问一个Oracle 8i数据源,提取数据或者加入数据。我们让这个例子尽量地符合EJB 2.0规范。就象本文前面的LDAP会话Bean一样,我们要把这个实体Bean部署到WebLogic、WebSphere和JBoss这三种应用服务器上。

然而,在部署这类EJB之前,我们必须先在应用服务器上创建一个Oracle数据源和一个JDBC连接池,以便EJB组件使用。每一种产品都有不同的数据源和连接池创建方法,因此,在部署这个EJB之前,你可能要参考具体产品的说明文档。

3.1 BEA WebLogic 6.0 (Service Pack 2)

对于WebLogic,除了前面已经介绍过的weblogic-ejb-jar.xml部署描述器之外,它还需要一个帮助WebLogic把Bean的域映射到Oracle表列的部署描述器。这个部署描述器称为weblogic-cmp-rdbms-jar.xml,而且它必须和ejb-jar.xml、weblogic-ejb-jar.xml一起保存在META-INF目录之下。你可以配置某些应用服务器,让它们根据部署描述器中定义的域映射关系自动创建数据库表。但遗憾的是,WebLogic不能帮你做到这一点。我们必须手工创建数据库表,或者编写自己的工具创建表。下面是一个简单的SQL命令脚本,它在Oracle中创建实体EJB需要的表。

Create table ProfileTest_ProfileBean (
ID NUMBER(10) NOT NULL,
PROFILEID VARCHAR2(255) NOT NULL,
FNAME VARCHAR2(255),
LNAME VARCHAR2(255)
);

总而言之,CMP实体Bean本身的部署不要求附加什么东西,但WebLogic要求我们增加一个额外的部署描述器weblogic-cmp-rdbms-jar.xml。

3.2 IBM WebSphere 3.5

正如前文所指出的,WebSphere不遵从EJB 2.0规范。为此,我们必须修改原先的EJB代码(参见下载包中的源代码)。修改代码实际上就是让EJB遵从1.1规范。完成后,我们重新编译EJB,并用jar打包。然后,我们用jetace工具创建一个适合在WebSphere上部署的jar文件,用WebSphere管理控制台部署该Bean。WebSphere能够根据ejb-jar.xml部署描述器中定义的信息创建Oracle数据库表。例如,下面几行内容属于ejb-jar.xml文件,它们描述了EJB中需要由容器管理的域:

...
<cmp-field><field-name>id</field-name></cmp-field>
<cmp-field><field-name>fname</field-name></cmp-field>
<cmp-field><field-name>lname</field-name></cmp-field>
<cmp-field><field-name>profile</field-name></cmp-field>
...

图三显示了WebSphere管理控制台,在这里我们指定是否要在部署CMP实体Bean的时候自动地创建表。


然而,在WebSphere下运用Oracle 8i时,在把Oracle作为数据源之前,我们首先必须进行一些准备工作,比如修改允许打开的游标数量,创建EJSADMIN和/或EJB Oracle帐户。当WebSphere在Oracle中创建表时,它使用的表名根据EJB的名字确定。例如本例中,WebSphere默认创建的表名字为PROFILEBEANTB。

遗憾的是,每次试图在客户程序中访问ProfileTest Bean时,我们总是得到一个“java.sql.SQLException: ORA-01002: fetch out of sequence”错误信息。由于IBM没有为试用版WebSphere提供客户EJB支持,所以我们无法借助IBM客户支持来解决这个问题。不过,我们成功地在Bean上调用了create()方法,向数据库表插入了记录。顺便说一句,当我们使用默认的数据源DB2(而不是Oracle)时,这个实体Bean运行得很流畅。

总而言之,WebSphere能够自动地为CMP实体Bean创建数据库表;然而,在把Oracle 8i作为WebSphere的数据源之前,我们必须先进行一些准备工作。幸运的是,WebSphere不需要任何额外的部署描述器文件,只需一个ejb-jar.xml文件。我们必须用jetace部署工具创建适合WebSphere的jar文件。

3.3 JBoss 2.2.1

和WebSphere不一样,JBoss不要求预先对数据库服务器进行任何调整。按照JBoss文档的说明,JBoss利用一个对象-关系数据映射工具Jaws管理CMP实体Bean。只要创建一个名为jaws.xml的部署描述器,然后把它放入META-INF目录,我们就可以利用这个文件告诉Jaws创建和删除数据库中的表。另外,我们还可以指定从Bean到数据库表中列名字之间的映射。jaws.xml描述器类似于WebLogic的weblogic-cmp-rdbms-jar.xml部署描述器;然而,jaws.xml是可选的。如果我们没有用jaws.xml显式地指定需要创建的数据库模式和名字,Jaws将创建一个默认的表,这个表的名字是包的名字加上一个下划线,再加上Bean的名字。例如在本例中,Jaws创建的默认表名为PROFILETEST_PROFILEBEAN。

对于在JBoss上部署CMP实体Bean来说,jaws.xml是可选的,但jboss.xml是必需的。正如前面的例子所提到的,jboss.xml和WebLogic的weblogic-ejb-jar.xml部署描述器大略相似。

虽然JBoss在很大程度上遵从EJB 2.0规范,但对于CMP实体Bean来说,JBoss并不完全遵从EJB 2.0规范。作为结果,我们原先遵从2.0规范的代码不能在JBoss下运行。但是,我们部署到WebSphere上的代码却可以成功地部署到JBoss上(假定已经在META-INF下提供jboss.xml)。

(注意:利用MVCSoft公司提供的一个插件,你可以让JBoss遵从EJB 2.0规范草案。MVCSoft销售其持久化管理器的价格为$28.60。)

总而言之,部署到JBoss应用服务器的CMP实体Bean要求增加特别为JBoss提供的部署描述器,即jboss.xml。另外,我们还可以在META-INF目录中提供一个可选的jaws.xml,jaws利用jaws.xml实现Bean域到数据库表列的映射以及表的管理。JBoss 2.2.1还没有按照EJB 2.0规范草案要求的那样支持CMP实体关系。但是,我们可以利用MVCSoft公司的插件克服这个局限。最后,和WebSphere类似,JBoss提供了一个Jaws工具。Jaws能够按照jasw.xml部署描述器中<create-table>标记的说明,自动为CMP实体Bean创建数据库表。

3.4 CMP实体Bean示例之小结

表二总结了在三种应用服务器上部署CMP实体Bean时我们发现的问题。

表二:CMP实体Bean示例中的部署问题
 自动创建表CMP部署描述器遵从EJB 2.0规范
BEA WebLogic 6.0 SP2否weblogic-cmp-rdbms-jar.xml是
IBM WebSphere 3.5是否否
JBoss 2.2.1是jaws.xml否

■ 结束语
EJB规范提出了EJB部署员这样一个职务,其实这毫不奇怪。部署EJB的工作很容易成为一种专门的职务,特别是当EJB部署者每次都必须面对来自不同供应商的多个应用服务器时。遗憾的是,开发这类应用的人、应用的部署者、实际管理应用服务器的人之间界限有些模糊。为此,每一组人都必须了解一些有关EJB部署的知识,了解部署过程中可能遇到的问题。

在部署EJB的时候,部署者必须学习和了解面向特定应用服务器的部署描述器,了解应用本身的部署方式(即,从命令行,还是从管理控制台)以及代码应该安装到什么目录,了解可以用哪些应用服务器提供的工具为部署做准备或进行部署,等等。部署过程可能比较复杂,而且对于不同的应用服务器,部署方法也会有所不同。也许为统一EJB部署方式而制作规划称不上真正的艺术,但它富有挑战性,会消耗大量的时间和资源。我们希望,本文帮助你避免了重复地研究和学习,从而得以把更多的时间投入开发工作。

■ 参考资源
缝缝补补的WebLogic:绕过的艺术 前言 目前Weblogic在全球的使用量占居前列,据统计,在全球范围内对互联网开放Weblogic服务的资产数量多达35382台,其中归属中国地区的资产数量为10562台。如果爆发一个Weblogic高危漏洞,那将会给中国的大量用户带来巨大的灾难。 本文主要介绍了近五年爆发的Weblogic反序列化的高危漏洞,一次又一次的修补,一次又一次的绕过,漏洞挖掘者和漏洞防御者之间的博弈从未停止过,而且... 阅读详情

相关推荐

WebLogic环境下Web应用部署全流程实战指南

回顾这些年与WebLogic打交道的经历,我最大的感悟是:技术本身不难,难的是如何用好技术。就像一把锋利的刀,用得好能做出美味佳肴,用不好反而会伤到自己。希望今天的分享能给你一些启发。记住,无论是多么复杂的系统,只要掌握了正确的思维方式,都能迎刃而解。最重要的是保持好奇心和学习热情,因为在这个快速变化的时代,今天的最佳实践可能明天就会过时。唯有持续学习,才能立于不败之地 💪对了,如果你有什么疑问或者想分享自己的经验,欢迎随时交流!毕竟,独学而无友,则孤陋而寡闻嘛 😉。

weixin_28988985的博客 1016

WebLogic的研究之三--开发、部署EJB(2)

 WebLogic的研究之三--开发、部署EJB(2)作者:XYZ部署EJB执行 build.cmd 将生成 /weblogic/myserver/ejb_Hello.jar 及/weblogic/myserver/clientclasses/HelloWorldBeanClient1.class等文件。ejb_Hello.jar就是我们要的EJB包了,而 HelloWorld

麦田的守望者 668

基于J2EE的图书管理系统设计与实现

虽然今天我们更多地谈论Spring Boot、微服务、云原生,但J2EE所倡导的分层架构、组件化设计、容器托管、事务管理、异步解耦等思想,早已成为现代企业开发的标配。哪怕你现在不用EJB,你也一定在用类似的思想:Spring的@Service≈ EJB的@StatelessSpring的≈ EJB的Filter拦截器 ≈ Servlet Filter所以说,学习J2EE不是为了回到过去,而是为了更好地理解现在 💡。

weixin_42124497的博客 393

EJB学习1-基本部署

xianjiangao的专栏 981

EJB3开发部署全过程

手动部署EJB 亲自体验EJB开发流程,包含完整代码。

Jboss上部署EJB方法

JBOSS上EJB的配置、部署,以及JBOSS中EJB的开发

手动部署EJB,亲自体验EJB开发流程

 也不记得是什么时候下载的一个开发ejb的例子,也没有看实践过。现在有点时候把它实践一下,还真爽,布置成功。    我也把那个例子转载一下,希望能对新手有一定的启发。                                                                jboss 4.0 中JSP调用EJB的简单例子 jboss 4.0自动集成了Tomcat 5.0,因而它...

sunjhgq的专栏 261

ejb 打包 部署

ejb 打包 部署最基础的文件看了就会

在JBoss下开发、部署EJB

作者:肖文鹏        JBoss是一个开放源码的EJB服务器,它与其它服务器整合后可以提供一个完整的J2EE平台。本文介绍如何在Linux环境下安装和配置JBoss,以及如何在JBoss平台上实现EJB的开发和部署。 作为J2EE架构中最重要的构件,EJB是实现服务器端分布式计算的核心。EBJ服务器是EJB的容器,它控制着EJB的运行,并为其提供事务处理、数据库访问、安全控制等一系列系统级的

myali88的专栏 1626

FPGA AXI DDR3读写时序调试与FIFO缓存实战解析

本文深入解析FPGA中AXI协议与DDR3的读写时序调试,重点探讨FIFO缓存在数据流控制中的关键作用。通过实战案例详细讲解突发传输中的地址对齐、数据分片等常见问题,并提供状态机设计、仿真波形分析和性能优化技巧,帮助开发者高效解决高速数据存储场景下的时序同步与数据一致性问题。

blockchain9miner的博客 1120

消费级显卡跑大模型:RTX 3060 12G 部署 70 亿参数 AI 编程助手的优化实战

本文详细介绍了如何在消费级显卡RTX 3060 12G上,通过量化、投机解码和分页KV-Cache等核心优化技术,成功部署并流畅运行70亿参数的CodeLlama-7B编程助手。文章提供了从环境配置、模型准备到参数调优的完整实战笔记,实测显存占用降至7.3GB,生成速度达21.7 token/秒,为开发者和技术爱好者提供了可行的本地AI部署方案。

weixin_29053067的博客 1262

ejb基础知识大全

引用:http://home.51.com/kufei520/diary/item/10042994.html 1. What is EJB EJB(Enterprise JavaBean)是JavaEE应用的业务层技术标准, 以这项技术开发的组件叫做EJB组件,常常简称EJB EJB架构是一个用于开发和部署基于组件的分布式业务应用的组件架构。 采用EJ...

anwenzhao0749的博客 2197

微信小程序marker 上的自定义气泡cover-view字体丢失以及max-width不生效问题

微信小程序marker 上的自定义气泡cover-view字体丢失以及max-width不生效问题

weixin_42028275的博客 1502

EJB实用技术专题

灵活使用EJB的本地和远程接口系列文章: 本文展示了样本 J2EE 应用程序的设计方法、实现和测试结果,提供了 Enterprise Java Bean 的本地和远程接口使用的基本比较。 -->灵活使用EJB的本地和远程接口(一) -->灵活使用EJB的本地和远程接口(二) -->灵活使用EJB的本地和远程接口(三) -->灵活使用EJB的本地和远程接口(四) 快速开发系列: 在本系列文章中,主要

Explorerwen--Javahome 1943

GPU服务器选购避坑指南:从硬件配置到场景化性能调优

本文提供GPU服务器选购的全面指南,涵盖硬件架构解析、应用场景配置策略和性能调优实践。针对大模型训练、推理服务和科学计算等场景,详细分析GPU选型、内存带宽匹配和散热设计等关键因素,帮助技术决策者避免常见配置误区,实现成本效益最大化。

peace的博客 1031

Modis数据处理工具:MRT百度网盘下载和手把手图文安装教程

如下图所示为MODIS Reprojection Tool(MRT)的软界面,看似简单,却是Modis遥感影像必不可少的处理工具,如投影变换等。本文以图文并茂的形式,详细讲解MRT软件在Windows10平台上的安装过程,并附MRT软件百度网盘下载地址。 Modis Tool主界面: 一、安装过程 1、安装Java运行环境 双击Java.exe,安装运行环境。默认的安装路径为C:\Program Files (x86)\Java\jre6\bin,后面需要用到这个路径。 等待...

智慧空间实验室 2625

关于SPING与EJB的胡言乱语

谓分布式就是能够远程调用的就算是,例如B/S就是常见的一中Ejb支持对象分布(也就是部署分布,我是这么理解的),不过我更喜欢用APP集群,设想谁没事愿意把不同的EJB组件分别部属在不同的APP中,然后对每个APP采用集群呢?针对现在出现的SPING 与EJB两种J2EE框架我觉的用哪个都可以只不过EJB编写比较麻烦有好几个类,我们可以用EJB的LOCALE 取代REMOTE,(它就是多了一个APP

Schumann的专栏 1737

网页内容抓取的艺术:使用R语言解析动态网页

本文探讨了使用R语言处理动态网页数据的方法。针对AJAX加载的学术网站,传统的静态抓取和RSelenium方法存在会话终止、浏览器错误等问题。通过分析发现内容通过admin-ajax.php加载,提出使用httr2模拟POST请求获取数据,配合rvest解析HTML内容。该方法避免了浏览器自动化的弊端,实现了高效稳定的动态内容提取,为处理类似AJAX网站提供了通用解决方案。

m0_74337424的博客 55

JSP中小型艺术培训机构管理系统mqp2g--程序+源码+数据库+调试部署+开发环境

随着艺术教育市场的快速发展,中小型艺术培训机构数量激增,但管理效率低下、信息化水平不足的问题日益凸显。传统人工管理模式在学员信息管理、课程安排、考勤统计、财务核算等方面存在耗时长、易出错、数据分散等痛点,难以满足机构规模化、精细化运营需求。因此,开发一套专为中小型艺术培训机构设计的信息化管理系统,具有重要现实意义。本系统旨在通过数字化手段整合机构核心业务流程,实现学员管理、课程调度、财务统计、家校沟通等功能的一体化,提升管理效率,降低运营成本,同时为机构决策提供数据支持,助力艺术教育行业数字化转型。

sheji3467的博客 1048

SpringCloud详细教程(下)

SpringCloud详细教程,springcloud完全教程。Springcloud微服务教程(上)的姊妹篇:介绍了其它SpringCloud组件。

鸟哥哥的专栏 4万+

手把手入门YOLO到改进优化教程 | 【P2基础篇】数据标注+环境搭建+模型训练

本节以 YOLO自定义目标检测训练为主线,带你从零开始完成 数据标注 → 环境搭建 → 模型训练 → 结果的流程。使用labelImg制作符合YOLO格式的自定义数据集。在Windows基于 Python + Conda 创建独立虚拟环境,安装 PyTorch + CUDA + ultralytics,配置 PyCharm 运行环境。本节不仅使用自定义数据集进行演示,同时也用公开数据集训练 YOLO,查看训练日志与可视化结果(PR、P/R/F1 曲线等)等。

嵌入式阿齐Archie 2万+

JSP舞台艺术创作题材管理系统z0745程序+源码+数据库+调试部署+开发环境

随着文化产业的蓬勃发展和观众对艺术体验需求的日益多样化,舞台艺术创作题材的管理变得尤为重要。一个高效、便捷的管理系统能够整合各类创作资源,优化创作流程,提高作品质量和创作效率。因此,开发一套舞台艺术创作题材管理系统,对于推动舞台艺术的发展和创新具有重要意义。

ck3018的博客 870

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

JSP中小型艺术培训机构管理系统mqp2g(程序+源码+数据库+调试部署+开发环境)

在艺术教育蓬勃发展的当下,中小型艺术培训机构如雨后春笋般涌现。然而,这些机构在管理上普遍面临诸多难题。传统的手工管理方式,如纸质档案记录学员信息、手工排课、人工统计收支等,不仅效率低下,还容易出现数据错误和丢失的情况。同时,在招生宣传、学员考勤、家校沟通等方面也缺乏有效的手段,难以满足机构快速发展的需求。

sheji3467的博客 1051

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java浪潮之巅从嵌入式到云原生的编程艺术与实战精要

Java的旅程是一部从嵌入式到云原生的进化史,更是一部编程艺术与工程实战不断融合、相互促进的历史。它证明了一种语言的成功,不仅在于其语法特性,更在于其生态系统与时俱进的能力和解决现实世界问题的价值。站在浪潮之巅,Java开发者唯有深入理解其艺术内核,掌握其实战精要,方能构建出面向未来的、卓越的软件系统。

yxb199100的博客 569

JEE架构在企业级开发中的核心优势与实践

JEE(Java Enterprise Edition)作为企业级Java开发的标准规范,在分布式系统开发中解决事务一致性、高并发处理和系统可维护性等核心问题。通过ACID原则保障金融级事务,支持电商大促等高并发场景,并提升百万行代码项目的可维护性。技术实现上,JEE采用分层设计,包含表现层(JSF/JSP+Servlet)、业务逻辑层(EJB/CDI)和持久层(JPA/Hibernate),配合JTA实现分布式事务。在现代架构演进中,JEE与Spring Cloud、微服务等新技术融合,既保留稳定性又吸收

weixin_33749242的博客 339
上一篇: ARM和Sun酝酿新的Java芯片
下一篇: XP和Java大战,谁胜一筹?
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值