简单ENTITYBEAN 的例子

EJB-CMP 的例子,其实程序不难写,关键是部署,部署的时候找资料,看文档,好歹终于做出来了。例子主要

演示了使用SESSION-BEAN ,ENTITY-BEAN 来进行数据库持久化操作。

首先声明部署环境是 JBOSS4.0.2GA,JDK需要1.5。DATABASE-- 使用的是 MSSQLSERVER2000.

首先是LOCAL 接口。

package cmp2bean;



import javax.ejb.EJBLocalHome;

import javax.ejb.EJBLocalObject;



public interface Contact extends EJBLocalObject {

	

	public void setFirst(String first);

	

	public void setLast(String last);

	

	public void setEmail(String email);

	

	public String getFirst();

	

	public String getLast();

	

	public String getEmail();



}

 

其次是LOCALHOME 接口

package cmp2bean;



import javax.ejb.CreateException;

import javax.ejb.EJBLocalHome;

import javax.ejb.FinderException;



public interface ContactHome extends EJBLocalHome{

	public Contact create(String last) throws CreateException;

	public Contact findByPrimaryKey(String last) throws FinderException;

}

 

3.开发ENTITY-BEAN

package cmp2bean;



import java.rmi.RemoteException;



import javax.ejb.CreateException;

import javax.ejb.EJBException;

import javax.ejb.EntityBean;

import javax.ejb.EntityContext;

import javax.ejb.RemoveException;



abstract public class ContactBean implements EntityBean {

	

	private EntityContext entityContext;

	

	public abstract void setFirst(String first);

	

	public abstract void setLast(String last);

	

	public abstract void setEmail(String email);

	

	public abstract String getFirst();

	

	public abstract String getLast();

	

	public abstract String getEmail();

	

	public String ejbCreate(String last) throws CreateException

	{

		setLast(last);

		return null;

	}

	

	public void ejbPostCreate(String last) throws CreateException

	{

		

	}



	public void ejbActivate() throws EJBException, RemoteException {

		// TODO Auto-generated method stub

		

	}



	public void ejbLoad() throws EJBException, RemoteException {

		// TODO Auto-generated method stub

		

	}



	public void ejbPassivate() throws EJBException, RemoteException {

		// TODO Auto-generated method stub

		

	}



	public void ejbRemove() throws RemoveException, EJBException, RemoteException {

		// TODO Auto-generated method stub

		

	}



	public void ejbStore() throws EJBException, RemoteException {

		// TODO Auto-generated method stub

		

	}



	public void setEntityContext(EntityContext arg0) throws EJBException, RemoteException {

		// TODO Auto-generated method stub

		this.entityContext = arg0;

		

	}



	public void unsetEntityContext() throws EJBException, RemoteException {

		// TODO Auto-generated method stub

		this.entityContext = null;

		

	}



	

}

 

4.声明远程接口。

package cmp2bean;



import java.rmi.RemoteException;

import javax.ejb.EJBObject;



public interface RemoteContact extends EJBObject {

	public void displayPerson(String last) throws RemoteException;

	public void insertPerson(String first,String last,String email) throws RemoteException;



}

 

5.声明远程的HOME接口

package cmp2bean;



import java.rmi.RemoteException;



import javax.ejb.CreateException;

import javax.ejb.EJBHome;



public interface RemoteContactHome  extends EJBHome{	

	public RemoteContact create() throws CreateException,RemoteException;



}

 

6.最后是SESSION -BEAN 的代码。

package cmp2bean;



import java.rmi.RemoteException;

import java.util.Properties;



import javax.ejb.CreateException;

import javax.ejb.EJBException;

import javax.ejb.SessionBean;

import javax.ejb.SessionContext;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.rmi.PortableRemoteObject;



public class ContactSessionBean  implements SessionBean{



	private SessionContext sessionContext;

	

	private Contact contact;

	

	private ContactHome contactHome;

	

	public void ejbCreate() throws CreateException

	{

		

	}

	

	public void ejbActivate() throws EJBException, RemoteException {

		// TODO Auto-generated method stub

		

	}



	public void ejbPassivate() throws EJBException, RemoteException {

		// TODO Auto-generated method stub

		

	}



	public void ejbRemove() throws EJBException, RemoteException {

		// TODO Auto-generated method stub

		

	}



