SlideShare ist ein Scribd-Unternehmen logo
1 von 65
Downloaden Sie, um offline zu lesen
http://www.flickr.com/photos/jox1989/5327951306

おっぴろげ
JavaEE DevOps
おっぴろげ is 何
でもJavaEEの導入事例って
あんま聞かなくない?
http://www.flickr.com/photos/dogwelder/94393980
せっかく作ったんだし
シガラミがないうちに
全部話してしまえー

http://www.flickr.com/photos/pmillera4/8914149268
永瀬 泰一郎
グリー株式会社
@nagaseyasuhito
http://builder.japan.zdnet.com/sp_oracle/weblogic_2013/35040464/
meets
Scalaでやろうぜ!
やっぱ別チーム行くわ!ノシ
JavaEEやるチャンスや!
ひとりDevOps

http://www.flickr.com/photos/nanophoto69/5294068212
開発
テスト
リリース&デプロイ
運用
椿

http://bit.ly/jjug-camellia
開発するぞ
JAX-RS

EJB Timer

CDI

JMS

JPA

Overview
http://www.flickr.com/photos/codlibrary/2282696252
JPA

Lombok

JAXB

@MappedSuperclass	
@Setter @Getter	
@EqualsAndHashCode(of = { "id" })	
public abstract class BaseEntity {	
	 @Id	
	 @GeneratedValue(strategy = IDENTITY)	
	 private Long id;	
!

	
	
	
	
!

	
	
	
	
}

@Column(nullable = false)	
@Version	
@XmlTransient	
private Long version;	

Abstract
Entity

@Column(nullable = false)	
@Temporal(TemporalType.TIMESTAMP)	
@XmlJavaTypeAdapter(ISO8601DateAdapter.class)	
private Date createdAt;
JPA

Lombok

JAXB

public class ISO8601DateAdapter	
	 extends XmlAdapter<String, Date> {	
!

	
	
	
	
	

@Override	
public Date unmarshal(String v) throws Exception {	
	 return new Date(ISODateTimeFormat.	
	 	 dateTimeNoMillis().withZoneUTC().parseMillis(v));	
}	

!

	 @Override	
	 public String marshal(Date v) throws Exception {	
	 	 return ISODateTimeFormat.	
	 	 	 dateTimeNoMillis().withZoneUTC().print(v.getTime());	
	 }	
}	

Xml
Adapter
JPA

Lombok

JAXB

Bean Validation

@Entity	
@Setter @Getter	
public class User extends BaseEntity {	
	 @Column(nullable = false, unique = true)	
	 @Pattern(regexp = "[p{Alnum}]*")	
	 private String name;	
!

	 @Column(nullable = false)	
	 @XmlTransient	
	 private String password;	
}

Concrete
Entity
JPA

public interface Query<T> {	
	 CriteriaQuery<T> execute(	
	 	 CriteriaBuilder b, CriteriaQuery<T> q, Root<T> r);	
}	

Abstract
Dao
JPA

public abstract class BaseDao<T> {	
	 protected T getSingleResult(Query<T> query) {	
	 	 CriteriaBuilder b =	
	 	 	 this.entityManager.getCriteriaBuilder();	
!

	 	 CriteriaQuery<T> q =	
	 	 	 b.createQuery(this.getEntityClass());	
!

	 	 Root<T> r = q.from(this.getEntityClass());	
!

Abstract
Dao

	 	 return this.entityManager.createQuery(	
	 	 	 query.execute(b, q, r)).getSingleResult();	
	 }	
!

	 protected abstract Class<T> getEntityClass();	
}
JPA

public class UserDao extends BaseDao<User> {	
!

	
	
	
	
	
	
	
!

	
	
	
	
	
}

public User findByName(final String name) {	
	 return this.getSingleResult(new Query<User>() {	
	 	 @Override	
	 	 public CriteriaQuery<User> execute(	
	 	 	 CriteriaBuilder b,	
	 	 	 CriteriaQuery<User> q,	
	 	 	 Root<User> r) {	

Concrete
Dao

	 	 	 return q.select(r).	
	 	 	 	 where(b.equal(r.get(User_.name), name));	
	 	 }	
	 });	
}
public class UserDao extends BaseDao<User> {	
!

	
	
	
	
}

public User findByName(String name) {	
	 return this.getSingleResult((b, q, r) ->	
	 	 q.select(r).where(b.equal(r.get(User_.name), name));	
}	

Concrete
Dao
CDI

Bean Validation

@Transactional	
public class UserService {	
	 @Inject	
	 private UserDao userDao;	
!

	 public User create(@NotNull String name) {	
	 	 User user = new User(name);	
	 	 this.userDao.persist(user);	
!

	 	 return user;	
	 }	
!

	 public User show(@NotNull String name) {	
	 	 return this.userDao.findByName(name);	
	 }	
}

Service
JAX-RS

CDI

@Path("user")	
public class UserResource {	
	 @Inject	
	 private UserService userService;	
!

	
	
	
	
	

@Path("{name}") // PUT /user/{name}	
@PUT	
public User create(@PathParam("name") String name) {	
	 return this.userService.create(name);	
}	

!

	
	
	
	
	
}

@Path(“{name}") // GET /user/{name}	
@GET	
public User show(@PathParam("name") String name) {	
	 return this.userService.show(name);	
}	

JAX-RS
テストするぞ

http://www.flickr.com/photos/mattt_org/2831690932
Separate
UT
and
IT
どう分けるか
<plugin>	
	 <groupId>org.apache.maven.plugins</groupId>	
	 <artifactId>maven-failsafe-plugin</artifactId>	
	 <executions>	
	 	 <execution>	
	 	 	 <goals>	
	 	 	 	 <goal>integration-test</goal>	
	 	 	 </goals>	
	 	 </execution>	
	 </executions>	
</plugin>

Integration
Test
mvn verify	

Integration
Test
<plugin>	
	 <groupId>org.apache.maven.plugins</groupId>	
	 <artifactId>maven-surefire-plugin</artifactId>	
	 <configuration>	
	 	 <excludes>	
	 	 	 <exclude>**/*IT.java</exclude>	
	 	 </excludes>	
	 </configuration>	
</plugin>	

Unit
Test
mvn test	

Unit
Test
<persistence>	
	 <persistence-unit name="camellia"	
	 	 transaction-type="JTA">	
!

	 	 <jta-data-source>jdbc/camellia</jta-data-source>	
!

	 	 <exclude-unlisted-classes>	
	 	 	 false	
	 	 </exclude-unlisted-classes>	
!

	
	
	
	
	
!

	
	
	
	
	

Preparing
Entity
Manager

<properties>	
	 <property	
	 	 name="eclipselink.ddl-generation"	
	 	 value="create-tables" />	
</properties>	

	 </persistence-unit>	
</persistence>
JPA

Map<String, String> prop = Maps.newHashMap();	
!

prop.put("javax.persistence.transactionType",	
	 "RESOURCE_LOCAL");	
prop.put("javax.persistence.jtaDataSource", "");	
prop.put("javax.persistence.jdbc.driver", "org.h2.Driver");	
prop.put("javax.persistence.jdbc.url", "jdbc:h2:mem:");	
!

Preparing
Entity
Manager

EntityManagerFactory entityManagerFactory =	
	 Persistence.	
	 	 createEntityManagerFactory("camellia", prop);	
!

EntityManager entityManager =	
	 entityManagerFactory.createEntityManager();
JUnit

JMockit

public class UserDaoTest extends BaseDaoTest {	
	 private FixtureHelper fixtureHelper =	
	 	 new FixtureHelper();	
!

	 private UserDao userDao = new UserDao();	
!

	
	
	
	
!

Concrete
Dao
Test

@Before	
public void before() throws Throwable {	
	 Deencapsulation.setField(this.fixtureHelper,	
	 	 this.getEntityManager());	

	 	 Deencapsulation.setField(this.userDao,	
	 	 	 this.getEntityManager());	
	 }
JUnit

	
	
	
	

@Test	
public void findByNameSuccess() {	
	 this.fixtureHelper.	
	 	 createUser("user", "password");	

!

	
	
	
	
}

	 assertThat(	
	 	 this.userDao.findByName("user”).getName(),	
	 	 is("user"));	
}	

Concrete
Dao
Test
JUnit

Arquillian

@RunWith(Arquillian.class)	
public abstract class BaseServiceIT {	
!

	 @Deployment	
	 public static Archive<?> createDeployment() {	
	 	 WebArchive war = ShrinkWrap.create(WebArchive.class);	
!

	
	
	
	
!

Abstract
Integration
Test

	
	
	
	

war.addPackages(true, Root.class.getPackage());	
war.addAsWebInfResource(EmptyAsset.INSTANCE,	
	 "beans.xml");	
war.addAsResource("META-INF/persistence.xml");	

	 	 return war;	
	 }	
}
JUnit

CDI

public class UserServiceIT extends BaseServiceIT {	
	 @Inject private FixtureHelper fixtureHelper;	
	 @Inject private UserService userService;	
!

	
	
	
	
	
	
!

	
	
	
	
	
}

@Test	
public void createSuccess() {	
	 assertThat(	
	 	 this.userService.create("create user", "password"),	
	 	 is(notNullValue()));	
}	

Concrete
Integration
Test

@Test(expected = TransactionalException.class)	
public void createFailureByDuplicatedName() {	
	 this.userService.create("duplicated user","password");	
	 this.userService.create("duplicated user","password");	
}
リリース&デプロイするぞ

http://www.flickr.com/photos/ivyfield/4763965911
Release
and
Version

リリースとバージョン
<scm>	
	 <url>https://github.com/nagaseyasuhito/camellia</url>	
	 <connection>	
	 	 scm:git:git@github.com:nagaseyasuhito/camellia.git	
	 </connection>	
	 <tag>HEAD</tag>	
</scm>	
!

maven
release
plugin

<build>	
	 <plugins>	
	 	 <plugin>	
	 	 	 <groupId>org.apache.maven.plugins</groupId>	
	 	 	 <artifactId>maven-release-plugin</artifactId>	
	 	 	 <configuration>	
	 	 	 	 <tagNameFormat>@{project.version}</tagNameFormat>	
	 	 	 	 <goals>package</goals>	
	 	 	 </configuration>	
	 	 </plugin>	
	 </plugins>	
</build>
maven
release
plugin

mvn release:prepare release:perform
Unit Test

Integration Test

Development
Deploy

Jenkins
Build
Pipeline
Plugin
Release

Staging
Deploy

Production
Deploy
GitHub

Clone
workspace
SCM
Plugin
Unit Test

Clone workspace SCM

Integration Test
通常時

Production
Deploy

das.camellia
camellia:1.0.0

Deploy
to
GlassFish

camellia

as1.camellia
camellia:1.0.0

as2.camellia
camellia:1.0.0

Reverse
Proxy
asadmin deploy	
	 --target=camellia	
	 --enabled=false	
	 --name camellia:1.0.1 /tmp/camellia:1.0.1.war

Production
Deploy

das.camellia
camellia:1.0.0
camellia:1.0.1

Deploy
to
GlassFish

camellia

as1.camellia
camellia:1.0.0

as2.camellia
camellia:1.0.0

Reverse
Proxy
リバースプロキシからas1.camelliaを抜く

Production
Deploy

das.camellia
camellia:1.0.0
camellia:1.0.1

Deploy
to
GlassFish

camellia

as1.camellia
camellia:1.0.0

as2.camellia
camellia:1.0.0

Reverse
Proxy
asadmin enable --target=as1.camellia camellia:1.0.1

Production
Deploy

das.camellia
camellia:1.0.0
camellia:1.0.1

Deploy
to
GlassFish

camellia

as1.camellia
camellia:1.0.1

as2.camellia
camellia:1.0.0

Reverse
Proxy
リバースプロキシにas1.camelliaを入れる

Production
Deploy

das.camellia
camellia:1.0.0
camellia:1.0.1

Deploy
to
GlassFish

camellia

as1.camellia
camellia:1.0.1

as2.camellia
camellia:1.0.0

Reverse
Proxy
リバースプロキシからas2.camelliaを抜く

Production
Deploy

das.camellia
camellia:1.0.0
camellia:1.0.1

Deploy
to
GlassFish

camellia

as1.camellia
camellia:1.0.1

as2.camellia
camellia:1.0.0

Reverse
Proxy
asadmin enable --target=as2.camellia camellia:1.0.1

Production
Deploy

das.camellia
camellia:1.0.0
camellia:1.0.1

Deploy
to
GlassFish

camellia

as1.camellia
camellia:1.0.1

as2.camellia
camellia:1.0.1

Reverse
Proxy
リバースプロキシにas2.camelliaを入れる

Production
Deploy

das.camellia
camellia:1.0.0
camellia:1.0.1

Deploy
to
GlassFish

camellia

as1.camellia
camellia:1.0.1

as2.camellia
camellia:1.0.1

Reverse
Proxy
http://www.flickr.com/photos/defenceimages/6331498981

運用するぞ
asadmin set-log-levels org.eclipse.persistence.session=FINE

logging
com.sun.enterprise.server.logging.UniformLogFormatter
[#|2013-11-23T21:37:11.979+0900|INFO|glassfish 4.0|
javax.enterprise.system.core|
_ThreadID=101;_ThreadName=Thread-16;_TimeMillis=1385210231979;_Level
Value=800;_MessageID=NCLS-CORE-00022;|	
Loading application __admingui done in 6,277 ms|#]

com.sun.enterprise.server.logging.ODLLogFormatter
[2013-11-23T21:39:41.869+0900] [glassfish 4.0] [INFO] [NCLSCORE-00022] [javax.enterprise.system.core] [tid: _ThreadID=100
_ThreadName=Thread-16] [timeMillis: 1385210381869] [levelValue: 800]
[[	
Loading application __admingui done in 5,286 ms]]

logging
JMX
@MXBean	
public interface UserMonitor {	
	 long getNumberOfUsers();	
}	

JMX
JMX

Lombok

EJB

CDI

@Startup @Singleton	
public class UserMonitorImpl implements UserMonitor {	
	 @Inject private UserDao userDao;	
!
	 @SneakyThrows @PostConstruct	
	 public void initialize() {	
	 	 ObjectName objectName = new ObjectName("Camellia:type=User");	
	 	 MBeanServer server = ManagementFactory.getPlatformMBeanServer()	
	 	 if (server.isRegistered(objectName)) {	
	 	 	 server.unregisterMBean(objectName);	
	 	 }	
	 	 server.registerMBean(this, objectName);	
	 }	
!
	 @Override	
	 public long getNumberOfUsers() {	
	 	 return this.userDao.count();	
	 }	
}

JMX
デモしたい

Demo
Gangliaで出したい
asadmin create-jvm-options	
	 '-javaagent:	
	 ${com.sun.aas.instanceRoot}/lib/jmxetric-1.0.4.jar=	
	 config=${com.sun.aas.instanceRoot}/config/jmxetric.xml'

jmetric
<jmxetric-config>	
	 <jvm process="Camellia" />	
!
	 <sample delay="300">	
	 	 <mbean name="Camellia:type=User" pname="User">	
	 	 	 <attribute name="NumberOfUsers" type="int16" />	
	 	 </mbean>	
	 </sample>	
!
	 <ganglia hostname="localhost" port="8649" mode="multicast"	
	 	 wireformat31x="true" />	
</jmxetric-config>

jmetric
まとめ
エンタープライズ言うな

Conclusion
インターネットを通じて、

世界をより良くする。

Copyright © GREE, Inc. All Rights Reserved.
Copyright © GREE, Inc. All Rights Reserved.

Weitere ähnliche Inhalte

Was ist angesagt?

MAVEN - Short documentation
MAVEN - Short documentationMAVEN - Short documentation
MAVEN - Short documentationHolasz Kati
 
Testing with VS2010 - A Bugs Life
Testing with VS2010 - A Bugs LifeTesting with VS2010 - A Bugs Life
Testing with VS2010 - A Bugs LifePeter Gfader
 
Adventures In JavaScript Testing
Adventures In JavaScript TestingAdventures In JavaScript Testing
Adventures In JavaScript TestingThomas Fuchs
 
TestNG Session presented in PB
TestNG Session presented in PBTestNG Session presented in PB
TestNG Session presented in PBAbhishek Yadav
 
JAVASCRIPT TDD(Test driven Development) & Qunit Tutorial
JAVASCRIPT TDD(Test driven Development) & Qunit TutorialJAVASCRIPT TDD(Test driven Development) & Qunit Tutorial
JAVASCRIPT TDD(Test driven Development) & Qunit TutorialAnup Singh
 
Introduction of TestNG framework and its benefits over Junit framework
Introduction of TestNG framework and its benefits over Junit frameworkIntroduction of TestNG framework and its benefits over Junit framework
Introduction of TestNG framework and its benefits over Junit frameworkBugRaptors
 
JAVASCRIPT Test Driven Development & Jasmine
JAVASCRIPT Test Driven Development & JasmineJAVASCRIPT Test Driven Development & Jasmine
JAVASCRIPT Test Driven Development & JasmineAnup Singh
 
JUnit 5 - The Next Generation of JUnit - Ted's Tool Time
JUnit 5 - The Next Generation of JUnit - Ted's Tool TimeJUnit 5 - The Next Generation of JUnit - Ted's Tool Time
JUnit 5 - The Next Generation of JUnit - Ted's Tool TimeTed Vinke
 
Test driven development - JUnit basics and best practices
Test driven development - JUnit basics and best practicesTest driven development - JUnit basics and best practices
Test driven development - JUnit basics and best practicesNarendra Pathai
 

Was ist angesagt? (20)

MAVEN - Short documentation
MAVEN - Short documentationMAVEN - Short documentation
MAVEN - Short documentation
 
Test NG Framework Complete Walk Through
Test NG Framework Complete Walk ThroughTest NG Framework Complete Walk Through
Test NG Framework Complete Walk Through
 
TestNG
TestNGTestNG
TestNG
 
Testing with VS2010 - A Bugs Life
Testing with VS2010 - A Bugs LifeTesting with VS2010 - A Bugs Life
Testing with VS2010 - A Bugs Life
 
Adventures In JavaScript Testing
Adventures In JavaScript TestingAdventures In JavaScript Testing
Adventures In JavaScript Testing
 
Testing In Java
Testing In JavaTesting In Java
Testing In Java
 
Test ng tutorial
Test ng tutorialTest ng tutorial
Test ng tutorial
 
Thread & concurrancy
Thread & concurrancyThread & concurrancy
Thread & concurrancy
 
TestNG Session presented in PB
TestNG Session presented in PBTestNG Session presented in PB
TestNG Session presented in PB
 
JAVASCRIPT TDD(Test driven Development) & Qunit Tutorial
JAVASCRIPT TDD(Test driven Development) & Qunit TutorialJAVASCRIPT TDD(Test driven Development) & Qunit Tutorial
JAVASCRIPT TDD(Test driven Development) & Qunit Tutorial
 
TestNG vs. JUnit4
TestNG vs. JUnit4TestNG vs. JUnit4
TestNG vs. JUnit4
 
TestNg_Overview_Config
TestNg_Overview_ConfigTestNg_Overview_Config
TestNg_Overview_Config
 
Testacular
TestacularTestacular
Testacular
 
Introduction of TestNG framework and its benefits over Junit framework
Introduction of TestNG framework and its benefits over Junit frameworkIntroduction of TestNG framework and its benefits over Junit framework
Introduction of TestNG framework and its benefits over Junit framework
 
JAVASCRIPT Test Driven Development & Jasmine
JAVASCRIPT Test Driven Development & JasmineJAVASCRIPT Test Driven Development & Jasmine
JAVASCRIPT Test Driven Development & Jasmine
 
JUnit 5 - The Next Generation of JUnit - Ted's Tool Time
JUnit 5 - The Next Generation of JUnit - Ted's Tool TimeJUnit 5 - The Next Generation of JUnit - Ted's Tool Time
JUnit 5 - The Next Generation of JUnit - Ted's Tool Time
 
TestNG with selenium
TestNG with seleniumTestNG with selenium
TestNG with selenium
 
Test driven development - JUnit basics and best practices
Test driven development - JUnit basics and best practicesTest driven development - JUnit basics and best practices
Test driven development - JUnit basics and best practices
 
Selenium with java
Selenium with javaSelenium with java
Selenium with java
 
testng
testngtestng
testng
 

Andere mochten auch

Javaでのバリデーション 〜Bean Validation篇〜
Javaでのバリデーション 〜Bean Validation篇〜Javaでのバリデーション 〜Bean Validation篇〜
Javaでのバリデーション 〜Bean Validation篇〜eiryu
 
Spring bootでweb ユニットテスト編
Spring bootでweb ユニットテスト編Spring bootでweb ユニットテスト編
Spring bootでweb ユニットテスト編なべ
 
focuslight-validator validate sinatra application - validation night at LINE ...
focuslight-validator validate sinatra application - validation night at LINE ...focuslight-validator validate sinatra application - validation night at LINE ...
focuslight-validator validate sinatra application - validation night at LINE ...Satoshi Suzuki
 
Extending WildFly
Extending WildFlyExtending WildFly
Extending WildFlyJBUG London
 
大規模な負荷でもドキドキしない為のJava EE
大規模な負荷でもドキドキしない為のJava EE大規模な負荷でもドキドキしない為のJava EE
大規模な負荷でもドキドキしない為のJava EETaiichilow Nagase
 
Spring bootでweb バリデート編
Spring bootでweb バリデート編Spring bootでweb バリデート編
Spring bootでweb バリデート編なべ
 
Go言語のスライスを理解しよう
Go言語のスライスを理解しようGo言語のスライスを理解しよう
Go言語のスライスを理解しようYasutaka Kawamoto
 
Java EE 再入門
Java EE 再入門Java EE 再入門
Java EE 再入門minazou67
 
Achieving CI/CD with Kubernetes
Achieving CI/CD with KubernetesAchieving CI/CD with Kubernetes
Achieving CI/CD with KubernetesRamit Surana
 

Andere mochten auch (9)

Javaでのバリデーション 〜Bean Validation篇〜
Javaでのバリデーション 〜Bean Validation篇〜Javaでのバリデーション 〜Bean Validation篇〜
Javaでのバリデーション 〜Bean Validation篇〜
 
Spring bootでweb ユニットテスト編
Spring bootでweb ユニットテスト編Spring bootでweb ユニットテスト編
Spring bootでweb ユニットテスト編
 
focuslight-validator validate sinatra application - validation night at LINE ...
focuslight-validator validate sinatra application - validation night at LINE ...focuslight-validator validate sinatra application - validation night at LINE ...
focuslight-validator validate sinatra application - validation night at LINE ...
 
Extending WildFly
Extending WildFlyExtending WildFly
Extending WildFly
 
大規模な負荷でもドキドキしない為のJava EE
大規模な負荷でもドキドキしない為のJava EE大規模な負荷でもドキドキしない為のJava EE
大規模な負荷でもドキドキしない為のJava EE
 
Spring bootでweb バリデート編
Spring bootでweb バリデート編Spring bootでweb バリデート編
Spring bootでweb バリデート編
 
Go言語のスライスを理解しよう
Go言語のスライスを理解しようGo言語のスライスを理解しよう
Go言語のスライスを理解しよう
 
Java EE 再入門
Java EE 再入門Java EE 再入門
Java EE 再入門
 
Achieving CI/CD with Kubernetes
Achieving CI/CD with KubernetesAchieving CI/CD with Kubernetes
Achieving CI/CD with Kubernetes
 

Ähnlich wie おっぴろげJavaEE DevOps

Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and MavenWebtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and MavenThorsten Kamann
 
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...Jesse Gallagher
 
Strut2-Spring-Hibernate
Strut2-Spring-HibernateStrut2-Spring-Hibernate
Strut2-Spring-HibernateJay Shah
 
Developer Tests - Things to Know
Developer Tests - Things to KnowDeveloper Tests - Things to Know
Developer Tests - Things to KnowVaidas Pilkauskas
 
Testando JavaScript com Spock
Testando JavaScript com SpockTestando JavaScript com Spock
Testando JavaScript com SpockIsmael
 
Dropwizard and Friends
Dropwizard and FriendsDropwizard and Friends
Dropwizard and FriendsYun Zhi Lin
 
Enterprise Build And Test In The Cloud
Enterprise Build And Test In The CloudEnterprise Build And Test In The Cloud
Enterprise Build And Test In The CloudCarlos Sanchez
 
Seven Peaks Speaks - Compose Screenshot Testing Made Easy
Seven Peaks Speaks - Compose Screenshot Testing Made EasySeven Peaks Speaks - Compose Screenshot Testing Made Easy
Seven Peaks Speaks - Compose Screenshot Testing Made EasySeven Peaks Speaks
 
Google I/O 2021 Recap
Google I/O 2021 RecapGoogle I/O 2021 Recap
Google I/O 2021 Recapfurusin
 
Java REST API Comparison: Micronaut, Quarkus, and Spring Boot - jconf.dev 2020
Java REST API Comparison: Micronaut, Quarkus, and Spring Boot - jconf.dev 2020Java REST API Comparison: Micronaut, Quarkus, and Spring Boot - jconf.dev 2020
Java REST API Comparison: Micronaut, Quarkus, and Spring Boot - jconf.dev 2020Matt Raible
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet Sagar Nakul
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet Sagar Nakul
 
Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022Matt Raible
 
Building frameworks over Selenium
Building frameworks over SeleniumBuilding frameworks over Selenium
Building frameworks over SeleniumCristian COȚOI
 
Javascript unit testing, yes we can e big
Javascript unit testing, yes we can   e bigJavascript unit testing, yes we can   e big
Javascript unit testing, yes we can e bigAndy Peterson
 
Spring boot introduction
Spring boot introductionSpring boot introduction
Spring boot introductionRasheed Waraich
 
jQuery 1.3 and jQuery UI
jQuery 1.3 and jQuery UIjQuery 1.3 and jQuery UI
jQuery 1.3 and jQuery UIjeresig
 

Ähnlich wie おっぴろげJavaEE DevOps (20)

Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and MavenWebtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
 
Swt J Face 3/3
Swt J Face 3/3Swt J Face 3/3
Swt J Face 3/3
 
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
 
GlassFish Embedded API
GlassFish Embedded APIGlassFish Embedded API
GlassFish Embedded API
 
Strut2-Spring-Hibernate
Strut2-Spring-HibernateStrut2-Spring-Hibernate
Strut2-Spring-Hibernate
 
Developer Tests - Things to Know
Developer Tests - Things to KnowDeveloper Tests - Things to Know
Developer Tests - Things to Know
 
Testando JavaScript com Spock
Testando JavaScript com SpockTestando JavaScript com Spock
Testando JavaScript com Spock
 
Dropwizard and Friends
Dropwizard and FriendsDropwizard and Friends
Dropwizard and Friends
 
Enterprise Build And Test In The Cloud
Enterprise Build And Test In The CloudEnterprise Build And Test In The Cloud
Enterprise Build And Test In The Cloud
 
Seven Peaks Speaks - Compose Screenshot Testing Made Easy
Seven Peaks Speaks - Compose Screenshot Testing Made EasySeven Peaks Speaks - Compose Screenshot Testing Made Easy
Seven Peaks Speaks - Compose Screenshot Testing Made Easy
 
Google I/O 2021 Recap
Google I/O 2021 RecapGoogle I/O 2021 Recap
Google I/O 2021 Recap
 
Java REST API Comparison: Micronaut, Quarkus, and Spring Boot - jconf.dev 2020
Java REST API Comparison: Micronaut, Quarkus, and Spring Boot - jconf.dev 2020Java REST API Comparison: Micronaut, Quarkus, and Spring Boot - jconf.dev 2020
Java REST API Comparison: Micronaut, Quarkus, and Spring Boot - jconf.dev 2020
 
Struts,Jsp,Servlet
Struts,Jsp,ServletStruts,Jsp,Servlet
Struts,Jsp,Servlet
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet
 
Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022
 
Building frameworks over Selenium
Building frameworks over SeleniumBuilding frameworks over Selenium
Building frameworks over Selenium
 
Javascript unit testing, yes we can e big
Javascript unit testing, yes we can   e bigJavascript unit testing, yes we can   e big
Javascript unit testing, yes we can e big
 
Spring boot introduction
Spring boot introductionSpring boot introduction
Spring boot introduction
 
jQuery 1.3 and jQuery UI
jQuery 1.3 and jQuery UIjQuery 1.3 and jQuery UI
jQuery 1.3 and jQuery UI
 

Kürzlich hochgeladen

Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024The Digital Insurer
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 

Kürzlich hochgeladen (20)

Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 

おっぴろげJavaEE DevOps