	public void setSessionContext(SessionContext arg0) throws EJBException, RemoteException {

		// TODO Auto-generated method stub

		this.sessionContext = arg0;

		

	}

	

	

	private Context getInitialContext() throws Exception

	{

		Properties env = new Properties(); 

		env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory"); 

		env.put(Context.PROVIDER_URL, "localhost:1099"); 

		env.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces"); 

		

        return  new InitialContext(env);

	}

	

	public void displayPerson(String last)

	{

		try

		{

			Context ctx = getInitialContext();

			Object ref = ctx.lookup("ContactEntity");

			contactHome = (ContactHome) PortableRemoteObject.narrow(ref,ContactHome.class);

			contact  = contactHome.findByPrimaryKey(last);

			System.out.println("getFirst--->"+contact.getFirst());

		}

		catch(Exception e)

		{

			e.printStackTrace();

		}

	}

	

	public void insertPerson(String first,String last ,String email)

	{

		try

		{

			Context ctx = getInitialContext();

			Object ref = ctx.lookup("ContactEntity");

			contactHome = (ContactHome) PortableRemoteObject.narrow(ref,ContactHome.class);

			contact  = contactHome.create(last);

			contact.setEmail(email);

			contact.setFirst(first);

		}

		catch(Exception e)

		{

			e.printStackTrace();

		}

	}



	



}

 

7.部署需要的XML文件有3个,分别是ejb-jar.xml,jboss.xml,jbosscmp-jdbc.xml

ejb-jar.xml 文件的内容如下:

<?xml version="1.0"?>

<!DOCTYPE ejb-jar PUBLIC	

"-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"

	"http://java.sun.com/dtd/ejb-jar_2_0.dtd">

	<ejb-jar>

		<enterprise-beans>

			<session>

				<ejb-name>ContactEJB</ejb-name>

				<home>cmp2bean.RemoteContactHome</home>

				<remote>cmp2bean.RemoteContact</remote>

				<ejb-class>cmp2bean.ContactSessionBean</ejb-class>

				<session-type>Stateless</session-type>

				<transaction-type>Container</transaction-type>

			</session>

			<entity>

				<ejb-name>ContactBean</ejb-name>

				<local-home>cmp2bean.ContactHome</local-home>

				<local>cmp2bean.Contact</local>

				<ejb-class>cmp2bean.ContactBean</ejb-class>

				<persistence-type>Container</persistence-type>

				<prim-key-class>java.lang.String</prim-key-class>

				<reentrant>false</reentrant>

				<abstract-schema-name>ContactBean</abstract-schema-name>

				<cmp-field>

					<field-name>last</field-name>

				</cmp-field>

				<cmp-field>

					<field-name>email</field-name>

				</cmp-field>

				<cmp-field>

					<field-name>first</field-name>

				</cmp-field>

				<primkey-field>last</primkey-field>

				

				<resource-ref>

       				<res-ref-name>MSSQLDS</res-ref-name>

       				<res-type>javax.sql.DataSource</res-type>

							<res-auth>Container</res-auth>

       				<!--<jndi-name>java:/MSSQLDS</jndi-name>-->

   				</resource-ref>

			</entity>

		</enterprise-beans>



		<assembly-descriptor>

			<container-transaction>

				<method>

					<ejb-name>ContactEJB</ejb-name>

					<method-name>*</method-name>

				</method>

				<trans-attribute>Required</trans-attribute>

			</container-transaction>

			<container-transaction>

				<method>

					<ejb-name>ContactBean</ejb-name>

					<method-name>*</method-name>

				</method>

				<trans-attribute>Required</trans-attribute>

			</container-transaction>

		</assembly-descriptor>

	</ejb-jar>

jboss.xml 文件的内容如下:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN" "http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd"> <jboss>    <enterprise-beans>       <entity>      <ejb-name>ContactBean</ejb-name>      <local-jndi-name>ContactEntity</local-jndi-name>    <resource-ref>            <res-ref-name>MSSQLDS</res-ref-name>            <res-type>javax.sql.DataSource</res-type>        <res-auth>Container</res-auth>            <jndi-name>java:/MSSQLDS</jndi-name>    </resource-ref>    </entity>              <session>            <ejb-name>ContactEJB</ejb-name>            <jndi-name>ejb/Contact</jndi-name>        </session>    </enterprise-beans> </jboss>

jbosscmp-jdbc.xml 文件内容如下:

<?xml version='1.0' encoding='UTF-8' ?>

<!DOCTYPE jbosscmp-jdbc PUBLIC

      "-//JBoss//DTD JBOSSCMP-JDBC 4.0//EN"

      "http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_4_0.dtd">

<jbosscmp-jdbc>

<defaults>

<datasource>java:MSSQLDS</datasource>

<datasource-mapping>MS SQLSERVER2000</datasource-mapping>

</defaults>

<enterprise-beans> 

    <entity> 

      <ejb-name>ContactBean</ejb-name> 

      <create-table>true</create-table> 

      <remove-table>false</remove-table> 

      <table-name>Contact</table-name> 

      <cmp-field> 

          <field-name>first</field-name> 

          <column-name>firstName</column-name> 

          <jdbc-type>VARCHAR</jdbc-type> 

       <sql-type>VARCHAR(50)</sql-type> 

      </cmp-field> 

      <cmp-field> 

          <field-name>last</field-name> 

          <column-name>LASTNAME</column-name> 

          <jdbc-type>VARCHAR</jdbc-type> 

       <sql-type>VARCHAR(50)</sql-type> 

      </cmp-field>  

      <cmp-field> 

          <field-name>email</field-name> 

          <column-name>email</column-name> 

          <jdbc-type>VARCHAR</jdbc-type> 

       <sql-type>VARCHAR(50)</sql-type> 

      </cmp-field>  

    </entity> 

    </enterprise-beans> 



</jbosscmp-jdbc>

8.把程序打包成.JAR ,然后把三个XML放到 .JAR/META-INF/ 目录下。

9.把.JAR 文件部署到JBOSS/SERVER/DEFAUTL/DEPLOY/ 目录下。

10.开发客户端程序进行测试。

import java.util.Properties;



import javax.naming.Context;

import javax.naming.InitialContext;

import javax.rmi.PortableRemoteObject;



import cmp2bean.RemoteContact;

import cmp2bean.RemoteContactHome;



public class ClientTest {





	public static void main(String[] args) throws Exception{

		Properties env = new Properties(); 

		env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory"); 

		env.put(Context.PROVIDER_URL, "localhost:1099"); 

		env.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces"); 

		

        Context initial = new InitialContext(env);

         

        Object objref = initial.lookup("ejb/Contact");

        RemoteContactHome rch = (RemoteContactHome) PortableRemoteObject.narrow(objref,RemoteContactHome.class);

        

        RemoteContact rc = rch.create();

        

        rc.insertPerson("java","jakarta","apache@yahoo.com.cn");

        //rc.displayPerson("mzy");

        System.out.println("procedure end!!!");



	}



}

 
Spring Boot 和 H2 数据库结合是一个常见的轻量级开发场景,H2 是一个内存型的嵌入式数据库,常用于快速原型开发和测试。下面是一个简单的 Spring Boot 应用使用 H2 的例子: 首先,在 `pom.xml` 文件中添加 H2 数据源依赖: ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> <!-- 只在运行时添加 --> </dependency> </dependencies> ``` 然后,配置数据源和 JPA 配置: ```java @Configuration @EnableJpaRepositories(basePackages = "com.example.demo.repository") // 指定仓库模块位置 public class DatabaseConfig { @Value("${spring.datasource.url}") private String url; @Value("${spring.datasource.username}") private String username; @Value("${spring.datasource.password}") private String password; @Bean public DataSource dataSource() { return new EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.H2) // 使用H2 .addScript("schema.sql") // 加载初始化脚本 .build(); } @Bean public PlatformTransactionManager transactionManager(DataSource dataSource) { return new JpaTransactionManager(entityManagerFactory(dataSource)); } @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) { HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); Map<String, Object> jpaProperties = new HashMap<>(); jpaProperties.put("hibernate.dialect", H2Dialect.class); jpaProperties.put("hibernate.show_sql", true); // 显示SQL日志 LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); factory.setDataSource(dataSource); factory.setJpaVendorAdapter(vendorAdapter); factory.setPackagesToScan("com.example.demo.entity"); // 扫描实体类包 factory.setJpaProperties(jpaProperties); return factory; } } ``` 在这个例子中,你需要创建一个 `schema.sql` 脚本来定义数据库结构。现在你可以创建一个简单的实体类 (`User.java`),并创建对应的 Repository 接口 (`UserRepository.java`)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值